diff options
author | Sergei Trofimovich <slyfox@gentoo.org> | 2015-12-04 22:07:13 +0000 |
---|---|---|
committer | Sergei Trofimovich <siarheit@google.com> | 2015-12-04 22:07:13 +0000 |
commit | e2c518e6a751b7a16c704198a14dcc688b020038 (patch) | |
tree | 40608eb35b10b3da1da88ac2bf6055d6abf9aaa4 | |
parent | c865c425a37b0bc52f4dead9d70eb0ee2bc287d6 (diff) | |
download | haskell-e2c518e6a751b7a16c704198a14dcc688b020038.tar.gz |
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: Sergei Trofimovich <siarheit@google.com>
Reviewers: austin, thomie, bgamari
Reviewed By: bgamari
Differential Revision: https://phabricator.haskell.org/D1567
-rw-r--r-- | mk/config.mk.in | 6 | ||||
-rw-r--r-- | rts/Libdw.c | 5 |
2 files changed, 6 insertions, 5 deletions
diff --git a/mk/config.mk.in b/mk/config.mk.in index 967c7510a1..d7cd05b6a6 100644 --- a/mk/config.mk.in +++ b/mk/config.mk.in @@ -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)) ################################################################################ # diff --git a/rts/Libdw.c b/rts/Libdw.c index 1ef51b2444..8c3c58156a 100644 --- a/rts/Libdw.c +++ b/rts/Libdw.c @@ -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 = { |