Browse Source

Merge pull request #241 from tpetazzoni/fix-arch-checks

wscript: improve check for ucontext
tags/v1.9.11-RC1
Stéphane Letz GitHub 8 years ago
parent
commit
4429cbe48e
2 changed files with 21 additions and 6 deletions
  1. +6
    -6
      dbus/sigsegv.c
  2. +15
    -0
      wscript

+ 6
- 6
dbus/sigsegv.c View File

@@ -104,20 +104,20 @@ static void signal_segv(int signum, siginfo_t* info, void*ptr) {
jack_error("info.si_errno = %d", info->si_errno); jack_error("info.si_errno = %d", info->si_errno);
jack_error("info.si_code = %d (%s)", info->si_code, si_code_str); jack_error("info.si_code = %d (%s)", info->si_code, si_code_str);
jack_error("info.si_addr = %p", info->si_addr); jack_error("info.si_addr = %p", info->si_addr);
#if !defined(__alpha__) && !defined(__ia64__) && !defined(__FreeBSD_kernel__) && !defined(__arm__) && !defined(__hppa__) && !defined(__sh__) && !defined(__aarch64__) && !defined(nios2)
#if defined(HAVE_UCONTEXT) && defined(HAVE_NGREG)
for(i = 0; i < NGREG; i++) for(i = 0; i < NGREG; i++)
jack_error("reg[%02d] = 0x" REGFORMAT, i, jack_error("reg[%02d] = 0x" REGFORMAT, i,
#if defined(__powerpc64__)
#if defined(HAVE_UCONTEXT_GP_REGS)
ucontext->uc_mcontext.gp_regs[i] ucontext->uc_mcontext.gp_regs[i]
#elif defined(__powerpc__)
#elif defined(HAVE_UCONTEXT_UC_REGS)
ucontext->uc_mcontext.uc_regs[i] ucontext->uc_mcontext.uc_regs[i]
#elif defined(__sparc__) && defined(__arch64__)
#elif defined(HAVE_UCONTEXT_MC_GREGS)
ucontext->uc_mcontext.mc_gregs[i] ucontext->uc_mcontext.mc_gregs[i]
#else
#elif defined(HAVE_UCONTEXT_GREGS)
ucontext->uc_mcontext.gregs[i] ucontext->uc_mcontext.gregs[i]
#endif #endif
); );
#endif /* alpha, ia64, kFreeBSD, arm, hppa */
#endif /* defined(HAVE_UCONTEXT) && defined(HAVE_NGREG) */


#if defined(SIGSEGV_STACK_X86) || defined(SIGSEGV_STACK_IA64) #if defined(SIGSEGV_STACK_X86) || defined(SIGSEGV_STACK_IA64)
# if defined(SIGSEGV_STACK_IA64) # if defined(SIGSEGV_STACK_IA64)


+ 15
- 0
wscript View File

@@ -496,6 +496,21 @@ def configure(conf):


conf.recurse('example-clients') conf.recurse('example-clients')


# test for the availability of ucontext, and how it should be used
for t in ("gp_regs", "uc_regs", "mc_gregs", "gregs"):
fragment = "#include <ucontext.h>\n"
fragment += "int main() { ucontext_t *ucontext; return (int) ucontext->uc_mcontext.%s[0]; }" % t
confvar = "HAVE_UCONTEXT_%s" % t.upper()
conf.check_cc(fragment=fragment, define_name=confvar, mandatory=False,
msg="Checking for ucontext->uc_mcontext.%s" % t)
if conf.is_defined(confvar):
conf.define('HAVE_UCONTEXT', 1)

fragment = "#include <ucontext.h>\n"
fragment += "int main() { return NGREG; }"
conf.check_cc(fragment=fragment, define_name="HAVE_NGREG", mandatory=False,
msg="Checking for NGREG")

conf.env['LIB_PTHREAD'] = ['pthread'] conf.env['LIB_PTHREAD'] = ['pthread']
conf.env['LIB_DL'] = ['dl'] conf.env['LIB_DL'] = ['dl']
conf.env['LIB_RT'] = ['rt'] conf.env['LIB_RT'] = ['rt']


Loading…
Cancel
Save