summaryrefslogtreecommitdiff
path: root/src/Makefile.am
diff options
context:
space:
mode:
authorMichael Munday <mike.munday@ibm.com>2017-12-05 10:05:41 -0500
committerDave Watson <davejwatson@fb.com>2018-01-09 07:37:55 -0800
commit441adc46ffe775d83446ec7253f5259864069cba (patch)
treec0b5c5fa1535f7007c047b10a54f4413e8a7dbeb /src/Makefile.am
parent4c07b170372feb174e11775a01ea3bd718d636d6 (diff)
downloadlibunwind-441adc46ffe775d83446ec7253f5259864069cba.tar.gz
Add port to Linux on IBM Z (s390x)
This adds a port to Linux on the IBM Z platform (a.k.a s390x). It only supports the 64-bit ABI. Most functionality is working and all the tests pass with the exception of the coredump tests*. Unwinding is only supported if DWARF unwind information is present. libunwind can't currently make use of the backchain (if present). The getcontext/setcontext functions only preserve/restore a subset of registers. Currently this only consists of callee-saved registers and some parameter registers. Vector registers and access registers are not saved (and aren't callee- saved) by getcontext and cannot currently be modified. They will however be restored unmodified after resuming a context from a signal handler. There is no special libunwind support for setjmp, the functionality is emulated using glibc (I think all the ports do this for modern Linux kernels). * Unwinding on s390x requires floating point register access which the coredump library doesn't currently support.
Diffstat (limited to 'src/Makefile.am')
-rw-r--r--src/Makefile.am36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index a557d8d1..8d72ef0b 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -463,6 +463,30 @@ libunwind_sh_la_SOURCES_sh = $(libunwind_la_SOURCES_sh_common) \
sh/Gglobal.c sh/Ginit.c sh/Ginit_local.c sh/Ginit_remote.c \
sh/Gis_signal_frame.c sh/Gregs.c sh/Gresume.c sh/Gstep.c
+# The list of files that go both into libunwind and libunwind-s390x:
+noinst_HEADERS += s390x/init.h s390x/unwind_i.h
+libunwind_la_SOURCES_s390x_common = $(libunwind_la_SOURCES_common) \
+ s390x/is_fpreg.c s390x/regname.c
+
+# The list of files that go into libunwind:
+libunwind_la_SOURCES_s390x = $(libunwind_la_SOURCES_s390x_common) \
+ $(libunwind_la_SOURCES_local) \
+ s390x/Lapply_reg_state.c s390x/Lreg_states_iterate.c \
+ s390x/Lcreate_addr_space.c s390x/Lget_save_loc.c s390x/Lglobal.c \
+ s390x/Linit.c s390x/Linit_local.c s390x/Linit_remote.c \
+ s390x/Lget_proc_info.c s390x/Lregs.c s390x/Lresume.c \
+ s390x/Lis_signal_frame.c s390x/Lstep.c \
+ s390x/getcontext.S s390x/setcontext.S
+
+# The list of files that go into libunwind-s390x:
+libunwind_s390x_la_SOURCES_s390x = $(libunwind_la_SOURCES_s390x_common) \
+ $(libunwind_la_SOURCES_generic) \
+ s390x/Gapply_reg_state.c s390x/Greg_states_iterate.c \
+ s390x/Gcreate_addr_space.c s390x/Gget_save_loc.c s390x/Gglobal.c \
+ s390x/Ginit.c s390x/Ginit_local.c s390x/Ginit_remote.c \
+ s390x/Gget_proc_info.c s390x/Gregs.c s390x/Gresume.c \
+ s390x/Gis_signal_frame.c s390x/Gstep.c
+
if REMOTE_ONLY
install-exec-hook:
# Nothing to do here....
@@ -662,7 +686,19 @@ if !REMOTE_ONLY
libunwind_sh_la_LIBADD += libunwind.la -lc
endif
libunwind_setjmp_la_SOURCES += sh/siglongjmp.S
+else
+if ARCH_S390X
+ lib_LTLIBRARIES += libunwind-s390x.la
+ libunwind_la_SOURCES = $(libunwind_la_SOURCES_s390x)
+ libunwind_s390x_la_SOURCES = $(libunwind_s390x_la_SOURCES_s390x)
+ libunwind_s390x_la_LDFLAGS = $(COMMON_SO_LDFLAGS) -version-info $(SOVERSION)
+ libunwind_s390x_la_LIBADD = libunwind-dwarf-generic.la
+ libunwind_s390x_la_LIBADD += libunwind-elf64.la
+if !REMOTE_ONLY
+ libunwind_s390x_la_LIBADD += libunwind.la -lc
+endif
+endif # ARCH_S390X
endif # ARCH_SH
endif # ARCH_PPC64
endif # ARCH_PPC32