Commit e2c518e6 authored by Sergei Trofimovich's avatar Sergei Trofimovich Committed by Sergei Trofimovich

libdw: enable support only on i386 and amd64

Summary:
Currently libdw requires per-arch implementation of
set_initial_registers() function.

Otherwise build fails with linkage error
(seen on sparc):

  rts/dist/build/libHSrts_thr-ghc7.11.20151129.so:
      undefined reference to `set_initial_registers'
  collect2: error: ld returned 1 exit status
  `gcc' failed in phase `Linker'. (Exit code: 1)
  make[1]: *** [ghc/stage2/build/tmp/ghc-stage2] Error 1

Converted link-time error to compile-time error,
added arch whitelist.
Signed-off-by: default avatarSergei Trofimovich <siarheit@google.com>

Reviewers: austin, thomie, bgamari

Reviewed By: bgamari

Differential Revision: https://phabricator.haskell.org/D1567
parent c865c425
......@@ -371,9 +371,9 @@ UseSystemLibFFI=@UseSystemLibFFI@
FFILibDir=@FFILibDir@
FFIIncludeDir=@FFIIncludeDir@
# Include support for DWARF unwinding
GhcRtsWithLibdw = @HaveLibdw@
# GHC needs arch-specific tweak at least in
# rts/Libdw.c:set_initial_registers()
GhcRtsWithLibdw=$(strip $(if $(filter $(TargetArch_CPP),i386 x86_64),@HaveLibdw@,NO))
################################################################################
#
......
......@@ -299,8 +299,7 @@ static bool set_initial_registers(Dwfl_Thread *thread,
);
return dwfl_thread_state_registers(thread, 0, 17, regs);
}
#endif
#ifdef i386_HOST_ARCH
#elif defined(i386_HOST_ARCH)
static bool set_initial_registers(Dwfl_Thread *thread,
void *arg STG_UNUSED) {
Dwarf_Word regs[9];
......@@ -321,6 +320,8 @@ static bool set_initial_registers(Dwfl_Thread *thread,
);
return dwfl_thread_state_registers(thread, 0, 9, regs);
}
#else
# error "Please implement set_initial_registers() for your arch"
#endif
static const Dwfl_Thread_Callbacks thread_cbs = {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment