`.sym' referenced in section `reloc_sym' of file.o: defined in discarded section `.text.sym' of file.o
Etienne Lorrain
etienne_lorrain@yahoo.fr
Tue May 16 22:47:00 GMT 2006
--- Alan Modra <amodra@bigpond.net.au> wrote:
> On Tue, May 16, 2006 at 01:34:25PM +0200, Etienne Lorrain wrote:
> > My problem is when the function (for instance) linux_set_params is not used
> > at all in the link process, and is discarded because I am using GCC
> > -ffunction-sections and LD --gc-sections, it is still referenced in
> > ".section reloc_paramcode_section"
>
> What is special about reloc_paramcode_section? ie. How are you managing
> to confuse the linker into thinking the reference in that section is not
> a normal use, which should result in linux_set_params being kept?
>
> Do you have a small self-contained testcase?
I do not know what is special about reloc_paramcode_section, but I noticed
the message do not appear if --no-check-sections is not a parameter of ld !!!
No testcase from C, but from assembler, with two files:
etienne@cygne:~/projet/gujin$ cat vmlinuz.s
.code16gcc
.psize 0
.section reloc_xcode_section
.weak fptr_treat_gzip_name
fptr_treat_gzip_name: .long treat_gzip_name
.previous
.section .xcode.treat_gzip_name,"ax",@progbits
.p2align 1,,1
.globl treat_gzip_name
.type treat_gzip_name, @function
treat_gzip_name:
pushl %edi #
pushl %esi #
pushl %edx #
movl 16(%esp), %edx # ptr, ptr
cmpl $LOADER+4, LOADER+76 #, LOADER.curfileload
jne .L266 #,
.L266:
popl %eax #
popl %esi #
popl %edi #
lretw $4 #
.size treat_gzip_name, .-treat_gzip_name
etienne@cygne:~/projet/gujin$ cat boot.lnk
MEMORY { ram : ORIGIN = 0, LENGTH = 64K }
EXTERN(__ERROR)
SECTIONS {
.text 0 : AT (0) {
/* boot.o(SORT(.text_start*)) */
/* KEEP (boot.o(.text_start*)); */
*(.text*)
__sizeof_gujin_code_in_text = . ;
. = ALIGN (32) ;
_etext = . ;
} > ram = 0
.xcode 0 : AT(SIZEOF(.text)) {
/* boot.o (.xcode_start) */
/* KEEP (boot.o(.xcode_start)); */
*(.xcode*)
__sizeof_gujin_code_in_extra = . ;
. = ALIGN (32) ;
} > ram = 0
__sizeof_all_code = SIZEOF(.text) + SIZEOF(.xcode);
.xdata 0 : AT(__sizeof_all_code) {
/* gzlib.o(.xdata*) */
/* font.o(.xdata*) */
. = ALIGN (8);
__paramcode_start = .;
*(.paramcode*)
__sizeof_paramcode = . - __paramcode_start;
*(.xdata*)
. = ALIGN (32);
_exdata = . ;
__sizeof_xdata = . ;
} > ram = 0
.data 0 : AT(__sizeof_all_code + __sizeof_xdata) {
*(.fourKsegment*)
_srodata = . ;
reloc_text_start = . ;
*(reloc_text_section)
reloc_text_end = . ;
reloc_xcode_start = . ;
*(reloc_xcode_section)
reloc_xcode_end = . ;
*(reloc_paramcode_section)
*(.rodata.str1*)
*(.rodata*)
. = ALIGN (32) ;
_erodata = . ;
__sizeof_constants = _erodata - _srodata ;
_end = . ;
_sdata = . ;
*(.data)
. = ALIGN (32);
_sbss = . ;
__sizeof_inited_data = _sbss - _sdata ;
} > ram = 0
.bss ALIGN(0x10) (NOLOAD) : {
*(COMMON) *(.bss)
. = ALIGN (4);
_edata = . ;
} > ram = 0
__sizeof_zeroed_data = SIZEOF (.bss) ;
.note (NOLOAD) : {
*(.note)
}
.comment (NOLOAD) : {
*(.comment)
}
.stab (NOLOAD) : {
*(.stab)
}
.stabstr (NOLOAD) : {
*(.stabstr)
}
}
NOCROSSREFS (.text .xcode);
EXTERN (xcodeseg_never_call_address_zero);
xcodeseg = SIZEOF(.text) >> 4 ;
_extext = SIZEOF(.xcode);
xdataseg = __sizeof_all_code >> 4;
deltaseg = (__sizeof_all_code + SIZEOF(.xdata)) >> 4;
etienne@cygne:~/projet/gujin$ as vmlinuz.s -o vmlinuz.o
etienne@cygne:~/projet/gujin$ ld vmlinuz.o -Tboot.lnk --no-check-sections --gc-sections
-o boot.elf
ld: warning: no memory region specified for loadable section `.rel.dyn'
ld: boot.elf: warning: allocated section `.data' not in segment
`treat_gzip_name' referenced in section `reloc_xcode_section' of vmlinuz.o: defined in
discarded section `.xcode.treat_gzip_name' of vmlinuz.o
etienne@cygne:~/projet/gujin$ ld vmlinuz.o -Tboot.lnk --gc-sections -o boot.elf
ld: error: no memory region specified for loadable section `.rel.dyn'
etienne@cygne:~/projet/gujin$
I think I really need the --no-check-sections, because most of my segments start
at 0 and have a max size of 64 Kbytes, so addresses in code and data overlap...
> Alan Modra
> IBM OzLabs - Linux Technology Centre
Thanks,
Etienne.
___________________________________________________________________________
Faites de Yahoo! votre page d'accueil sur le web pour retrouver directement vos services préférés : vérifiez vos nouveaux mails, lancez vos recherches et suivez l'actualité en temps réel.
Rendez-vous sur http://fr.yahoo.com/set
More information about the Binutils
mailing list