[MacPorts] #58493: cctools: using clang < 5.0 as default assembler generates assembly errors in some cases

MacPorts noreply at macports.org
Sat May 18 21:13:38 UTC 2019


#58493: cctools: using clang < 5.0 as default assembler generates assembly errors
in some cases
--------------------+----------------------
 Reporter:  kencu   |      Owner:  jeremyhu
     Type:  defect  |     Status:  assigned
 Priority:  Normal  |  Milestone:
Component:  ports   |    Version:
 Keywords:          |       Port:  cctools
--------------------+----------------------
 To fix errors in newer ports that require gcc (fortran) to assemble newer
 assembly, the `as` in `cctools` was modified to send the assembly to a
 specific version of `clang` for processing, if present. For SnowLeopard,
 that default `clang` version is `clang-3.4`.

 It turns out there is (at least one) bug in the `clang` i386 assembler
 that was not fixed until after `clang-3.7`. It is fixed in `clang-5.0`.
 This error shows up during the build or bootstrapping of `gcc / libgcc`,
 and perhaps will turn up elsewhere:
 {{{
 pt/local/i386-apple-darwin10/bin/ -nostdinc++
 -B/opt/local/var/macports/build/_opt_macports-
 ports_lang_gcc9/libgcc9/work/build/prev-i386-apple-
 darwin10/libstdc++-v3/src/.libs -B/opt/local/var/macports/build
 /_opt_macports-ports_lang_gcc9/libgcc9/work/build/prev-i386-apple-
 darwin10/libstdc++-v3/libsupc++/.libs  -isystem
 /opt/local/var/macports/build/_opt_macports-
 ports_lang_gcc9/libgcc9/work/build/prev-i386-apple-
 darwin10/libstdc++-v3/include/i386-apple-darwin10  -isystem
 /opt/local/var/macports/build/_opt_macports-
 ports_lang_gcc9/libgcc9/work/build/prev-i386-apple-
 darwin10/libstdc++-v3/include  -isystem /opt/local/var/macports/build
 /_opt_macports-
 ports_lang_gcc9/libgcc9/work/gcc-9.1.0/libstdc++-v3/libsupc++
 -L/opt/local/var/macports/build/_opt_macports-
 ports_lang_gcc9/libgcc9/work/build/prev-i386-apple-
 darwin10/libstdc++-v3/src/.libs -L/opt/local/var/macports/build
 /_opt_macports-ports_lang_gcc9/libgcc9/work/build/prev-i386-apple-
 darwin10/libstdc++-v3/libsupc++/.libs    -g -O2  -fno-checking -mdynamic-
 no-pic -gtoggle -DIN_GCC     -fno-exceptions -fno-rtti -fasynchronous-
 unwind-tables -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual
 -Wmissing-format-attribute -Woverloaded-virtual -pedantic -Wno-long-long
 -Wno-variadic-macros -Wno-overlength-strings   -DHAVE_CONFIG_H -static-
 libstdc++ -static-libgcc  -o cc1 c/c-lang.o c-family/stub-objc.o attribs.o
 c/c-errors.o c/c-decl.o c/c-typeck.o c/c-convert.o c/c-aux-info.o c/c
 -objc-common.o c/c-parser.o c/c-fold.o c/gimple-parser.o
 c-family/c-common.o c-family/c-cppbuiltin.o c-family/c-dump.o
 c-family/c-format.o c-family/c-gimplify.o c-family/c-indentation.o
 c-family/c-lex.o c-family/c-omp.o c-family/c-opts.o c-family/c-pch.o
 c-family/c-ppoutput.o c-family/c-pragma.o c-family/c-pretty-print.o
 c-family/c-semantics.o c-family/c-ada-spec.o c-family/c-ubsan.o c-family
 /known-headers.o c-family/c-attribs.o c-family/c-warn.o
 c-family/c-spellcheck.o i386-c.o darwin-c.o \
           cc1-checksum.o libbackend.a main.o libcommon-target.a
 libcommon.a ../libcpp/libcpp.a ../libdecnumber/libdecnumber.a libcommon.a
 ../libcpp/libcpp.a  -liconv ../libbacktrace/.libs/libbacktrace.a
 ../libiberty/libiberty.a ../libdecnumber/libdecnumber.a  -L/opt/local/lib
 -lisl -L/opt/local/lib -L/opt/local/lib -L/opt/local/lib -lmpc -lmpfr
 -lgmp   -lz
 ld: in libbackend.a(i386.o), in section __TEXT,__text reloc 5479:
 unsupported r_length=0 for scattered vanilla reloc for architecture i386
 }}}

 This is a known clang assembler error
 <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63773>.

 There is a reduced test case for it:
 {{{
         .text
         .align 4,0x90
         .globl _choose_tmpdir
 _choose_tmpdir:
         sbbl    $3+_vartmp, %esi
         ret
         .space 254

         .const
         .align 2
 _vartmp:
         .byte   47
 }}}
 and I confirm that `clang-3.4` and `clang-3.7` error out on this assembly,
 but `clang-5.0` can compile it successfully:
 {{{
 $ clang-mp-3.4 -arch i386  testi386asm.S
 ld: in /var/folders/If/IfyiELboGT08qyd+9nD3DU+++TI/-Tmp-/testi386asm-
 fc6237.o, in section __TEXT,__text reloc 0: unsupported r_length=0 for
 scattered vanilla reloc for architecture i386
 clang: error: linker command failed with exit code 1 (use -v to see
 invocation)

 $ clang-mp-3.7 -arch i386  testi386asm.S
 ld: in /var/folders/If/IfyiELboGT08qyd+9nD3DU+++TI/-Tmp-/testi386asm-
 c2fa0b.o, in section __TEXT,__text reloc 0: unsupported r_length=0 for
 scattered vanilla reloc for architecture i386
 clang: error: linker command failed with exit code 1 (use -v to see
 invocation)

 $ clang-mp-5.0 -arch i386  testi386asm.S
 Undefined symbols for architecture i386:
   "_main", referenced from:
       start in crt1.10.6.o
 ld: symbol(s) not found for architecture i386
 clang: error: linker command failed with exit code 1 (use -v to see
 invocation)
 }}}

 Likewise, the same assembly generates errors when compiling in `x86_64`
 mode.
 {{{
 $ clang-mp-3.4 -arch x86_64  testi386asm.S
 ld: in /var/folders/If/IfyiELboGT08qyd+9nD3DU+++TI/-Tmp-/testi386asm-
 07fc5b.o, in section __TEXT,__text reloc 0: length < 2 and
 X86_64_RELOC_UNSIGNED not supported for architecture x86_64
 clang: error: linker command failed with exit code 1 (use -v to see
 invocation)

 $ clang-mp-3.7 -arch x86_64  testi386asm.S
 ld: in /var/folders/If/IfyiELboGT08qyd+9nD3DU+++TI/-Tmp-/testi386asm-
 52d45e.o, in section __TEXT,__text reloc 0: length < 2 and
 X86_64_RELOC_UNSIGNED not supported for architecture x86_64
 clang: error: linker command failed with exit code 1 (use -v to see
 invocation)

 $ clang-mp-5.0 -arch x86_64  testi386asm.S
 Undefined symbols for architecture x86_64:
   "_main", referenced from:
       start in crt1.10.6.o
 ld: symbol(s) not found for architecture x86_64
 }}}

 So - it appears that `clang` should not be used as the default assembler
 unless it is `clang-5.0` or greater, and for the system `clang` should not
 be used (according to the gcc bug report) unless the Xcode version is at
 least `7.3.1`.

 This probably requires only a rather minor adjustment to the `cctools`
 port.

-- 
Ticket URL: <https://trac.macports.org/ticket/58493>
MacPorts <https://www.macports.org/>
Ports system for macOS


More information about the macports-tickets mailing list