I looked for a "Component" for 'libgcc' but there is no such category so I
chose 'inline-asm' as this is an "extra underscore issue" with '.s' files.

# gcc/xgcc -v
Using built-in specs.
Target: i386-pc-solaris2.11
Configured with: ../gcc_trunk/configure
--enable-languages=ada,c,c++,fortran,java,objc,obj-c++ --enable-shared
--disable-static --enable-decimal-float --with-long-double-128
--with-included-gettext --enable-stage1-checking --enable-checking=release
--with-tune=k8 --with-cpu=k8 --with-arch=k8 --with-gnu-as
--with-as=/usr/local/bin/as --with-gnu-ld --with-ld=/usr/local/bin/ld
Thread model: posix
gcc version 4.4.0 20090131 (experimental) [trunk revision 143817] (GCC) 

Note: I use GNU's 'ld' on OpenSolaris.


When I run "make -i check" I get this:
...
Running /usr/share/src/gcc_trunk/gcc/testsuite/gcc.dg/torture/dg-torture.exp
...
FAIL: gcc.dg/torture/fp-int-convert-float128.c  -O0  (test for excess errors)
WARNING: gcc.dg/torture/fp-int-convert-float128.c  -O0  compilation failed to
produce executable
FAIL: gcc.dg/torture/fp-int-convert-float128.c  -O1  (test for excess errors)
WARNING: gcc.dg/torture/fp-int-convert-float128.c  -O1  compilation failed to
produce executable
FAIL: gcc.dg/torture/fp-int-convert-float128.c  -O2  (test for excess errors)
WARNING: gcc.dg/torture/fp-int-convert-float128.c  -O2  compilation failed to
produce executable
FAIL: gcc.dg/torture/fp-int-convert-float128.c  -O3 -fomit-frame-pointer  (test
for excess errors)
WARNING: gcc.dg/torture/fp-int-convert-float128.c  -O3 -fomit-frame-pointer 
compilation failed to produce executable
FAIL: gcc.dg/torture/fp-int-convert-float128.c  -O3 -g  (test for excess
errors)
WARNING: gcc.dg/torture/fp-int-convert-float128.c  -O3 -g  compilation failed
to produce executable
FAIL: gcc.dg/torture/fp-int-convert-float128.c  -Os  (test for excess errors)
WARNING: gcc.dg/torture/fp-int-convert-float128.c  -Os  compilation failed to
produce executable
...


I tried to compile the Testsuite case "gcc.dg/torture/fp-int-convert-float.c"
by hand to investigate these errors:

Executing on host: /usr/share/src/gcc_build/gcc/xgcc
-B/usr/share/src/gcc_build/gcc/
/usr/share/src/gcc_trunk/gcc/testsuite/gcc.dg/torture/fp-int-convert-float128.c
  -O0    -lm   -o ./fp-int-convert-float128.exe    (timeout = 300)
/var/tmp//cc_XaqHO.o: In function `main':


fp-int-convert-float128.c:(.text+0x3a): undefined reference to `__floatsitf'


fp-int-convert-float128.c:(.text+0x5a): undefined reference to `__fixtfsi'


fp-int-convert-float128.c:(.text+0xa1): undefined reference to `__netf2'
...
fp-int-convert-float128.c:(.text+0xa5f3): undefined reference to `__netf2'


collect2: ld returned 1 exit status


FAIL: gcc.dg/torture/fp-int-convert-float128.c  -O3 -fomit-frame-pointer  (test
for excess errors)
Excess errors:
...
fp-int-convert-float128.c:(.text+0xa4f8): undefined reference to
`__floatunditf'
fp-int-convert-float128.c:(.text+0xa516): undefined reference to `__fixunstfdi'
fp-int-convert-float128.c:(.text+0xa598): undefined reference to `__netf2'
WARNING: gcc.dg/torture/fp-int-convert-float128.c  -O3 -fomit-frame-pointer 
compilation failed to produce executable


Where are those functions and what are they called:

# find /usr/share/src/gcc_build/i386-pc-solaris2.11/ -name *floatunditf*
/usr/share/src/gcc_build/i386-pc-solaris2.11/amd64/libgcc/_floatunditf_s.o
/usr/share/src/gcc_build/i386-pc-solaris2.11/amd64/libgcc/_floatunditf.o
/usr/share/src/gcc_build/i386-pc-solaris2.11/amd64/libgcc/_floatunditf.dep
/usr/share/src/gcc_build/i386-pc-solaris2.11/amd64/libgcc/_floatunditf_s.dep
/usr/share/src/gcc_build/i386-pc-solaris2.11/libgcc/_floatunditf.dep
/usr/share/src/gcc_build/i386-pc-solaris2.11/libgcc/_floatunditf.o
/usr/share/src/gcc_build/i386-pc-solaris2.11/libgcc/_floatunditf_s.dep
/usr/share/src/gcc_build/i386-pc-solaris2.11/libgcc/_floatunditf_s.o


Failing Command:

/usr/share/src/gcc_build/gcc/xgcc -B/usr/share/src/gcc_build/gcc/
/usr/share/src/gcc_trunk/gcc/testsuite/gcc.dg/torture/fp-int-convert-float128.c
  -O3 -g    -lm   -o ./fp-int-convert-float128.exe


Working Command (Note that I add -lgcc to provoke the linker):

# /usr/share/src/gcc_build/gcc/xgcc -B/usr/share/src/gcc_build/gcc/
/usr/share/src/gcc_trunk/gcc/testsuite/gcc.dg/torture/fp-int-convert-float128.c
/usr/share/src/gcc_trunk/gcc/config/soft-fp/floatunditf.c
/usr/share/src/gcc_trunk/gcc/config/soft-fp/floatunsitf.c
/usr/share/src/gcc_trunk/gcc/config/soft-fp/floatsitf.c
/usr/share/src/gcc_trunk/gcc/config/soft-fp/fixunstfdi.c
/usr/share/src/gcc_trunk/gcc/config/soft-fp/floatditf.c
/usr/share/src/gcc_trunk/gcc/config/soft-fp/fixtfsi.c
/usr/share/src/gcc_trunk/gcc/config/soft-fp/fixunstfsi.c
/usr/share/src/gcc_trunk/gcc/config/soft-fp/fixtfdi.c
/usr/share/src/gcc_trunk/gcc/config/soft-fp/eqtf2.c
-I/usr/share/src/gcc_trunk/gcc/config/i386/ -I/usr/share/src/gcc_trunk/libgcc/
-I/usr/share/src/gcc_trunk/gcc/  -O0 -lm -lgcc -o ./fp-int-convert-float128.exe
/usr/share/src/gcc_trunk/gcc/config/soft-fp/fixtfsi.c: In function ‘__fixtfsi’:
/usr/share/src/gcc_trunk/gcc/config/soft-fp/fixtfsi.c:42: warning: left shift
count >= width of type
/usr/share/src/gcc_trunk/gcc/config/soft-fp/fixtfsi.c:42: warning: left shift
count >= width of type
/usr/share/src/gcc_trunk/gcc/config/soft-fp/fixtfsi.c:42: warning: left shift
count >= width of type
/usr/share/src/gcc_trunk/gcc/config/soft-fp/fixtfsi.c:42: warning: left shift
count >= width of type
/usr/share/src/gcc_trunk/gcc/config/soft-fp/fixtfsi.c:42: warning: left shift
count >= width of type
/usr/share/src/gcc_trunk/gcc/config/soft-fp/fixtfsi.c:42: warning: left shift
count >= width of type
/usr/share/src/gcc_trunk/gcc/config/soft-fp/fixtfsi.c:42: warning: left shift
count >= width of type
/usr/share/src/gcc_trunk/gcc/config/soft-fp/fixtfsi.c:42: warning: left shift
count >= width of type
/usr/share/src/gcc_trunk/gcc/config/soft-fp/fixunstfsi.c: In function
‘__fixunstfsi’:
/usr/share/src/gcc_trunk/gcc/config/soft-fp/fixunstfsi.c:42: warning: left
shift count >= width of type
/usr/share/src/gcc_trunk/gcc/config/soft-fp/fixunstfsi.c:42: warning: left
shift count >= width of type
/usr/share/src/gcc_trunk/gcc/config/soft-fp/fixunstfsi.c:42: warning: left
shift count >= width of type
/usr/share/src/gcc_trunk/gcc/config/soft-fp/fixunstfsi.c:42: warning: left
shift count >= width of type
/usr/share/src/gcc_trunk/gcc/config/soft-fp/fixunstfsi.c:42: warning: left
shift count >= width of type
/usr/share/src/gcc_trunk/gcc/config/soft-fp/fixunstfsi.c:42: warning: left
shift count >= width of type
/usr/share/src/gcc_trunk/gcc/config/soft-fp/fixunstfsi.c:42: warning: left
shift count >= width of type
/usr/share/src/gcc_trunk/gcc/config/soft-fp/fixunstfsi.c:42: warning: left
shift count >= width of type
#

# ./fp-int-convert-float128.exe
#


Works. Even though I used "-lgcc" there was no 'collision' between the 
various "conversion functions". The unwanted underscores hide them.

I used the soft-fp "C" source files instead of relying on the double
underscored versions of these functions that are in libgcc and was
able to hand-compile and run ./fp-int-convert-float128.exe .

The Testsuite tests for these "conversion functions" could work
if they were fixed. These files might have first been discussed here:
http://gcc.gnu.org/ml/gcc-patches/2006-05/msg00968.html .

Rob


-- 
           Summary: gcc 4.4.0 20090131 - Extra underscore hides libgcc's
                    soft-fp functions from Testsuite causing FAILs + naming
                    error in libgcc
           Product: gcc
           Version: 4.4.0
            Status: UNCONFIRMED
          Severity: major
          Priority: P3
         Component: inline-asm
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: rob1weld at aol dot com
 GCC build triplet: i386-pc-solaris2.11
  GCC host triplet: i386-pc-solaris2.11
GCC target triplet: i386-pc-solaris2.11


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39048

Reply via email to