Date: Sun, 29 Apr 2007 07:35:40 +1000 (EST) From: Peter Jeremy <peterjeremy@optushome.com.au> To: FreeBSD-gnats-submit@FreeBSD.org Subject: amd64/112215: [patch] "gcc -m32" attempts to link against 64-bit libs Message-ID: <200704282135.l3SLZesi001722@turion.vk2pj.dyndns.org> Resent-Message-ID: <200704282140.l3SLe5e9060858@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 112215 >Category: amd64 >Synopsis: [patch] "gcc -m32" attempts to link against 64-bit libs >Confidential: no >Severity: serious >Priority: medium >Responsible: freebsd-amd64 >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Sat Apr 28 21:40:05 GMT 2007 >Closed-Date: >Last-Modified: >Originator: Peter Jeremy >Release: FreeBSD 6.2-STABLE amd64 >Organization: n/a >Environment: System: FreeBSD turion.vk2pj.dyndns.org 6.2-STABLE FreeBSD 6.2-STABLE #25: Tue Jan 30 05:01:57 EST 2007 root@turion.vk2pj.dyndns.org:/usr/obj/usr/src/sys/turion amd64 >Description: "gcc -m32" correctly builds 32-bit objects but attempts to use 64-bit libraries and the 64-bit dynamic loader when linking. >How-To-Repeat: echo 'main(){printf("Hello world\\n");}' > x.c gcc -v -m32 x.c Note that whilst it correctly passes "-m elf_i386_fbsd" to ld, it specifies /libexec/ld-elf.so.1 instead of /libexec/ld-elf32.so.1 and /usr/lib/... instead of /usr/lib32/... >Fix: A work-around is to install /usr/libdata/gcc/specs which is "gcc -dumpspecs" with the following patch: --- - Sun Apr 29 07:17:26 2007 +++ specs Sat Apr 28 22:25:15 2007 @@ -99,7 +99,7 @@ *startfile_prefix_spec: -/usr/lib/ +%{m32:/usr/lib32/; :/usr/lib/} *sysroot_suffix_spec: @@ -120,7 +120,7 @@ } *fbsd_dynamic_linker: -/libexec/ld-elf.so.1 +%{m32:/libexec/ld-elf32.so.1; :/libexec/ld-elf.so.1} *link_command: %{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S: %(linker) %l %{pie:} %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} %{r} %{s} %{t} %{u*} %{x} %{z} %{Z} %{!A:%{!nostdlib:%{!nostartfiles:%S}}} %{static:} %{L*} %(link_libgcc) %o %{fprofile-arcs|fprofile-generate:-lgcov} %{!nostdlib:%{!nodefaultlibs:%(link_gcc_c_sequence)}} %{!A:%{!nostdlib:%{!nostartfiles:%E}}} %{T*} }}}}}} A complete fix is less clear. *fbsd_dynamic_linker is derived from FBSD_DYNAMIC_LINKER - which is currently common across all FreeBSD platforms. (Note that the code for FBSD_MAJOR<5 is obsolete now). Likewise *startfile_prefix_spec is common. The following (untested) patch should work: Index: /usr/src/contrib/gcc/config/freebsd-spec.h =================================================================== RCS file: /usr/ncvs/src/contrib/gcc/config/freebsd-spec.h,v retrieving revision 1.19.2.1 diff -u -r1.19.2.1 freebsd-spec.h --- /usr/src/contrib/gcc/config/freebsd-spec.h 11 Jul 2006 19:13:04 -0000 1.19.2.1 +++ /usr/src/contrib/gcc/config/freebsd-spec.h 28 Apr 2007 21:25:27 -0000 @@ -166,6 +166,9 @@ #if FBSD_MAJOR < 5 #define FBSD_DYNAMIC_LINKER "/usr/libexec/ld-elf.so.1" +#elif defined(__amd64) +#define FBSD_DYNAMIC_LINKER \ + "%{m32:/libexec/ld-elf32.so.1; :/libexec/ld-elf.so.1}" #else #define FBSD_DYNAMIC_LINKER "/libexec/ld-elf.so.1" #endif Index: /usr/src/gnu/usr.bin/cc/cc_tools/freebsd-native.h =================================================================== RCS file: /usr/ncvs/src/gnu/usr.bin/cc/cc_tools/freebsd-native.h,v retrieving revision 1.24.8.2 diff -u -r1.24.8.2 freebsd-native.h --- /usr/src/gnu/usr.bin/cc/cc_tools/freebsd-native.h 11 Jul 2006 20:02:39 -0000 1.24.8.2 +++ /usr/src/gnu/usr.bin/cc/cc_tools/freebsd-native.h 28 Apr 2007 21:33:24 -0000 @@ -44,7 +44,11 @@ #undef MD_STARTFILE_PREFIX /* We don't need one for now. */ #define STANDARD_STARTFILE_PREFIX PREFIX"/lib/" +#if defined(__amd64) +#define STARTFILE_PREFIX_SPEC "%{m32:"PREFIX"/lib32/; :"PREFIX"/lib/}" +#else #define STARTFILE_PREFIX_SPEC PREFIX"/lib/" +#endif /* For the native system compiler, we actually build libgcc in a profiled version. So we should use it with -pg. */ >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200704282135.l3SLZesi001722>