diff options
author | Stephen Webb <swebb@blackberry.com> | 2020-06-11 17:56:08 -0400 |
---|---|---|
committer | Dave Watson <dade.watson@gmail.com> | 2020-06-18 13:42:19 -0700 |
commit | d4f91519bb0352259aaea484ddce60ad12f1f444 (patch) | |
tree | 54540d5f1051981106c1e7c4d4f5a22e5d2086c3 /src | |
parent | 12e70a59df9a2e1c436c79c1dba941ca555db843 (diff) | |
download | libunwind-d4f91519bb0352259aaea484ddce60ad12f1f444.tar.gz |
Handle <elf.h> that uses enums instead of defines
Handle the case in which the system-supplied elf.h file uses C enums instead of
macros preprocessor defines for some constants.
Made the inclusion of the discovered elf.h file more consistent for portability
to non-Linux targets.
Put some libunwind-specific ELF macros into the UNW_ namespace.
Diffstat (limited to 'src')
-rw-r--r-- | src/coredump/_UCD_create.c | 6 | ||||
-rw-r--r-- | src/coredump/_UCD_elf_map_image.c | 6 | ||||
-rw-r--r-- | src/coredump/_UCD_find_proc_info.c | 6 | ||||
-rw-r--r-- | src/coredump/_UCD_get_proc_name.c | 4 | ||||
-rw-r--r-- | src/elf32.h | 4 | ||||
-rw-r--r-- | src/elf64.h | 4 | ||||
-rw-r--r-- | src/elfxx.h | 4 | ||||
-rw-r--r-- | src/ptrace/_UPT_get_proc_name.c | 4 |
8 files changed, 25 insertions, 13 deletions
diff --git a/src/coredump/_UCD_create.c b/src/coredump/_UCD_create.c index c9e6d07c..e070d8ba 100644 --- a/src/coredump/_UCD_create.c +++ b/src/coredump/_UCD_create.c @@ -31,7 +31,11 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include <byteswap.h> #endif -#include <elf.h> +#if defined(HAVE_ELF_H) +# include <elf.h> +#if defined(HAVE_SYS_ELF_H) +# include <sys/elf.h> +#endif #include <sys/procfs.h> /* struct elf_prstatus */ #include "_UCD_lib.h" diff --git a/src/coredump/_UCD_elf_map_image.c b/src/coredump/_UCD_elf_map_image.c index 4b3db0bb..99fd25e8 100644 --- a/src/coredump/_UCD_elf_map_image.c +++ b/src/coredump/_UCD_elf_map_image.c @@ -21,7 +21,11 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#include <elf.h> +#if defined(HAVE_ELF_H) +# include <elf.h> +#elif defined(HAVE_SYS_ELF_H) +# include <sys/elf.h> +#endif #include "_UCD_lib.h" #include "_UCD_internal.h" diff --git a/src/coredump/_UCD_find_proc_info.c b/src/coredump/_UCD_find_proc_info.c index 33b66c8e..cb003401 100644 --- a/src/coredump/_UCD_find_proc_info.c +++ b/src/coredump/_UCD_find_proc_info.c @@ -21,7 +21,11 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#include <elf.h> +#if defined(HAVE_ELF_H) +# include <elf.h> +#elif defined(HAVE_SYS_ELF_H) +# include <sys/elf.h> +#endif #include "_UCD_lib.h" #include "_UCD_internal.h" diff --git a/src/coredump/_UCD_get_proc_name.c b/src/coredump/_UCD_get_proc_name.c index 3a4c9b82..cd5ee892 100644 --- a/src/coredump/_UCD_get_proc_name.c +++ b/src/coredump/_UCD_get_proc_name.c @@ -64,9 +64,9 @@ _UCD_get_proc_name (unw_addr_space_t as, unw_word_t ip, { struct UCD_info *ui = arg; -#if ELF_CLASS == ELFCLASS64 +#if UNW_ELF_CLASS == UNW_ELFCLASS64 return _Uelf64_CD_get_proc_name (ui, as, ip, buf, buf_len, offp); -#elif ELF_CLASS == ELFCLASS32 +#elif UNW_ELF_CLASS == UNW_ELFCLASS32 return _Uelf32_CD_get_proc_name (ui, as, ip, buf, buf_len, offp); #else return -UNW_ENOINFO; diff --git a/src/elf32.h b/src/elf32.h index 2c7bca4c..9747630a 100644 --- a/src/elf32.h +++ b/src/elf32.h @@ -1,8 +1,8 @@ #ifndef elf32_h #define elf32_h -#ifndef ELF_CLASS -#define ELF_CLASS ELFCLASS32 +#ifndef UNW_ELF_CLASS +# define UNW_ELF_CLASS UNW_ELFCLASS32 #endif #include "elfxx.h" diff --git a/src/elf64.h b/src/elf64.h index 091fba8e..1956c73c 100644 --- a/src/elf64.h +++ b/src/elf64.h @@ -1,8 +1,8 @@ #ifndef elf64_h #define elf64_h -#ifndef ELF_CLASS -#define ELF_CLASS ELFCLASS64 +#ifndef UNW_ELF_CLASS +# define UNW_ELF_CLASS UNW_ELFCLASS64 #endif #include "elfxx.h" diff --git a/src/elfxx.h b/src/elfxx.h index 830432c2..fe5fcbcd 100644 --- a/src/elfxx.h +++ b/src/elfxx.h @@ -32,7 +32,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "libunwind_i.h" -#if ELF_CLASS == ELFCLASS32 +#if UNW_ELF_CLASS == UNW_ELFCLASS32 # define ELF_W(x) ELF32_##x # define Elf_W(x) Elf32_##x # define elf_w(x) _Uelf32_##x @@ -64,7 +64,7 @@ elf_w (valid_object) (struct elf_image *ei) return 0; return (memcmp (ei->image, ELFMAG, SELFMAG) == 0 - && ((uint8_t *) ei->image)[EI_CLASS] == ELF_CLASS + && ((uint8_t *) ei->image)[EI_CLASS] == UNW_ELF_CLASS && ((uint8_t *) ei->image)[EI_VERSION] != EV_NONE && ((uint8_t *) ei->image)[EI_VERSION] <= EV_CURRENT); } diff --git a/src/ptrace/_UPT_get_proc_name.c b/src/ptrace/_UPT_get_proc_name.c index 79c1f38e..4fc93e74 100644 --- a/src/ptrace/_UPT_get_proc_name.c +++ b/src/ptrace/_UPT_get_proc_name.c @@ -32,9 +32,9 @@ _UPT_get_proc_name (unw_addr_space_t as, unw_word_t ip, { struct UPT_info *ui = arg; -#if ELF_CLASS == ELFCLASS64 +#if UNW_ELF_CLASS == UNW_ELFCLASS64 return _Uelf64_get_proc_name (as, ui->pid, ip, buf, buf_len, offp); -#elif ELF_CLASS == ELFCLASS32 +#elif UNW_ELF_CLASS == UNW_ELFCLASS32 return _Uelf32_get_proc_name (as, ui->pid, ip, buf, buf_len, offp); #else return -UNW_ENOINFO; |