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: Help needed - defining the output section order


Hi Simon,

Sadly if I add my
  fpc.ressym    : { *(fpc.ressym) }
  fpc.resstr    : { *(fpc.resstr) }
  fpc.reshash   : { *(fpc.reshash) }
  fpc.resdata   : { *(fpc.resdata) }
  fpc.resspare  : { *(fpc.resspare) }
block to it, I'm back at "Not enough room for program headers
(allocated 5, need 6)". Darn ;)

Right, but now you have a single script which contains a big SECTIONS command which handles everything and to which you can add a PHDR command.


Creating the PHDRS command should not be too bad. Just take the linked executable with the fpc.* sections in the wrong place and run "readelf -l" on it. This should display the program headers for the executable. Now all you have to do is to translate this information into a PHDRS command and add an extra header.

Here's an example from running this command on my local system:

  $ readelf -l `which readelf`
Program Headers:
  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
  PHDR           0x000034 0x08048034 0x08048034 0x00100 0x00100 R E 0x4
  INTERP         0x000134 0x08048134 0x08048134 0x00013 0x00013 R   0x1
      [Requesting program interpreter: /lib/ld-linux.so.2]
  LOAD           0x000000 0x08048000 0x08048000 0x2fbdc 0x2fbdc R E 0x1000
  LOAD           0x02fbdc 0x08078bdc 0x08078bdc 0x005b8 0x01218 RW  0x1000
  DYNAMIC        0x02fbf0 0x08078bf0 0x08078bf0 0x000c8 0x000c8 RW  0x4
  NOTE           0x000148 0x08048148 0x08048148 0x00020 0x00020 R   0x4
  GNU_EH_FRAME   0x02fb64 0x08077b64 0x08077b64 0x0001c 0x0001c R   0x4
  GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x00000 RW  0x4

Which turns into:

PHDRS
{
  headers PT_PHDR PHDRS ;
  interp PT_INTERP ;
  text PT_LOAD FILEHDR ;
  data PT_LOAD ;
  dynamic PT_DYNAMIC ;
  note PT_NOTE ;
  gnu_eh_frame  0xa74e550 ;
  gnu_stack 0xa74e551 ;
  extra PT_LOAD ;
}

Note - I had to use numbers for the header types not supported by the linker script syntax. You will probably not need to do this.

You may then find that you need to add ":<phdr-name>" to various parts of the SECTIONS command, especially the fpc.* assignments. eg:

   fpc.ressym    : { *(fpc.ressym) } :extra
   fpc.resstr    : { *(fpc.resstr) } :extra
   fpc.reshash   : { *(fpc.reshash) } :extra
   fpc.resdata   : { *(fpc.resdata) } :extra
   fpc.resspare  : { *(fpc.resspare) } :extra

Cheers
  Nick


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