This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
Re: problems compiling gcc 2.95.[12] for sparc64-linux using --with-cpu=sparc
On Sun, Oct 31, 1999 at 09:13:52PM +0100, Martin v. Loewis wrote:
> > I'm not saying it is a problem in the PIC, nor a problem in sparc64. It is
> > a problem in how the sparc32 compiler is generated when compiling for
> > sparc64-linux (note that it is multilib, and default is sparc32, and
> > should compile the code the same as a sparc-linux compiler, but it doesn't).
>
> Thanks for the information. There is a number of things that confuse
> me in your report; perhaps you can help resolving them.
>
> 1. I thought sparc64 is not officially supported in GCC, is that not
> true?
Correct, AFAIK. But this is built with sparc as the default cpu target.
> 2. You say you are using a sparc64-linux installation (which indeed
> would multilib for m32/m64), yet in the commands you invoke, I only
> see the "sparc-linux" architecture, on which there is no
> multilibbing.
Again, the compiler is setup to create sparc-linux binaries by default,
I'm not sure why this autoconf test even has to pass -bsparc-linux, but
the output is the same (-m32 is default, adding -m64 would create sparc64
objects).
Here is the nm -o output:
[buildd@xia03(12:41pm)-/<1>buildd/apt-0.3.13]%nm -o
/usr/lib/gcc-lib/sparc-linux/2.95.2/libgcc.a | grep bad_alloc
/usr/lib/gcc-lib/sparc-linux/2.95.2/libgcc.a:new.o:0000000000000000 W _._9bad_alloc
/usr/lib/gcc-lib/sparc-linux/2.95.2/libgcc.a:new.o:0000000000000000 W __tf9bad_alloc
/usr/lib/gcc-lib/sparc-linux/2.95.2/libgcc.a:new.o:000000000000000c C __ti9bad_alloc
/usr/lib/gcc-lib/sparc-linux/2.95.2/libgcc.a:new.o:0000000000000000 W _vt.9bad_alloc
/usr/lib/gcc-lib/sparc-linux/2.95.2/libgcc.a:new.o:0000000000000034 T what__C9bad_alloc
/usr/lib/gcc-lib/sparc-linux/2.95.2/libgcc.a:opnew.o: U _._9bad_alloc
/usr/lib/gcc-lib/sparc-linux/2.95.2/libgcc.a:opnew.o: U __tf9bad_alloc
/usr/lib/gcc-lib/sparc-linux/2.95.2/libgcc.a:opnew.o: U _vt.9bad_alloc
/usr/lib/gcc-lib/sparc-linux/2.95.2/libgcc.a:opnewnt.o: U __tf9bad_alloc
/usr/lib/gcc-lib/sparc-linux/2.95.2/libgcc.a:opvnew.o: U __tf9bad_alloc
Here is the output of a known good libgcc.a (built as a sparc-linux, also
32bit, as with the above):
nm -o /usr/lib/gcc-lib/sparc-linux/2.95.2/libgcc.a | grep bad_alloc
/usr/lib/gcc-lib/sparc-linux/2.95.2/libgcc.a:new.o:0000000000000000 W _._9bad_alloc
/usr/lib/gcc-lib/sparc-linux/2.95.2/libgcc.a:new.o:0000000000000000 W __tf9bad_alloc
/usr/lib/gcc-lib/sparc-linux/2.95.2/libgcc.a:new.o:000000000000000c C __ti9bad_alloc
/usr/lib/gcc-lib/sparc-linux/2.95.2/libgcc.a:new.o:0000000000000000 W __vt_9bad_alloc
/usr/lib/gcc-lib/sparc-linux/2.95.2/libgcc.a:new.o:0000000000000034 T what__C9bad_alloc
/usr/lib/gcc-lib/sparc-linux/2.95.2/libgcc.a:opnew.o: U _._9bad_alloc
/usr/lib/gcc-lib/sparc-linux/2.95.2/libgcc.a:opnew.o: U __tf9bad_alloc
/usr/lib/gcc-lib/sparc-linux/2.95.2/libgcc.a:opnew.o: U __vt_9bad_alloc
/usr/lib/gcc-lib/sparc-linux/2.95.2/libgcc.a:opnewnt.o: U __tf9bad_alloc
/usr/lib/gcc-lib/sparc-linux/2.95.2/libgcc.a:opvnew.o: U __tf9bad_alloc
I see the difference you were refering to: s/_vt.9bad_alloc/__vt_9bad_alloc/
Could you tell me where this symbol comes from, or what defines affect
it's creation?
In addition, here is the config.log output from CXXFLAGS=-v LDFLAGS=-Wl,--verbose:
Ben
configure:1110: c++ -bsparc-linux -o conftest -v -Wl,--verbose conftest.C 1>&5
Reading specs from /usr/lib/gcc-lib/sparc-linux/2.95.2/specs
gcc version 2.95.2 19990906 (prerelease)
/usr/lib/gcc-lib/sparc-linux/2.95.2/cpp -lang-c++ -v -D__GNUC__=2 -D__GNUG__=2 -D__GNUC_MINOR__=95 -D__cplusplus -D__ELF__ -Dunix -D_LONGLONG -D__sparc__ -Dlinux -D__ELF__ -D__unix__ -D_LONGLONG -D__sparc__ -D__linux__ -D__unix -D__linux -Asystem(unix) -Asystem(posix) -D__EXCEPTIONS -D__SIZE_TYPE__=unsigned int -D__PTRDIFF_TYPE__=int -D__GCC_NEW_VARARGS__ -Acpu(sparc) -Amachine(sparc) conftest.C /tmp/ccPC9MJT.ii
GNU CPP version 2.95.2 19991024 (release) (sparc64 GNU/Linux with ELF)
#include "..." search starts here:
#include <...> search starts here:
/usr/lib/gcc-lib/sparc-linux/2.95.2/../../../../include/g++-3
/usr/local/include
/usr/lib/gcc-lib/sparc-linux/2.95.2/include
/usr/include
End of search list.
The following default directories have been omitted from the search path:
/usr/lib/gcc-lib/sparc-linux/2.95.2/../../../../sparc-linux/include
End of omitted list.
/usr/lib/gcc-lib/sparc-linux/2.95.2/cc1plus /tmp/ccPC9MJT.ii -quiet -dumpbase conftest.cc -version -o /tmp/cc8H4qZC.s
GNU C++ version 2.95.2 19990906 (prerelease) (sparc-linux) compiled by GNU C version 2.95.2 19990906 (prerelease).
as -V -Qy -s -Av9a -32 -o /tmp/cc7apl7m.o /tmp/cc8H4qZC.s
GNU assembler version 2.9.5 (sparc-linux) using BFD version 2.9.5.0.16
/usr/lib/gcc-lib/sparc-linux/2.95.2/collect2 -m elf32_sparc -Y P,/usr/lib -dynamic-linker /lib/ld-linux.so.2 -o conftest /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/gcc-lib/sparc-linux/2.95.2/crtbegin.o -L/usr/lib/gcc-lib/sparc-linux/2.95.2 --verbose /tmp/cc7apl7m.o -lstdc++ -lm -lgcc -lc -lgcc /usr/lib/gcc-lib/sparc-linux/2.95.2/crtend.o /usr/lib/crtn.o
/usr/lib/gcc-lib/sparc-linux/2.95.2/libstdc++.so: undefined reference to `bad_alloc virtual table'
/usr/lib/gcc-lib/sparc-linux/2.95.2/libstdc++.so: undefined reference to `exception virtual table'
GNU ld version 2.9.5 (with BFD 2.9.5.0.16)
Supported emulations:
elf32_sparc
sparclinux
sun4
elf64_sparc
using internal linker script:
==================================================
OUTPUT_FORMAT("elf32-sparc", "elf32-sparc",
"elf32-sparc")
OUTPUT_ARCH(sparc)
ENTRY(_start)
SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/sparc-linux/lib);
/* Do we need any of these for elf?
__DYNAMIC = 0; */
SECTIONS
{
/* Read-only sections, merged into text segment: */
. = 0x10000 + SIZEOF_HEADERS;
.interp : { *(.interp) }
.hash : { *(.hash) }
.dynsym : { *(.dynsym) }
.dynstr : { *(.dynstr) }
.gnu.version : { *(.gnu.version) }
.gnu.version_d : { *(.gnu.version_d) }
.gnu.version_r : { *(.gnu.version_r) }
.rel.init : { *(.rel.init) }
.rela.init : { *(.rela.init) }
.rel.text :
{
*(.rel.text)
*(.rel.text.*)
*(.rel.gnu.linkonce.t*)
}
.rela.text :
{
*(.rela.text)
*(.rela.text.*)
*(.rela.gnu.linkonce.t*)
}
.rel.fini : { *(.rel.fini) }
.rela.fini : { *(.rela.fini) }
.rel.rodata :
{
*(.rel.rodata)
*(.rel.rodata.*)
*(.rel.gnu.linkonce.r*)
}
.rela.rodata :
{
*(.rela.rodata)
*(.rela.rodata.*)
*(.rela.gnu.linkonce.r*)
}
.rel.data :
{
*(.rel.data)
*(.rel.data.*)
*(.rel.gnu.linkonce.d*)
}
.rela.data :
{
*(.rela.data)
*(.rela.data.*)
*(.rela.gnu.linkonce.d*)
}
.rel.ctors : { *(.rel.ctors) }
.rela.ctors : { *(.rela.ctors) }
.rel.dtors : { *(.rel.dtors) }
.rela.dtors : { *(.rela.dtors) }
.rel.got : { *(.rel.got) }
.rela.got : { *(.rela.got) }
.rel.sdata :
{
*(.rel.sdata)
*(.rel.sdata.*)
*(.rel.gnu.linkonce.s*)
}
.rela.sdata :
{
*(.rela.sdata)
*(.rela.sdata.*)
*(.rela.gnu.linkonce.s*)
}
.rel.sbss : { *(.rel.sbss) }
.rela.sbss : { *(.rela.sbss) }
.rel.bss : { *(.rel.bss) }
.rela.bss : { *(.rela.bss) }
.rel.plt : { *(.rel.plt) }
.rela.plt : { *(.rela.plt) }
.init :
{
KEEP (*(.init))
} =0
.text :
{
*(.text)
*(.text.*)
*(.stub)
/* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning)
*(.gnu.linkonce.t*)
} =0
_etext = .;
PROVIDE (etext = .);
.fini :
{
KEEP (*(.fini))
} =0
.rodata : { *(.rodata) *(.rodata.*) *(.gnu.linkonce.r*) }
.rodata1 : { *(.rodata1) }
/* Adjust the address for the data segment. We want to adjust up to
the same address within the page on the next page up. */
. = ALIGN(0x10000) + (. & (0x10000 - 1));
.data :
{
*(.data)
*(.data.*)
*(.gnu.linkonce.d*)
SORT(CONSTRUCTORS)
}
.data1 : { *(.data1) }
.eh_frame : { *(.eh_frame) }
.gcc_except_table : { *(.gcc_except_table) }
.ctors :
{
/* gcc uses crtbegin.o to find the start of
the constructors, so we make sure it is
first. Because this is a wildcard, it
doesn't matter if the user does not
actually link against crtbegin.o; the
linker won't look for a file to match a
wildcard. The wildcard also means that it
doesn't matter which directory crtbegin.o
is in. */
KEEP (*crtbegin.o(.ctors))
/* We don't want to include the .ctor section from
from the crtend.o file until after the sorted ctors.
The .ctor section from the crtend file contains the
end of ctors marker and it must be last */
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
}
.dtors :
{
KEEP (*crtbegin.o(.dtors))
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
}
.plt : { *(.plt) }
.got : { *(.got.plt) *(.got) }
.dynamic : { *(.dynamic) }
/* We want the small data sections together, so single-instruction offsets
can access them all, and initialized data all before uninitialized, so
we can shorten the on-disk segment size. */
.sdata :
{
*(.sdata)
*(.sdata.*)
*(.gnu.linkonce.s.*)
}
_edata = .;
PROVIDE (edata = .);
__bss_start = .;
.sbss :
{
*(.dynsbss)
*(.sbss)
*(.sbss.*)
*(.scommon)
}
.bss :
{
*(.dynbss)
*(.bss)
*(.bss.*)
*(COMMON)
/* Align here to ensure that the .bss section occupies space up to
_end. Align after .bss to ensure correct alignment even if the
.bss section disappears because there are no input sections. */
. = ALIGN(8);
}
. = ALIGN(8);
_end = .;
PROVIDE (end = .);
/* Stabs debugging sections. */
.stab 0 : { *(.stab) }
.stabstr 0 : { *(.stabstr) }
.stab.excl 0 : { *(.stab.excl) }
.stab.exclstr 0 : { *(.stab.exclstr) }
.stab.index 0 : { *(.stab.index) }
.stab.indexstr 0 : { *(.stab.indexstr) }
.comment 0 : { *(.comment) }
/* DWARF debug sections.
Symbols in the DWARF debugging sections are relative to the beginning
of the section so we begin them at 0. */
/* DWARF 1 */
.debug 0 : { *(.debug) }
.line 0 : { *(.line) }
/* GNU DWARF 1 extensions */
.debug_srcinfo 0 : { *(.debug_srcinfo) }
.debug_sfnames 0 : { *(.debug_sfnames) }
/* DWARF 1.1 and DWARF 2 */
.debug_aranges 0 : { *(.debug_aranges) }
.debug_pubnames 0 : { *(.debug_pubnames) }
/* DWARF 2 */
.debug_info 0 : { *(.debug_info) }
.debug_abbrev 0 : { *(.debug_abbrev) }
.debug_line 0 : { *(.debug_line) }
.debug_frame 0 : { *(.debug_frame) }
.debug_str 0 : { *(.debug_str) }
.debug_loc 0 : { *(.debug_loc) }
.debug_macinfo 0 : { *(.debug_macinfo) }
/* SGI/MIPS DWARF 2 extensions */
.debug_weaknames 0 : { *(.debug_weaknames) }
.debug_funcnames 0 : { *(.debug_funcnames) }
.debug_typenames 0 : { *(.debug_typenames) }
.debug_varnames 0 : { *(.debug_varnames) }
/* These must appear regardless of . */
}
==================================================
attempt to open /usr/lib/crt1.o succeeded
/usr/lib/crt1.o
attempt to open /usr/lib/crti.o succeeded
/usr/lib/crti.o
attempt to open /usr/lib/gcc-lib/sparc-linux/2.95.2/crtbegin.o succeeded
/usr/lib/gcc-lib/sparc-linux/2.95.2/crtbegin.o
attempt to open /tmp/cc7apl7m.o succeeded
/tmp/cc7apl7m.o
attempt to open /usr/lib/gcc-lib/sparc-linux/2.95.2/libstdc++.so succeeded
-lstdc++ (/usr/lib/gcc-lib/sparc-linux/2.95.2/libstdc++.so)
attempt to open /usr/lib/gcc-lib/sparc-linux/2.95.2/libm.so failed
attempt to open /usr/lib/gcc-lib/sparc-linux/2.95.2/libm.sl failed
attempt to open /usr/lib/gcc-lib/sparc-linux/2.95.2/libm.a failed
attempt to open /usr/lib/libm.so succeeded
-lm (/usr/lib/libm.so)
attempt to open /usr/lib/gcc-lib/sparc-linux/2.95.2/libgcc.so failed
attempt to open /usr/lib/gcc-lib/sparc-linux/2.95.2/libgcc.sl failed
attempt to open /usr/lib/gcc-lib/sparc-linux/2.95.2/libgcc.a succeeded
attempt to open /usr/lib/gcc-lib/sparc-linux/2.95.2/libc.so failed
attempt to open /usr/lib/gcc-lib/sparc-linux/2.95.2/libc.sl failed
attempt to open /usr/lib/gcc-lib/sparc-linux/2.95.2/libc.a failed
attempt to open /usr/lib/libc.so succeeded
opened script file /usr/lib/libc.so
attempt to open /lib/libc.so.6 succeeded
/lib/libc.so.6
attempt to open /usr/lib/libc_nonshared.a succeeded
attempt to open /usr/lib/gcc-lib/sparc-linux/2.95.2/libgcc.so failed
attempt to open /usr/lib/gcc-lib/sparc-linux/2.95.2/libgcc.sl failed
attempt to open /usr/lib/gcc-lib/sparc-linux/2.95.2/libgcc.a succeeded
attempt to open /usr/lib/gcc-lib/sparc-linux/2.95.2/crtend.o succeeded
/usr/lib/gcc-lib/sparc-linux/2.95.2/crtend.o
attempt to open /usr/lib/crtn.o succeeded
/usr/lib/crtn.o
collect2: ld returned 1 exit status
configure: failed program was:
#line 1105 "configure"
#include "confdefs.h"
main(){return(0);}