diff options
| author | Mark Wielaard <[email protected]> | 2018-09-14 12:28:58 +0200 |
|---|---|---|
| committer | Mark Wielaard <[email protected]> | 2018-09-14 12:28:58 +0200 |
| commit | 029c76f0d4b06584e370b5fc0112712ba99a6219 (patch) | |
| tree | 20c91ff0dc7125251b26ded357e71c542b67d5cc /libdwfl | |
| parent | 94c975eefdfbfa9319b7bab69600c76fe6be7910 (diff) | |
| parent | 52b6b2f1f49e7385527e9f311f248092be0c0b61 (diff) | |
Merge branch 'master' into mjw/RH-DTSdts-0.174
elfutils 0.174 release
Removed new M68K and RISCV tests.
Diffstat (limited to 'libdwfl')
| -rw-r--r-- | libdwfl/ChangeLog | 10 | ||||
| -rw-r--r-- | libdwfl/dwfl_segment_report_module.c | 6 | ||||
| -rw-r--r-- | libdwfl/elf-from-memory.c | 6 | ||||
| -rw-r--r-- | libdwfl/linux-pid-attach.c | 2 |
4 files changed, 23 insertions, 1 deletions
diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index acb4236a..5e9b986d 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,13 @@ +2018-09-13 Mark Wielaard <[email protected]> + + * dwfl_segment_report_module.c (dwfl_segment_report_module): + Document why we use e_shnum directly. + * elf-from-memory.c (elf_from_remote_memory): Likewise. + +2018-07-17 Ulf Hermann <[email protected]> + + * linux-pid-attach.c: Include sys/uio.h only on linux. + 2018-06-04 Mark Wielaard <[email protected]> * libdwflP.h (__libdwfl_addrsym): Remove function declaration. diff --git a/libdwfl/dwfl_segment_report_module.c b/libdwfl/dwfl_segment_report_module.c index 207a2573..36e5c823 100644 --- a/libdwfl/dwfl_segment_report_module.c +++ b/libdwfl/dwfl_segment_report_module.c @@ -367,6 +367,11 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, phentsize = ehdr.e32.e_phentsize; if (phentsize != sizeof (Elf32_Phdr)) return finish (); + /* NOTE if the number of sections is > 0xff00 then e_shnum + is zero and the actual number would come from the section + zero sh_size field. We ignore this here because getting shdrs + is just a nice bonus (see below in consider_phdr PT_LOAD + where we trim the last segment). */ shdrs_end = ehdr.e32.e_shoff + ehdr.e32.e_shnum * ehdr.e32.e_shentsize; break; @@ -380,6 +385,7 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, phentsize = ehdr.e64.e_phentsize; if (phentsize != sizeof (Elf64_Phdr)) return finish (); + /* See the NOTE above for shdrs_end and ehdr.e32.e_shnum. */ shdrs_end = ehdr.e64.e_shoff + ehdr.e64.e_shnum * ehdr.e64.e_shentsize; break; diff --git a/libdwfl/elf-from-memory.c b/libdwfl/elf-from-memory.c index 12a0a1be..c54c1b99 100644 --- a/libdwfl/elf-from-memory.c +++ b/libdwfl/elf-from-memory.c @@ -139,6 +139,11 @@ elf_from_remote_memory (GElf_Addr ehdr_vma, phentsize = ehdr.e32.e_phentsize; if (phentsize != sizeof (Elf32_Phdr) || phnum == 0) goto bad_elf; + /* NOTE if the number of sections is > 0xff00 then e_shnum + is zero and the actual number would come from the section + zero sh_size field. We ignore this here because getting shdrs + is just a nice bonus (see below where we trim the last phdrs + PT_LOAD segment). */ shdrs_end = ehdr.e32.e_shoff + ehdr.e32.e_shnum * ehdr.e32.e_shentsize; break; @@ -151,6 +156,7 @@ elf_from_remote_memory (GElf_Addr ehdr_vma, phentsize = ehdr.e64.e_phentsize; if (phentsize != sizeof (Elf64_Phdr) || phnum == 0) goto bad_elf; + /* See the NOTE above for shdrs_end and ehdr.e32.e_shnum. */ shdrs_end = ehdr.e64.e_shoff + ehdr.e64.e_shnum * ehdr.e64.e_shentsize; break; diff --git a/libdwfl/linux-pid-attach.c b/libdwfl/linux-pid-attach.c index 1133db6c..f19e9b49 100644 --- a/libdwfl/linux-pid-attach.c +++ b/libdwfl/linux-pid-attach.c @@ -34,13 +34,13 @@ #include "libdwflP.h" #include <sys/types.h> #include <sys/stat.h> -#include <sys/uio.h> #include <fcntl.h> #include <dirent.h> #include <unistd.h> #ifdef __linux__ +#include <sys/uio.h> #include <sys/ptrace.h> #include <sys/syscall.h> #include <sys/wait.h> |
