This is the mail archive of the
libc-alpha@sources.redhat.com
mailing list for the glibc project.
Re: compile failure of glibc-2.3.2 due to static libgcc
- From: Daniel Jacobowitz <drow at mvista dot com>
- To: kutek at cybercomm dot net
- Cc: libc-alpha at sources dot redhat dot com
- Date: Sat, 26 Apr 2003 13:40:40 -0400
- Subject: Re: compile failure of glibc-2.3.2 due to static libgcc
- References: <20030426172707.GC608@cybercomm.net>
If you search for this error message in the list archives, you'll find
a discussion between myself and Roland about why this happens. Roland,
did anyone ever change this to build the linker script without trying
to do a link on some of libc's objects?
On Sat, Apr 26, 2003 at 01:27:07PM -0400, kutek at cybercomm dot net wrote:
>
>
> i have been unable to compile glibc 2.3.2 on two different systems where
> the same error is manifested. attached is the file (libc.so.lds) where the
> error occurs, which is the following:
>
> /usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3/../../../../i686-pc-linux-gnu/bin/
> ld: /home/times/gg/glibc/libc.so.lds:114:parse error
>
> another system gives the same error but since it is a different machine the
> line number of the error is different. if you need to see that file i can
> provide it...but since that system is a 386/40 it will take about 4 days
> (bwhahaha) to compile and generate the error, so it is not included here.
>
> utilities needed for the compile are all up to date. the compile failed
> with both gcc 3.2.2 and 3.2.3.
>
> i had compiled my gcc with --disable-shared, and thus libgcc is static.
> glibc will not compile with this compiler configuration, manifesting the
> error as described above. on a hunch, i recompiled gcc to generate the
> dynamic libgcc and glibc compiled successfully with the new compiler.
>
> However, I prefer that libgcc be static for reasons concerning the presence
> of multiple gcc versions on my systems and the vagaries of using the
> different versions so that they access their own libgcc version.
>
> surely there is a way around this? Aside from this situation the static gcc
> seems to function fine. Thanks for any assistance
>
>
> fractoid
>
>
> /* Script for --shared -z combreloc: shared library, combine & sort relocs */
> OUTPUT_FORMAT("elf32-i386", "elf32-i386",
> "elf32-i386")
> OUTPUT_ARCH(i386)
> ENTRY(_start)
> SEARCH_DIR("/usr/i686-pc-linux-gnu/lib"); SEARCH_DIR("/usr/lib"); SEARCH_DIR("/usr/local/lib"); SEARCH_DIR("/lib");
> /* Do we need any of these for elf?
> __DYNAMIC = 0; */
> SECTIONS
> {
> /* Read-only sections, merged into text segment: */
> . = 0 + SIZEOF_HEADERS;
> .note.ABI-tag : { *(.note.ABI-tag) } .hash : { *(.hash) }
> .dynsym : { *(.dynsym) }
> .dynstr : { *(.dynstr) }
> .gnu.version : { *(.gnu.version) }
> .gnu.version_d : { *(.gnu.version_d) }
> .gnu.version_r : { *(.gnu.version_r) }
> .rel.dyn :
> {
> *(.rel.init)
> *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
> *(.rel.fini)
> *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
> *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
> *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
> *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
> *(.rel.ctors)
> *(.rel.dtors)
> *(.rel.got)
> *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
> }
> .rela.dyn :
> {
> *(.rela.init)
> *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
> *(.rela.fini)
> *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
> *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
> *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
> *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
> *(.rela.ctors)
> *(.rela.dtors)
> *(.rela.got)
> *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
> }
> .rel.plt : { *(.rel.plt) }
> .rela.plt : { *(.rela.plt) }
> .init :
> {
> KEEP (*(.init))
> } =0x90909090
> .plt : { *(.plt) }
> .text :
> {
> *(.text .stub .text.* .gnu.linkonce.t.*)
> /* .gnu.warning sections are handled specially by elf32.em. */
> *(.gnu.warning)
> } =0x90909090
> .fini :
> {
> KEEP (*(.fini))
> } =0x90909090
> PROVIDE (__etext = .);
> PROVIDE (_etext = .);
> PROVIDE (etext = .);
> .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
> .rodata1 : { *(.rodata1) }
> .eh_frame_hdr : { *(.eh_frame_hdr) }
> /* Adjust the address for the data segment. We want to adjust up to
> the same address within the page on the next page up. */
> . = DATA_SEGMENT_ALIGN(0x1000, 0x1000);
> /* Ensure the __preinit_array_start label is properly aligned. We
> could instead move the label definition inside the section, but
> the linker would then create the section even if it turns out to
> be empty, which isn't pretty. */
> . = ALIGN(32 / 8);
> .preinit_array : { *(.preinit_array) }
> .init_array : { *(.init_array) }
> .fini_array : { *(.fini_array) }
> .data :
> {
> *(.data .data.* .gnu.linkonce.d.*)
> SORT(CONSTRUCTORS)
> }
> .data1 : { *(.data1) }
> .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
> .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
> .eh_frame : { KEEP (*(.eh_frame)) }
> .gcc_except_table : { *(.gcc_except_table) }
> .dynamic : { *(.dynamic) }
> .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 :
> {
> /usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3/libgcc.a(unwind-dw2-fde-glibc.o): In function `size_of_encoded_value':
> /home/times/gcc/gcc/../../gcc-3.2.3/gcc/unwind-pe.h:76: undefined reference to `abort'
> /usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3/libgcc.a(unwind-dw2-fde-glibc.o): In function `read_encoded_value_with_base':
> /home/times/gcc/gcc/../../gcc-3.2.3/gcc/unwind-pe.h:243: undefined reference to `abort'
> /usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3/libgcc.a(unwind-dw2-fde-glibc.o): In function `__register_frame':
> /home/times/gcc/gcc/../../gcc-3.2.3/gcc/unwind-dw2-fde.c:113: undefined reference to `malloc'
> /usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3/libgcc.a(unwind-dw2-fde-glibc.o): In function `__register_frame_table':
> /home/times/gcc/gcc/../../gcc-3.2.3/gcc/unwind-dw2-fde.c:151: undefined reference to `malloc'
> /usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3/libgcc.a(unwind-dw2-fde-glibc.o): In function `__deregister_frame_info_bases':
> /home/times/gcc/gcc/../../gcc-3.2.3/gcc/unwind-dw2-fde.c:210: undefined reference to `abort'
> /home/times/gcc/gcc/../../gcc-3.2.3/gcc/unwind-dw2-fde.c:195: undefined reference to `free'
> /usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3/libgcc.a(unwind-dw2-fde-glibc.o): In function `__deregister_frame':
> /home/times/gcc/gcc/../../gcc-3.2.3/gcc/unwind-dw2-fde.c:228: undefined reference to `free'
> /usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3/libgcc.a(unwind-dw2-fde-glibc.o): In function `base_from_object':
> /home/times/gcc/gcc/../../gcc-3.2.3/gcc/unwind-dw2-fde.c:253: undefined reference to `abort'
> /usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3/libgcc.a(unwind-dw2-fde-glibc.o): In function `get_cie_encoding':
> /home/times/gcc/gcc/../../gcc-3.2.3/gcc/unwind-dw2-fde.c:271: undefined reference to `strlen'
> /usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3/libgcc.a(unwind-dw2-fde-glibc.o): In function `init_object':
> /home/times/gcc/gcc/../../gcc-3.2.3/gcc/unwind-dw2-fde.c:582: undefined reference to `free'
> /home/times/gcc/gcc/../../gcc-3.2.3/gcc/unwind-dw2-fde.c:393: undefined reference to `malloc'
> /home/times/gcc/gcc/../../gcc-3.2.3/gcc/unwind-dw2-fde.c:396: undefined reference to `malloc'
> /home/times/gcc/gcc/../../gcc-3.2.3/gcc/unwind-dw2-fde.c:579: undefined reference to `abort'
> KEEP (*crtbegin.o(.dtors))
> KEEP (*(EXCLUDE_FILE (*crtend.o ) .dtors))
> KEEP (*(SORT(.dtors.*)))
> KEEP (*(.dtors))
> }
> .jcr : { KEEP (*(.jcr)) }
> .got : { *(.got.plt) *(.got) }
> _edata = .;
> PROVIDE (edata = .);
> __bss_start = .;
> .bss :
> {
> *(.dynbss) __start___libc_freeres_ptrs = .; *(__libc_freeres_ptrs) __stop___libc_freeres_ptrs = .;
> *(.bss .bss.* .gnu.linkonce.b.*)
> *(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(32 / 8);
> }
> . = ALIGN(32 / 8);
> _end = .;
> PROVIDE (end = .);
> . = DATA_SEGMENT_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 .gnu.linkonce.wi.*) }
> .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) }
> }
>
>
--
Daniel Jacobowitz
MontaVista Software Debian GNU/Linux Developer