Source: gcc-6 Version: 6.4.0-11 Severity: normal Tags: patch User: debian-i...@lists.debian.org Usertags: ia64
Hi! In order to be able to build a cross-compiler for ia64, we need to be able to build and use the internal libunwind of gcc as the external libunwind is not available for cross-builds. I have added a new flag "with_unwind" which is set in debian/ rules.defs for the case when a cross-compiler is built for the ia64 target architecture. This "with_unwind" is used in debian/ rules2 to pass either --with-system-libunwind or --with-newlib/ --without-headers to the configure script, the latter are necessary to set inhibit_libc without which building the internal libunwind is not possible. I also added the internal libunwind to debian/rules.sonames and debian/rules.d/binary-libgcc.mk to install the static and shared libunwind libraries into libgcc if libgcc built as a shared library. Unfortunately, I couldn't figure out a clean way to avoid the double check for ia64-linux == $(DEB_TARGET_GNU_TYPE), but this is the only way to make sure I'm not breaking anything outside ia64. With the patch applied, rebuilding src:gcc-6 provides a gcc-6-source package which can be used successully to build the package cross-toolchain-base-ports with the ia64 target enabled which in turn will allow us to enable ia64 in gcc-7-cross-ports (after this patch has been added to src:gcc-7 as well). Thanks, Adrian -- .''`. John Paul Adrian Glaubitz : :' : Debian Developer - glaub...@debian.org `. `' Freie Universitaet Berlin - glaub...@physik.fu-berlin.de `- GPG: 62FF 8A75 84E0 2956 9546 0006 7426 3B37 F5B5 F913
diff -Nru old/gcc-6-6.4.0/debian/rules2 new/gcc-6-6.4.0/debian/rules2 --- old/gcc-6-6.4.0/debian/rules2 2017-12-27 01:32:47.000000000 +0100 +++ new/gcc-6-6.4.0/debian/rules2 2017-12-27 01:59:43.873507119 +0100 @@ -560,7 +560,12 @@ endif ifneq (,$(findstring ia64-linux,$(DEB_TARGET_GNU_TYPE))) - CONFARGS += --with-system-libunwind + ifeq ($(with_unwind),yes) + CONFARGS += --with-newlib + CONFARGS += --without-headers + else + CONFARGS += --with-system-libunwind + endif endif ifneq (,$(findstring sh4-linux,$(DEB_TARGET_GNU_TYPE))) diff -Nru old/gcc-6-6.4.0/debian/rules.d/binary-libgcc.mk new/gcc-6-6.4.0/debian/rules.d/binary-libgcc.mk --- old/gcc-6-6.4.0/debian/rules.d/binary-libgcc.mk 2017-12-27 01:32:47.000000000 +0100 +++ new/gcc-6-6.4.0/debian/rules.d/binary-libgcc.mk 2017-12-27 01:10:46.587608383 +0100 @@ -265,6 +265,9 @@ $(if $(filter yes, $(with_qmath)), $(call install_gcc_lib,libquadmath,$(QUADMATH_SONAME),$(1),$(2)) ) + $(if $(filter yes, $(with_unwind)), + $(call install_gcc_lib,libunwind,$(UNWIND_SONAME),$(1),$(2)) + ) endef # do_gcc_devels(flavour) diff -Nru old/gcc-6-6.4.0/debian/rules.defs new/gcc-6-6.4.0/debian/rules.defs --- old/gcc-6-6.4.0/debian/rules.defs 2017-12-27 01:32:47.000000000 +0100 +++ new/gcc-6-6.4.0/debian/rules.defs 2017-12-27 00:51:30.727647629 +0100 @@ -1481,6 +1481,14 @@ endif endif + # libunwind ----------------- + ifneq (,$(findstring ia64-linux,$(DEB_TARGET_GNU_TYPE))) + with_unwind := no + ifeq ($(DEB_CROSS)-$(with_shared_libgcc),yes-yes) + with_unwind := yes + endif + endif + # Shared libgcc -------------------- ifneq ($(DEB_STAGE),stage1) with_shared_libgcc := yes diff -Nru old/gcc-6-6.4.0/debian/rules.sonames new/gcc-6-6.4.0/debian/rules.sonames --- old/gcc-6-6.4.0/debian/rules.sonames 2017-12-27 01:32:47.000000000 +0100 +++ new/gcc-6-6.4.0/debian/rules.sonames 2017-12-27 01:09:51.136178371 +0100 @@ -38,6 +38,8 @@ echo TSAN_SONAME=$$v >> $$cache; \ v=`tail -1 $(srcdir)/libsanitizer/ubsan/libtool-version | cut -d: -f1`; \ echo UBSAN_SONAME=$$v >> $$cache; \ + v=`tail -1 $(srcdir)/libunwind/unwind/libtool-version | cut -d: -f1`; \ + echo UNWIND_SONAME=$$v >> $$cache; \ v=`awk -F= '/^libtool_VERSION/ {split($$2,v,":"); print v[1]}' \ $(srcdir)/libatomic/configure.ac`; \ v=1; \ @@ -84,6 +86,7 @@ LSAN_SONAME = $(call vafilt,$(SONAME_VARS),LSAN_SONAME) TSAN_SONAME = $(call vafilt,$(SONAME_VARS),TSAN_SONAME) UBSAN_SONAME = $(call vafilt,$(SONAME_VARS),UBSAN_SONAME) +UNWIND_SONAME = $(call vafilt,$(SONAME_VARS),UNWIND_SONAME) VTV_SONAME = $(call vafilt,$(SONAME_VARS),VTV_SONAME) CILKRTS_SONAME = $(call vafilt,$(SONAME_VARS),CILKRTS_SONAME) QUADMATH_SONAME = $(call vafilt,$(SONAME_VARS),QUADMATH_SONAME)