Tested on hppa64-hp-hpux11.11.  Committed to trunk.

Dave
---

hppa64: Fix linking of libgcc on HP-UX with GNU ld

2026-05-11  John David Anglin  <[email protected]>

libgcc/ChangeLog:

        * config.host (hppa*64*-hp-hpux11*): Handle linking with GNU ld.
        * config/pa/libgcc-hpux.ver: New file.
        * config/pa/t-slibgcc-gld: New file.
        * config/pa/t-slibgcc-hpux (SHLIB_LDFLAGS, INSTALL_SHLIB,
        SHLIB_MKMAP, SHLIB_MAPFILES): Define.

diff --git a/libgcc/config.host b/libgcc/config.host
index f97340481a0..cb4c512ada3 100644
--- a/libgcc/config.host
+++ b/libgcc/config.host
@@ -709,7 +709,11 @@ hppa*64*-*-hpux11*)
        else
            tmake_file="$tmake_file pa/t-slibgcc-dwarf-ver"
        fi
-       tmake_file="$tmake_file pa/t-slibgcc-hpux t-slibgcc-hpux"
+       if test $with_gnu_ld = yes; then
+           tmake_file="$tmake_file t-slibgcc-libgcc pa/t-slibgcc-gld"
+       else
+           tmake_file="$tmake_file pa/t-slibgcc-hpux"
+       fi
        tmake_file="$tmake_file pa/t-softfp-sfdftf t-softfp"
        tm_file="$tm_file pa/pa64-hpux-lib.h"
        extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o \
diff --git a/libgcc/config/pa/libgcc-hpux.ver b/libgcc/config/pa/libgcc-hpux.ver
new file mode 100644
index 00000000000..ea90538d12e
--- /dev/null
+++ b/libgcc/config/pa/libgcc-hpux.ver
@@ -0,0 +1,45 @@
+# Copyright (C) 2025-2026 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3.  If not see
+# <http://www.gnu.org/licenses/>.
+
+GCC_HPUX_12.0.0 {
+  __clz_tab
+  _U_Qfcmp
+  _U_Qfcnvfxt_quad_to_sgl
+  _U_Qfeq
+  _U_Qfne
+  _U_Qfgt
+  _U_Qfge
+  _U_Qflt
+  _U_Qfle
+  _U_Qfltgt
+  _U_Qfunle
+  _U_Qfunlt
+  _U_Qfunge
+  _U_Qfungt
+  _U_Qfuneq
+  _U_Qfunord
+  _U_Qford
+  _U_Qfcomp
+  _U_Qfneg
+  _U_Qfcopysign
+  __U_Qfcnvfxt_quad_to_sgl
+  _U_Qfcnvfxt_quad_to_usgl
+  _U_Qfcnvxf_usgl_to_quad
+  _U_Qfcnvfxt_quad_to_udbl
+  _U_Qfcnvxf_udbl_to_quad
+}
diff --git a/libgcc/config/pa/t-slibgcc-gld b/libgcc/config/pa/t-slibgcc-gld
new file mode 100644
index 00000000000..585a903797a
--- /dev/null
+++ b/libgcc/config/pa/t-slibgcc-gld
@@ -0,0 +1,32 @@
+# Copyright (C) 2001-2026 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3.  If not see
+# <http://www.gnu.org/licenses/>.
+
+# Build a shared libgcc library with the GNU linker on PA.
+
+SHLIB_EXT = .sl
+SHLIB_SOLINK = @shlib_base_name@$(SHLIB_EXT)
+SHLIB_SONAME = @shlib_base_name@.$(SHLIB_SOVERSION)
+SHLIB_LC =
+
+SHLIB_LDFLAGS = -Wl,--soname=$(SHLIB_SONAME) \
+       -Wl,--version-script=$(SHLIB_MAP)
+
+INSTALL_SHLIB = $(INSTALL_DATA) -m 555
+
+SHLIB_MKMAP = $(srcdir)/mkmap-symver.awk
+SHLIB_MAPFILES = libgcc-std.ver $(srcdir)/config/pa/libgcc-hpux.ver
diff --git a/libgcc/config/pa/t-slibgcc-hpux b/libgcc/config/pa/t-slibgcc-hpux
index 4508db2f241..2e3410e54e3 100644
--- a/libgcc/config/pa/t-slibgcc-hpux
+++ b/libgcc/config/pa/t-slibgcc-hpux
@@ -22,3 +22,10 @@ SHLIB_EXT = .sl
 SHLIB_SOLINK = @shlib_base_name@$(SHLIB_EXT)
 SHLIB_SONAME = @shlib_base_name@.$(SHLIB_SOVERSION)
 SHLIB_LC =
+
+SHLIB_LDFLAGS = -Wl,+h,$(SHLIB_SONAME)
+
+INSTALL_SHLIB = $(INSTALL_DATA) -m 555
+
+SHLIB_MKMAP = $(srcdir)/mkmap-flat.awk
+SHLIB_MAPFILES = libgcc-std.ver

Attachment: signature.asc
Description: PGP signature

Reply via email to