Bug#885428: gcc-6: Please add support for building internal libunwind

John Paul Adrian Glaubitz <[email protected]>
Newsgroups gmane.linux.debian.ports.ia64
Message-ID <151433698867.9776.7523591678748321164.reportbug__33057.2491432123$1514337032$gmane$org@z6.physik.fu-berlin.de>
Source: gcc-6
Version: 6.4.0-11
Severity: normal
Tags: patch
User: [email protected]
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 - [email protected]
`. `'   Freie Universitaet Berlin - [email protected]
  `-    GPG: 62FF 8A75 84E0 2956 9546  0006 7426 3B37 F5B5 F913
gcc-6-add-support-for-building-internal-libunwind.patch (text/plain, 2.7 KB)
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)
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.