* Re: 4.3/4.4 PATCH: Fix Solaris/x86 bootstrap with Sun ld (PR bootstrap/33100)
2008-11-05 18:32 ` Ian Lance Taylor
@ 2008-11-06 12:45 ` Rainer Orth
2008-11-19 17:41 ` Rainer Orth
1 sibling, 0 replies; 7+ messages in thread
From: Rainer Orth @ 2008-11-06 12:45 UTC (permalink / raw)
To: Ian Lance Taylor; +Cc: gcc-patches
Ian Lance Taylor writes:
> > As I suggested in the original patch submission, it should be possible to
> > move the inclusion of i386/t-crtstuff to libgcc/configure.ac and make it
> > conditional on a linker test there. This way, only systems with broken Sun
> > linkers would be penalized. I could well try that approach, since it's
> > certainly cleaner and doesn't break unwind information on recent Solaris 11
> > where we don't have to. What do you think?
>
> I think it's up to you. You can also just split the config.gcc test
> on the solaris version number.
Ok, I'll give it a try. If all else fails, I could fall back to the
current patch everywhere. Unfortunately, splitting on version number
doesn't really help, because older versions of OpenSolaris
(i.e. *-*-solaris2.11) have the bug, while newer ones are fixed. That's
why it seems more appropriate to perform a feature test.
> > What about the 4.2 branch? As I mentioned, the patch is needed there, too,
> > and I've successfully bootstrapped on i386-pc-solaris2.10. Unfortunately,
> > the cleaner approach outlined above isn't available here since there's no
> > separate libgcc with it's own configure, so I fear it's either this hack or
> > leave that branch broken.
>
> OK for 4.2 branch also.
Thanks, I'll check it in there ASAP.
Rainer
-----------------------------------------------------------------------------
Rainer Orth, Faculty of Technology, Bielefeld University
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: 4.3/4.4 PATCH: Fix Solaris/x86 bootstrap with Sun ld (PR bootstrap/33100)
2008-11-05 18:32 ` Ian Lance Taylor
2008-11-06 12:45 ` Rainer Orth
@ 2008-11-19 17:41 ` Rainer Orth
2008-11-19 19:27 ` Ian Lance Taylor
1 sibling, 1 reply; 7+ messages in thread
From: Rainer Orth @ 2008-11-19 17:41 UTC (permalink / raw)
To: Ian Lance Taylor; +Cc: gcc-patches
Ian Lance Taylor writes:
> Rainer Orth <ro@techfak.uni-bielefeld.de> writes:
>
> > As I suggested in the original patch submission, it should be possible to
> > move the inclusion of i386/t-crtstuff to libgcc/configure.ac and make it
> > conditional on a linker test there. This way, only systems with broken Sun
> > linkers would be penalized. I could well try that approach, since it's
> > certainly cleaner and doesn't break unwind information on recent Solaris 11
> > where we don't have to. What do you think?
>
> I think it's up to you. You can also just split the config.gcc test
> on the solaris version number.
I've just implemented the approach suggested in my submission.
Unfortunately, it proved to be more involved than I thought initially:
* The test for the linker bug is as I had suggested. The only complication
is that I have to link it with -nostartfiles -nodefaultlibs since neither
exist at libgcc configure time.
* Initially, moving i386/t-crtstuff to libgcc had no effect. It took me
some time to figure out that the files in extra_parts were still built in
gcc and later copied to libgcc, with own rules in gcc/Makefile.in
unaffected by libgcc configure ;-(
After I realized that, I had to move i386/t-sol2 to libgcc, too, so the
make rules for gmon.o are present.
After that, I tested the resulting patch in three different ways:
* Solaris 10/x86 with GNU as 2.15 and Sun ld (broken)
* Solaris 10/x86 with GNU as 2.15 and GNU ld 2.19 (ok)
* Solaris 11/x86 with GNU as 2.15 and Sun ld (fixed)
As expected, i386/t-crtstuff isn't used in the first configuration while it
is in the other two.
The first two bootstraps completed without regressions, while the third
(the first time I tested on Solaris 11/x86) showed several unrelated
problems: I get many warnings from Sun ld like
ld: warning: file ./.libs/libgcj.so: section .strtab: malformed string table, initial or final byte
I'm pretty sure this is unrelated and will investigate/take this up with
the Sun linker maintainers.
Ok for mainline and 4.3 branch?
I realize this might be considered too intrusive for the 4.3 branch, if so
I'd like to install the original patch (already on the 4.2 branch) there so
that 4.3 doesn't remain the only unfixed release branch.
Rainer
-----------------------------------------------------------------------------
Rainer Orth, Faculty of Technology, Bielefeld University
Tue Nov 18 20:19:32 2008 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
gcc:
PR bootstrap/33100
* config.gcc (i[34567]86-*-solaris2*): Don't include
i386/t-crtstuff here.
Move extra_parts, i386/t-sol2 in tmake_file to libgcc/config.host.
* config/i386/t-sol2: Move to libgcc/config/i386.
libgcc:
PR bootstrap/33100
* configure.ac (i?86-*-solaris2.1[0-9]*): Only include
i386/t-crtstuff if linker supports ZERO terminator unwind entries.
* configure: Regenerate.
* config.host (i[34567]86-*-solaris2*): Move i386/t-sol2 in
tmake_file here from config.gcc.
Move extra_parts here from config.gcc.
* config/i386/t-sol2: Move here from gcc/config/i386.
Use gcc_srcdir instead of srcdir.
Index: gcc/config.gcc
===================================================================
--- gcc/config.gcc (revision 142008)
+++ gcc/config.gcc (working copy)
@@ -1173,7 +1173,7 @@ i[34567]86-*-solaris2*)
;;
esac
tm_file="${tm_file} i386/sol2.h"
- tmake_file="${tmake_file} t-sol2 i386/t-sol2 t-svr4"
+ tmake_file="${tmake_file} t-sol2 t-svr4"
c_target_objs="${c_target_objs} sol2-c.o"
cxx_target_objs="${cxx_target_objs} sol2-c.o"
extra_objs="sol2.o"
@@ -1192,7 +1192,10 @@ i[34567]86-*-solaris2*)
*-*-solaris2.1[0-9]*)
tm_file="${tm_file} i386/x86-64.h i386/sol2-10.h"
tm_defines="${tm_defines} TARGET_BI_ARCH=1"
- tmake_file="$tmake_file i386/t-crtstuff i386/t-sol2-10"
+ tmake_file="$tmake_file i386/t-sol2-10"
+ # i386/t-crtstuff only affects libgcc. Its inclusion
+ # depends on a runtime test and is thus performed in
+ # libgcc/configure.ac instead.
need_64bit_hwint=yes
case X"${with_cpu}" in
Xgeneric|Xcore2|Xnocona|Xx86-64|Xamdfam10|Xbarcelona|Xk8|Xopteron|Xathlon64|Xathlon-fx)
@@ -1208,12 +1211,6 @@ i[34567]86-*-solaris2*)
exit 1
;;
esac
- # Solaris 2.10 provides crt1.o, crti.o, crtn.o, and gcrt1.o as
- # part of the base system.
- extra_parts="gmon.o crtbegin.o crtend.o"
- ;;
- *)
- extra_parts="crt1.o crti.o crtn.o gcrt1.o gmon.o crtbegin.o crtend.o"
;;
esac
case ${enable_threads}:${have_pthread_h}:${have_thread_h} in
Index: gcc/config/i386/t-sol2
===================================================================
--- gcc/config/i386/t-sol2 (revision 141745)
+++ gcc/config/i386/t-sol2 (working copy)
@@ -1,34 +0,0 @@
-# gmon build rule:
-$(T)gmon.o: $(srcdir)/config/i386/gmon-sol2.c $(GCC_PASSES) $(CONFIG_H)
- $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) \
- -c $(srcdir)/config/i386/gmon-sol2.c -o $(T)gmon.o
-
-# Assemble startup files.
-# Apparently Sun believes that assembler files don't need comments, because no
-# single ASCII character is valid (tried them all). So we manually strip out
-# the comments with sed. This bug may only be in the Early Access releases.
-$(T)gcrt1.o: $(srcdir)/config/i386/sol2-gc1.asm $(GCC_PASSES)
- sed -e '/^!/d' <$(srcdir)/config/i386/sol2-gc1.asm >gcrt1.s
- $(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -c -o $(T)gcrt1.o gcrt1.s
-$(T)crt1.o: $(srcdir)/config/i386/sol2-c1.asm $(GCC_PASSES)
- sed -e '/^!/d' <$(srcdir)/config/i386/sol2-c1.asm >crt1.s
- $(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -c -o $(T)crt1.o crt1.s
-$(T)crti.o: $(srcdir)/config/i386/sol2-ci.asm $(GCC_PASSES)
- sed -e '/^!/d' <$(srcdir)/config/i386/sol2-ci.asm >crti.s
- $(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -c -o $(T)crti.o crti.s
-$(T)crtn.o: $(srcdir)/config/i386/sol2-cn.asm $(GCC_PASSES)
- sed -e '/^!/d' <$(srcdir)/config/i386/sol2-cn.asm >crtn.s
- $(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -c -o $(T)crtn.o crtn.s
-
-# We need to use -fPIC when we are using gcc to compile the routines in
-# crtstuff.c. This is only really needed when we are going to use gcc/g++
-# to produce a shared library, but since we don't know ahead of time when
-# we will be doing that, we just always use -fPIC when compiling the
-# routines in crtstuff.c.
-#
-# We must also enable optimization to avoid having any code appear after
-# the call & alignment statement, but before we switch back to the
-# .text section.
-
-CRTSTUFF_T_CFLAGS = -fPIC -O2
-TARGET_LIBGCC2_CFLAGS = -fPIC
Index: libgcc/config.host
===================================================================
--- libgcc/config.host (revision 141745)
+++ libgcc/config.host (working copy)
@@ -318,6 +318,17 @@ i[34567]86-*-nto-qnx*)
i[34567]86-*-rtems*)
;;
i[34567]86-*-solaris2*)
+ tmake_file="${tmake_file} i386/t-sol2"
+ case ${host} in
+ *-*-solaris2.1[0-9]*)
+ # Solaris 2.10 provides crt1.o, crti.o, crtn.o, and gcrt1.o as
+ # part of the base system.
+ extra_parts="gmon.o crtbegin.o crtend.o"
+ ;;
+ *)
+ extra_parts="crt1.o crti.o crtn.o gcrt1.o gmon.o crtbegin.o crtend.o"
+ ;;
+ esac
;;
i[4567]86-wrs-vxworks|i[4567]86-wrs-vxworksae)
;;
Index: libgcc/configure.ac
===================================================================
--- libgcc/configure.ac (revision 141745)
+++ libgcc/configure.ac (working copy)
@@ -171,6 +171,26 @@ esac
# Collect host-machine-specific information.
. ${srcdir}/config.host
+# Check if Solaris/x86 linker supports ZERO terminator unwind entries.
+# This is after config.host so we can augment tmake_file.
+# Link with -nostartfiles -nodefaultlibs since neither are present while
+# building libgcc.
+case ${host} in
+i?86-*-solaris2.1[[0-9]]*)
+ cat > conftest.s <<EOF
+ .section .eh_frame,"a",@unwind
+ .zero 4
+ .section .jcr,"aw",@progbits
+ .zero 8
+EOF
+ if AC_TRY_COMMAND(${CC-cc} -shared -nostartfiles -nodefaultlibs -o conftest.so conftest.s 1>&AS_MESSAGE_LOG_FD); then
+ # configure expects config files in libgcc/config, so need a relative
+ # path here.
+ tmake_file="${tmake_file} ../../gcc/config/i386/t-crtstuff"
+ fi
+ ;;
+esac
+
# Check for visibility support. This is after config.host so that
# we can check for asm_hidden_op.
AC_CACHE_CHECK([for __attribute__((visibility("hidden")))],
Index: libgcc/config/i386/t-sol2
===================================================================
--- libgcc/config/i386/t-sol2 (revision 141745)
+++ libgcc/config/i386/t-sol2 (working copy)
@@ -1,23 +1,23 @@
# gmon build rule:
-$(T)gmon.o: $(srcdir)/config/i386/gmon-sol2.c $(GCC_PASSES) $(CONFIG_H)
+$(T)gmon.o: $(gcc_srcdir)/config/i386/gmon-sol2.c $(GCC_PASSES) $(CONFIG_H)
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) \
- -c $(srcdir)/config/i386/gmon-sol2.c -o $(T)gmon.o
+ -c $(gcc_srcdir)/config/i386/gmon-sol2.c -o $(T)gmon.o
# Assemble startup files.
# Apparently Sun believes that assembler files don't need comments, because no
# single ASCII character is valid (tried them all). So we manually strip out
# the comments with sed. This bug may only be in the Early Access releases.
-$(T)gcrt1.o: $(srcdir)/config/i386/sol2-gc1.asm $(GCC_PASSES)
- sed -e '/^!/d' <$(srcdir)/config/i386/sol2-gc1.asm >gcrt1.s
+$(T)gcrt1.o: $(gcc_srcdir)/config/i386/sol2-gc1.asm $(GCC_PASSES)
+ sed -e '/^!/d' <$(gcc_srcdir)/config/i386/sol2-gc1.asm >gcrt1.s
$(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -c -o $(T)gcrt1.o gcrt1.s
-$(T)crt1.o: $(srcdir)/config/i386/sol2-c1.asm $(GCC_PASSES)
- sed -e '/^!/d' <$(srcdir)/config/i386/sol2-c1.asm >crt1.s
+$(T)crt1.o: $(gcc_srcdir)/config/i386/sol2-c1.asm $(GCC_PASSES)
+ sed -e '/^!/d' <$(gcc_srcdir)/config/i386/sol2-c1.asm >crt1.s
$(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -c -o $(T)crt1.o crt1.s
-$(T)crti.o: $(srcdir)/config/i386/sol2-ci.asm $(GCC_PASSES)
- sed -e '/^!/d' <$(srcdir)/config/i386/sol2-ci.asm >crti.s
+$(T)crti.o: $(gcc_srcdir)/config/i386/sol2-ci.asm $(GCC_PASSES)
+ sed -e '/^!/d' <$(gcc_srcdir)/config/i386/sol2-ci.asm >crti.s
$(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -c -o $(T)crti.o crti.s
-$(T)crtn.o: $(srcdir)/config/i386/sol2-cn.asm $(GCC_PASSES)
- sed -e '/^!/d' <$(srcdir)/config/i386/sol2-cn.asm >crtn.s
+$(T)crtn.o: $(gcc_srcdir)/config/i386/sol2-cn.asm $(GCC_PASSES)
+ sed -e '/^!/d' <$(gcc_srcdir)/config/i386/sol2-cn.asm >crtn.s
$(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -c -o $(T)crtn.o crtn.s
# We need to use -fPIC when we are using gcc to compile the routines in
^ permalink raw reply [flat|nested] 7+ messages in thread