This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: `.sym' referenced in section `reloc_sym' of file.o: defined in discarded section `.text.sym' of file.o


--- 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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]