From 02cefdaa6429e620d6457fdb3ad9934f194c5a93 Mon Sep 17 00:00:00 2001 From: Kurt Roeckx Date: Tue, 22 Apr 2014 21:46:22 +0200 Subject: [PATCH] Unwinding is only supported on Linux Index: elfutils-0.158/backends/i386_initreg.c =================================================================== --- elfutils-0.158.orig/backends/i386_initreg.c 2014-05-01 17:11:18.870616302 +0000 +++ elfutils-0.158/backends/i386_initreg.c 2014-05-01 17:11:18.866616384 +0000 @@ -44,7 +44,7 @@ ebl_tid_registers_t *setfunc __attribute__ ((unused)), void *arg __attribute__ ((unused))) { -#if !defined __i386__ && !defined __x86_64__ +#if (!defined __i386__ && !defined __x86_64__) || !defined(__linux__) return false; #else /* __i386__ || __x86_64__ */ struct user_regs_struct user_regs; Index: elfutils-0.158/backends/x86_64_initreg.c =================================================================== --- elfutils-0.158.orig/backends/x86_64_initreg.c 2014-05-01 17:11:18.870616302 +0000 +++ elfutils-0.158/backends/x86_64_initreg.c 2014-05-01 17:11:18.866616384 +0000 @@ -44,7 +44,7 @@ ebl_tid_registers_t *setfunc __attribute__ ((unused)), void *arg __attribute__ ((unused))) { -#ifndef __x86_64__ +#if !defined(__x86_64__) || !defined(__linux__) return false; #else /* __x86_64__ */ struct user_regs_struct user_regs; Index: elfutils-0.158/libdwfl/linux-pid-attach.c =================================================================== --- elfutils-0.158.orig/libdwfl/linux-pid-attach.c 2014-05-01 17:11:18.870616302 +0000 +++ elfutils-0.158/libdwfl/linux-pid-attach.c 2014-05-01 17:12:47.980766442 +0000 @@ -37,6 +37,8 @@ # define MAX(a, b) ((a) > (b) ? (a) : (b)) #endif +#ifdef __linux__ + struct pid_arg { DIR *dir; @@ -358,3 +360,87 @@ return 0; } INTDEF (dwfl_linux_proc_attach) + +#else /* __linux__ */ + +static pid_t +pid_next_thread (Dwfl *dwfl __attribute__ ((unused)), + void *dwfl_arg __attribute__ ((unused)), + void **thread_argp __attribute__ ((unused))) +{ + errno = ENOSYS; + __libdwfl_seterrno (DWFL_E_ERRNO); + return -1; +} + +static bool +pid_getthread (Dwfl *dwfl __attribute__ ((unused)), + pid_t tid __attribute__ ((unused)), + void *dwfl_arg __attribute__ ((unused)), + void **thread_argp __attribute__ ((unused))) +{ + errno = ENOSYS; + __libdwfl_seterrno (DWFL_E_ERRNO); + return false; +} + +static bool +pid_memory_read (Dwfl *dwfl __attribute__ ((unused)), + Dwarf_Addr addr __attribute__ ((unused)), + Dwarf_Word *result __attribute__ ((unused)), + void *arg __attribute__ ((unused))) +{ + errno = ENOSYS; + __libdwfl_seterrno (DWFL_E_ERRNO); + return false; +} + +static bool +pid_set_initial_registers (Dwfl_Thread *thread __attribute__ ((unused)), + void *thread_arg __attribute__ ((unused))) +{ + errno = ENOSYS; + __libdwfl_seterrno (DWFL_E_ERRNO); + return false; +} + +static void +pid_detach (Dwfl *dwfl __attribute__ ((unused)), + void *dwfl_arg __attribute__ ((unused))) +{ +} + +static void +pid_thread_detach (Dwfl_Thread *thread __attribute__ ((unused)), + void *thread_arg __attribute__ ((unused))) +{ +} + +static const Dwfl_Thread_Callbacks pid_thread_callbacks = +{ + pid_next_thread, + pid_getthread, + pid_memory_read, + pid_set_initial_registers, + pid_detach, + pid_thread_detach, +}; + +int +dwfl_linux_proc_attach (Dwfl *dwfl __attribute__ ((unused)), + pid_t pid __attribute__ ((unused)), + bool assume_ptrace_stopped __attribute__ ((unused))) +{ + return ENOSYS; +} +INTDEF (dwfl_linux_proc_attach) + +struct __libdwfl_pid_arg * +internal_function +__libdwfl_get_pid_arg (Dwfl *dwfl __attribute__ ((unused))) +{ + return NULL; +} + +#endif /* ! __linux __ */ + Index: elfutils-0.158/tests/backtrace-child.c =================================================================== --- elfutils-0.158.orig/tests/backtrace-child.c 2014-05-01 17:11:18.870616302 +0000 +++ elfutils-0.158/tests/backtrace-child.c 2014-05-01 17:11:18.866616384 +0000 @@ -79,6 +79,18 @@ #include #include +#ifndef __linux__ + +int +main (int argc __attribute__ ((unused)), char **argv) +{ + fprintf (stderr, "%s: Unwinding not supported for this architecture\n", + argv[0]); + return 77; +} + +#else /* __linux__ */ + #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) #define NOINLINE_NOCLONE __attribute__ ((noinline, noclone)) #else @@ -221,3 +233,6 @@ /* Not reached. */ abort (); } + +#endif /* ! __linux__ */ + Index: elfutils-0.158/tests/backtrace-data.c =================================================================== --- elfutils-0.158.orig/tests/backtrace-data.c 2014-05-01 17:11:18.870616302 +0000 +++ elfutils-0.158/tests/backtrace-data.c 2014-05-01 17:11:18.866616384 +0000 @@ -40,7 +40,7 @@ #include #include ELFUTILS_HEADER(dwfl) -#ifndef __x86_64__ +#if !defined(__x86_64__) || !defined(__linux__) int main (int argc __attribute__ ((unused)), char **argv) @@ -50,7 +50,7 @@ return 77; } -#else /* __x86_64__ */ +#else /* __x86_64__ && __linux__ */ /* The only arch specific code is set_initial_registers. */ Index: elfutils-0.158/tests/backtrace-dwarf.c =================================================================== --- elfutils-0.158.orig/tests/backtrace-dwarf.c 2014-05-01 17:11:18.870616302 +0000 +++ elfutils-0.158/tests/backtrace-dwarf.c 2014-05-01 17:11:18.866616384 +0000 @@ -25,6 +25,18 @@ #include #include ELFUTILS_HEADER(dwfl) +#ifndef __linux__ + +int +main (int argc __attribute__ ((unused)), char **argv) +{ + fprintf (stderr, "%s: Unwinding not supported for this architecture\n", + argv[0]); + return 77; +} + +#else /* __linux__ */ + static void cleanup_13_abort (void); #define main cleanup_13_main #include "cleanup-13.c" @@ -148,3 +160,6 @@ /* There is an exit (0) call if we find the "main" frame, */ error (1, 0, "dwfl_getthreads: %s", dwfl_errmsg (-1)); } + +#endif /* ! __linux__ */ + Index: elfutils-0.158/tests/backtrace-subr.sh =================================================================== --- elfutils-0.158.orig/tests/backtrace-subr.sh 2014-05-01 17:11:18.870616302 +0000 +++ elfutils-0.158/tests/backtrace-subr.sh 2014-05-01 17:11:18.866616384 +0000 @@ -84,6 +84,7 @@ echo ./backtrace ./backtrace.$arch.{exec,core} testrun ${abs_builddir}/backtrace -e ./backtrace.$arch.exec --core=./backtrace.$arch.core 1>backtrace.$arch.bt 2>backtrace.$arch.err || true cat backtrace.$arch.{bt,err} + check_unsupported backtrace.$arch.err backtrace.$arch.core check_all backtrace.$arch.{bt,err} backtrace.$arch.core } Index: elfutils-0.158/tests/backtrace.c =================================================================== --- elfutils-0.158.orig/tests/backtrace.c 2014-05-01 17:11:18.870616302 +0000 +++ elfutils-0.158/tests/backtrace.c 2014-05-01 17:11:18.866616384 +0000 @@ -39,6 +39,18 @@ #include #include ELFUTILS_HEADER(dwfl) +#ifndef __linux__ + +int +main (int argc __attribute__ ((unused)), char **argv) +{ + fprintf (stderr, "%s: Unwinding not supported for this architecture\n", + argv[0]); + return 77; +} + +#else /* __linux__ */ + static int dump_modules (Dwfl_Module *mod, void **userdata __attribute__ ((unused)), const char *name, Dwarf_Addr start, @@ -452,3 +464,6 @@ dwfl_end (dwfl); return 0; } + +#endif /* ! __linux__ */ +