public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug target/53803] New: --enable-target-optspace gives undefined references to restgpr_*_x
@ 2012-06-29 10:20 aldot at gcc dot gnu.org
  2012-06-29 16:00 ` [Bug target/53803] " amodra at gmail dot com
  2012-06-29 16:04 ` amodra at gmail dot com
  0 siblings, 2 replies; 3+ messages in thread
From: aldot at gcc dot gnu.org @ 2012-06-29 10:20 UTC (permalink / raw)
  To: gcc-bugs

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

             Bug #: 53803
           Summary: --enable-target-optspace gives undefined references to
                    restgpr_*_x
    Classification: Unclassified
           Product: gcc
           Version: 4.7.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: aldot@gcc.gnu.org
                CC: dje.gcc@gmail.com, froydnj@gcc.gnu.org,
                    geoffk@geoffk.org
            Target: powerpc


intermediate compiler (built with -Os) trying to link a userspace program gives

powerpc-oe-linux-uclibc-gcc -m32 -mhard-float -mcpu=603e
powerpc-oe-linux-uclibc/4.7.1/ld: getconf: hidden symbol `_restgpr_31_x' in 
/scratch/obj.x86_64/oe/build/tmp-uclibc/sysroots/x86_64-linux/usr/lib/ppc603e-oe-linux-uclibc.gcc-cross-intermediate/gcc/powerpc-oe-linux-uclibc/4.7.1/libgcc.a(crtresxgpr.o)
is referenced by DSO

Observations:
1) libgcc_s.so is a script: "GROUP ( libgcc_s.so.1 libgcc.a )"
2) There are libcalls emitted into my libc:
$ powerpc-oe-linux-uclibc-gcc  -m32 -mhard-float  -mcpu=603e
--sysroot=/scratch/obj.x86_64/oe/build/tmp-uclibc/sysroots/qemuppc-tcbootstrap
-Wl,-EB -shared -Wl,--warn-common -Wl,--warn-once -Wl,-z,combreloc -Wl,-z,relro
-Wl,-z,now -Wl,--hash-style=gnu -Wl,-z,defs   -Wl,-init,__uClibc_init 
-Wl,-soname=libc.so.0 -nostdlib -o lib/libuClibc-0.9.34-git.so 
-Wl,--whole-archive libc/libc_so.a -Wl,--no-whole-archive ./lib/interp.os
./lib/ld-uClibc.so.0 ./lib/uclibc_nonshared.a 2>&1 >&1 | sed -e
's/.*uClibc/OBJTREE/'
libc/libc_so.a(fnmatch.os): In function `end_pattern':
OBJTREE/libc/misc/fnmatch/fnmatch_loop.c:1014: undefined reference to
`_restgpr_27_x'
libc/libc_so.a(fnmatch.os): In function `internal_fnmatch':
OBJTREE/libc/misc/fnmatch/fnmatch_loop.c:975: undefined reference to
`_restgpr_16_x'
libc/libc_so.a(fnmatch.os): In function `ext_match':
OBJTREE/libc/misc/fnmatch/fnmatch_loop.c:1189: undefined reference to
`_restgpr_14_x'
libc/libc_so.a(regex.os): In function `postorder':
OBJTREE/libc/misc/regex/regcomp.c:1167: undefined reference to `_restgpr_28_x'
libc/libc_so.a(regex.os): In function `check_dst_limits_calc_pos_1':
OBJTREE/libc/misc/regex/regexec.c:1914: undefined reference to `_restgpr_18_x'
libc/libc_so.a(regex.os): In function `re_node_set_alloc':
OBJTREE/libc/misc/regex/regex_internal.c:885: undefined reference to
`_restgpr_29_x'
libc/libc_so.a(regex.os): In function `duplicate_tree':
OBJTREE/libc/misc/regex/regcomp.c:3779: undefined reference to `_restgpr_26_x'
libc/libc_so.a(regex.os): In function `lower_subexp':
OBJTREE/libc/misc/regex/regcomp.c:1288: undefined reference to `_restgpr_24_x'
libc/libc_so.a(regex.os): In function `free_state':
OBJTREE/libc/misc/regex/regex_internal.c:1499: undefined reference to
`_savegpr_31'
libc/libc_so.a(regex.os): In function `re_string_destruct':
OBJTREE/libc/misc/regex/regex_internal.c:828: undefined reference to
`_restgpr_31_x'
libc/libc_so.a(regex.os): In function `re_dfa_add_node':
OBJTREE/libc/misc/regex/regex_internal.c:1360: undefined reference to
`_restgpr_22_x'
libc/libc_so.a(regex.os): In function `build_wcs_buffer':
OBJTREE/libc/misc/regex/regex_internal.c:257: undefined reference to
`_restgpr_23_x'
libc/libc_so.a(regex.os): In function `build_wcs_upper_buffer':
OBJTREE/libc/misc/regex/regex_internal.c:473: undefined reference to
`_restgpr_21_x'
libc/libc_so.a(regex.os): In function `re_compile_fastmap_iter':
OBJTREE/libc/misc/regex/regcomp.c:397: undefined reference to `_restgpr_17_x'
libc/libc_so.a(regex.os): In function `re_node_set_init_union':
OBJTREE/libc/misc/regex/regex_internal.c:1096: undefined reference to
`_restgpr_25_x'
libc/libc_so.a(regex.os): In function `sift_states_backward':
OBJTREE/libc/misc/regex/regexec.c:1561: undefined reference to `_restgpr_15_x'
libc/libc_so.a(regex.os): In function `expand_bkref_cache':
OBJTREE/libc/misc/regex/regexec.c:3212: undefined reference to `_restgpr_20_x'
libc/libc_so.a(regex.os): In function `re_compile_pattern':
OBJTREE/libc/misc/regex/regcomp.c:233: undefined reference to `_restgpr_30_x'
libc/libc_so.a(wordexp.os): In function `parse_arith':
OBJTREE/libc/misc/wordexp/wordexp.c:751: undefined reference to `_restgpr_19_x'
libc/libc_so.a(_fpmaxtostr.os): In function `_fpmaxtostr':
OBJTREE/libc/stdio/_fpmaxtostr.c:189: undefined reference to `_savefpr_22'
OBJTREE/libc/stdio/_fpmaxtostr.c:265: undefined reference to `__gcc_qdiv'
OBJTREE/libc/stdio/_fpmaxtostr.c:278: undefined reference to `__gcc_qmul'
OBJTREE/libc/stdio/_fpmaxtostr.c:375: undefined reference to `__gcc_qsub'
OBJTREE/libc/stdio/_fpmaxtostr.c:376: undefined reference to `__gcc_qadd'
OBJTREE/libc/stdio/_fpmaxtostr.c:748: undefined reference to `_restfpr_22_x'
libc/libc_so.a(lldiv.os): In function `lldiv':
OBJTREE/libc/stdlib/lldiv.c:30: undefined reference to `__divdi3'
OBJTREE/libc/stdlib/lldiv.c:31: undefined reference to `__moddi3'
libc/libc_so.a(__strtofpmax.os): In function `__strtofpmax':
OBJTREE/libc/stdlib/_strtod.c:206: undefined reference to `_savefpr_28'
OBJTREE/libc/stdlib/_strtod.c:471: undefined reference to `_restfpr_28_x'
collect2: error: ld returned 1 exit status

3) to satisfy the libcalls we usually pull in those bits via -lgcc:
$ powerpc-oe-linux-uclibc-gcc  -m32 -mhard-float  -mcpu=603e
--sysroot=/scratch/obj.x86_64/oe/build/tmp-uclibc/sysroots/qemuppc-tcbootstrap
-Wl,-EB -shared -Wl,--warn-common -Wl,--warn-once -Wl,-z,combreloc -Wl,-z,relro
-Wl,-z,now -Wl,--hash-style=gnu -Wl,-z,defs   -Wl,-init,__uClibc_init 
-Wl,-soname=libc.so.0 -nostdlib -o lib/libuClibc-0.9.34-git.so 
-Wl,--whole-archive libc/libc_so.a -Wl,--no-whole-archive ./lib/interp.os
./lib/ld-uClibc.so.0 ./lib/uclibc_nonshared.a -lgcc
$ powerpc-oe-linux-uclibc-nm lib/libuClibc-0.9.34-git.so | grep "gpr"
00012a30 t __GI_sigprocmask
0005cb8c t _restgpr_14_x
0005cb90 t _restgpr_15_x
0005cb94 t _restgpr_16_x
0005cb98 t _restgpr_17_x
0005cb9c t _restgpr_18_x
0005cba0 t _restgpr_19_x
0005cba4 t _restgpr_20_x
0005cba8 t _restgpr_21_x
0005cbac t _restgpr_22_x
0005cbb0 t _restgpr_23_x
0005cbb4 t _restgpr_24_x
0005cbb8 t _restgpr_25_x
0005cbbc t _restgpr_26_x
0005cbc0 t _restgpr_27_x
0005cbc4 t _restgpr_28_x
0005cbc8 t _restgpr_29_x
0005cbcc t _restgpr_30_x
0005cbd0 t _restgpr_31_x
0005cae8 t _savegpr_14
0005caec t _savegpr_15
0005caf0 t _savegpr_16
0005caf4 t _savegpr_17
0005caf8 t _savegpr_18
0005cafc t _savegpr_19
0005cb00 t _savegpr_20
0005cb04 t _savegpr_21
0005cb08 t _savegpr_22
0005cb0c t _savegpr_23
0005cb10 t _savegpr_24
0005cb14 t _savegpr_25
0005cb18 t _savegpr_26
0005cb1c t _savegpr_27
0005cb20 t _savegpr_28
0005cb24 t _savegpr_29
0005cb28 t _savegpr_30
0005cb2c t _savegpr_31
00012a30 T sigprocmask
This is obviously what the linker complains about above when linking a program
against that library.
Using -lgcc_s instead gives the same result.

Questions:
1) What am i doing wrong? :)
2) I could
+libc-static-y += $(ARCH_OUT)/gpr.o
+libc-nonshared-y += $(ARCH_OUT)/gpr.o
into libc which would contain
_{rest,save}gpr{0,1}_{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,all}
But that does not help me for the _x libcalls (?)
3) What about these restgpr_x calls, should those be plain _restgpr[01]_num,
i.e. AIX_ABI(?!) ?
rs6000.c rs6000_savres_routine_name()

My compiler was
Configured with:
/scratch/obj.x86_64/oe/build/tmp-uclibc/work-shared/gcc-4.7.0+svnr186651-r2/gcc-4_7-branch/configure
--build=x86_64-linux --host=x86_64-linux --target=powerpc-oe-linux-uclibc
--prefix=/scratch/obj.x86_64/oe/build/tmp-uclibc/sysroots/x86_64-linux/usr
--exec_prefix=/scratch/obj.x86_64/oe/build/tmp-uclibc/sysroots/x86_64-linux/usr
--bindir=/scratch/obj.x86_64/oe/build/tmp-uclibc/sysroots/x86_64-linux/usr/bin/ppc603e-oe-linux-uclibc.gcc-cross-intermediate
--sbindir=/scratch/obj.x86_64/oe/build/tmp-uclibc/sysroots/x86_64-linux/usr/bin/ppc603e-oe-linux-uclibc.gcc-cross-intermediate
--libexecdir=/scratch/obj.x86_64/oe/build/tmp-uclibc/sysroots/x86_64-linux/usr/libexec/ppc603e-oe-linux-uclibc.gcc-cross-intermediate
--datadir=/scratch/obj.x86_64/oe/build/tmp-uclibc/sysroots/x86_64-linux/usr/share
--sysconfdir=/scratch/obj.x86_64/oe/build/tmp-uclibc/sysroots/x86_64-linux/etc
--sharedstatedir=/scratch/obj.x86_64/oe/build/tmp-uclibc/sysroots/x86_64-linux/com
--localstatedir=/scratch/obj.x86_64/oe/build/tmp-uclibc/sysroots/x86_64-linux/var
--libdir=/scratch/obj.x86_64/oe/build/tmp-uclibc/sysroots/x86_64-linux/usr/lib/ppc603e-oe-linux-uclibc.gcc-cross-intermediate
--includedir=/scratch/obj.x86_64/oe/build/tmp-uclibc/sysroots/x86_64-linux/usr/include
--oldincludedir=/scratch/obj.x86_64/oe/build/tmp-uclibc/sysroots/x86_64-linux/usr/include
--infodir=/scratch/obj.x86_64/oe/build/tmp-uclibc/sysroots/x86_64-linux/usr/share/info
--mandir=/scratch/obj.x86_64/oe/build/tmp-uclibc/sysroots/x86_64-linux/usr/share/man
--disable-silent-rules --disable-dependency-tracking
--with-libtool-sysroot=/scratch/obj.x86_64/oe/build/tmp-uclibc/sysroots/x86_64-linux
--enable-shared --disable-multilib --disable-threads --enable-languages=c
--program-prefix=powerpc-oe-linux-uclibc-
--with-sysroot=/scratch/obj.x86_64/oe/build/tmp-uclibc/sysroots/qemuppc-tcbootstrap
--with-build-sysroot=/scratch/obj.x86_64/oe/build/tmp-uclibc/sysroots/qemuppc-tcbootstrap
--disable-libmudflap --disable-libgomp --disable-libquadmath --with-system-zlib
--disable-lto --disable-plugin --disable-libssp --disable-nls
--disable-decimal-float --enable-__cxa_atexit

CC'ing Nathan as per http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43810#c18

thanks in advance for any help,


^ permalink raw reply	[flat|nested] 3+ messages in thread

* [Bug target/53803] --enable-target-optspace gives undefined references to restgpr_*_x
  2012-06-29 10:20 [Bug target/53803] New: --enable-target-optspace gives undefined references to restgpr_*_x aldot at gcc dot gnu.org
@ 2012-06-29 16:00 ` amodra at gmail dot com
  2012-06-29 16:04 ` amodra at gmail dot com
  1 sibling, 0 replies; 3+ messages in thread
From: amodra at gmail dot com @ 2012-06-29 16:00 UTC (permalink / raw)
  To: gcc-bugs

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

Alan Modra <amodra at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|                            |INVALID

--- Comment #1 from Alan Modra <amodra at gmail dot com> 2012-06-29 15:58:57 UTC ---
In reply to question (1), if you get "hidden symbol _restgpr_31_x ... is
referenced by DSO" then the DSO (libc?) in question has been wrongly built. 
You can not have dynamic save/restore functions, so each shared library or
executable must use local copies of those functions.

In reply to observation (2) and (3), linking with -nostdlib means that you need
to really know what you're doing.  In this case you must link in some object or
static library that provides the save/restore functions if you use them (as in
-Os code), and, yes, linking against libgcc.a should do the trick.

In reply to question (2), it sounds like you need to write some more code, or
link against libgcc.a

In reply to question (3), the restgpr_*_x calls are a variant of the gpr
restore functions that tear down the stack frame and return, in addition to
restoring registers.


^ permalink raw reply	[flat|nested] 3+ messages in thread

* [Bug target/53803] --enable-target-optspace gives undefined references to restgpr_*_x
  2012-06-29 10:20 [Bug target/53803] New: --enable-target-optspace gives undefined references to restgpr_*_x aldot at gcc dot gnu.org
  2012-06-29 16:00 ` [Bug target/53803] " amodra at gmail dot com
@ 2012-06-29 16:04 ` amodra at gmail dot com
  1 sibling, 0 replies; 3+ messages in thread
From: amodra at gmail dot com @ 2012-06-29 16:04 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #2 from Alan Modra <amodra at gmail dot com> 2012-06-29 16:03:07 UTC ---
Closed as invalid on the assumption that this is really a uclibc build bug.


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2012-06-29 16:04 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-06-29 10:20 [Bug target/53803] New: --enable-target-optspace gives undefined references to restgpr_*_x aldot at gcc dot gnu.org
2012-06-29 16:00 ` [Bug target/53803] " amodra at gmail dot com
2012-06-29 16:04 ` amodra at gmail dot com

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).