NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: toolchain/53810: C++ exception does not work on m68k when libstdc++ is dynamicaly linked



On archs other than m68k, libstdc++.so and C++ binaries depend on
libgcc_s.so. On m68k, this is not the case: -shared-libgcc is
observed in "g++ -v", but only -lgcc (not -lgcc_s) is passed to ld:

  % uname -p
  m68k
  % g++ -v hello.c
  ...
   ld ... /tmp/cc8plluA.o -lstdc++ -lm -lgcc -lc -lgcc /usr/lib/crtend.o ...
   COLLECT_GCC_OPTIONS='-v' '-shared-libgcc' '-mcpu=68020'
  % ldd a.out
  a.out:
	-lstdc++.8 => /usr/lib/libstdc++.so.8
	-lm.0 => /usr/lib/libm.so.0
	-lc.12 => /usr/lib/libc.so.12

What the difference between m68k and others? I found an answer in
external/gpl3/gcc/dist/gcc/config/m68k/netbsd-elf.h:

    81  /* NetBSD/sun2 does not support shlibs, avoid using libgcc_pic.  */
    82  #if TARGET_DEFAULT_CPU == 0
    83  #undef REAL_LIBGCC_SPEC
    84  #define REAL_LIBGCC_SPEC        "-lgcc"
    85  #endif

This hack for m68000 does not work anymore since no one in source
tree defines TARGET_DEFAULT_CPU. Therefore, even for m68k machines,
-lgcc is used when -lgcc_s is more appropriate.

I've modified the hack as follows:

    81  /* NetBSD/sun2 does not support shlibs, avoid using libgcc_pic.  */
    82  #ifndef ENABLE_SHARED_LIBGCC
    83  #undef REAL_LIBGCC_SPEC
    84  #define REAL_LIBGCC_SPEC        "-lgcc"
    85  #endif

Then, C++ applications on m68k get working again. Also, sun2 seems
no more broken than before (-current kernel does not boot on TME
regardless of my patch. Userland built with the patch works to
some extent on 8.0 kernel).

Can I commit the patch?

Thanks,
rin

Index: external/gpl3/gcc.old/dist/gcc/config/m68k/netbsd-elf.h
===================================================================
RCS file: /home/netbsd/src/external/gpl3/gcc.old/dist/gcc/config/m68k/netbsd-elf.h,v
retrieving revision 1.6
diff -p -u -r1.6 netbsd-elf.h
--- external/gpl3/gcc.old/dist/gcc/config/m68k/netbsd-elf.h	2 Aug 2018 00:02:57 -0000	1.6
+++ external/gpl3/gcc.old/dist/gcc/config/m68k/netbsd-elf.h	28 Dec 2018 11:29:00 -0000
@@ -79,7 +79,7 @@ along with GCC; see the file COPYING3.
 #define LINK_SPEC NETBSD_LINK_SPEC_ELF
/* NetBSD/sun2 does not support shlibs, avoid using libgcc_pic. */
-#if TARGET_DEFAULT_CPU == 0
+#ifndef ENABLE_SHARED_LIBGCC
 #undef REAL_LIBGCC_SPEC
 #define REAL_LIBGCC_SPEC	"-lgcc"
 #endif
Index: external/gpl3/gcc/dist/gcc/config/m68k/netbsd-elf.h
===================================================================
RCS file: /home/netbsd/src/external/gpl3/gcc/dist/gcc/config/m68k/netbsd-elf.h,v
retrieving revision 1.12
diff -p -u -r1.12 netbsd-elf.h
--- external/gpl3/gcc/dist/gcc/config/m68k/netbsd-elf.h	2 Feb 2018 03:41:05 -0000	1.12
+++ external/gpl3/gcc/dist/gcc/config/m68k/netbsd-elf.h	28 Dec 2018 11:29:40 -0000
@@ -79,7 +79,7 @@ along with GCC; see the file COPYING3.
 #define LINK_SPEC NETBSD_LINK_SPEC_ELF
/* NetBSD/sun2 does not support shlibs, avoid using libgcc_pic. */
-#if TARGET_DEFAULT_CPU == 0
+#ifndef ENABLE_SHARED_LIBGCC
 #undef REAL_LIBGCC_SPEC
 #define REAL_LIBGCC_SPEC	"-lgcc"
 #endif


Home | Main Index | Thread Index | Old Index