This is the mail archive of the binutils@sources.redhat.com 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: How do I prevent ld from merging PT_LOAD segments?


I've discovered that if I set the MAXPAGESIZE in the linker script to be the
same as the alignment of the PT_LOAD segment everything seems to fall back
into place.

Now my question becomes why did the alignment change from 4k to 32k?
 
> Ping.
> 
> Oh, I was wrong about sh4.  sh4 seems to work.  It's just our arm and ppc
> ports that are broken.
> 
> > In case it helps, here are two objdumps.  The first is of a correct
> binary
> > linked with the 2.10.1 linker.  The second is a bad binary linked with
> the
> > 2.12.1 linker.  Both were linked from the same object files and using
> the
> > same linker script.  I left off the symbol tables to keep this as short
> as
> > possible.
> >
> > portmap-good:     file format elf32-littlearm
> > portmap-good
> > architecture: arm, flags 0x00000112:
> > EXEC_P, HAS_SYMS, D_PAGED
> > start address 0x00100bcc
> >
> > Program Header:
> >     PHDR off    0x00000034 vaddr 0x00100034 paddr 0x00000000 align 2**2
> >          filesz 0x000000c0 memsz 0x000000c0 flags r-x
> >   INTERP off    0x000000f4 vaddr 0x001000f4 paddr 0x00000000 align 2**0
> >          filesz 0x00000014 memsz 0x00000014 flags r--
> >     LOAD off    0x00000000 vaddr 0x00100000 paddr 0x00100000 align 2**12
> >          filesz 0x00001cb0 memsz 0x00001cb0 flags r-x
> >     LOAD off    0x00001cb0 vaddr 0x00102cb0 paddr 0x00102cb0 align 2**12
> >          filesz 0x00000164 memsz 0x00000204 flags rw-
> >  DYNAMIC off    0x00001d7c vaddr 0x00102d7c paddr 0x00000000 align 2**2
> >          filesz 0x00000098 memsz 0x00000098 flags rw-
> >     NOTE off    0x00001e14 vaddr 0x00000000 paddr 0x00000000 align 2**2
> >          filesz 0x00000050 memsz 0x00000000 flags ---
> >
> > Dynamic Section:
> >   NEEDED      librpc.so.2
> >   NEEDED      libsocket.so.2
> >   NEEDED      libc.so.2
> >   INIT        0x100950
> >   FINI        0x101ca4
> >   HASH        0x100108
> >   STRTAB      0x1005f0
> >   SYMTAB      0x100280
> >   STRSZ       0x21f
> >   SYMENT      0x10
> >   DEBUG       0x0
> >   PLTGOT      0x102cd0
> >   PLTRELSZ    0x130
> >   PLTREL      0x11
> >   JMPREL      0x100820
> >   REL         0x100810
> >   RELSZ       0x10
> >   RELENT      0x8
> > private flags = 0: [interworking not enabled] [APCS-32] [floats passed
> in
> > integer registers] [absolute position]
> >
> > Sections:
> > Idx Name          Size      VMA       LMA       File off  Algn
> >   0 .interp       00000014  001000f4  001000f4  000000f4  2**0
> >                   CONTENTS, ALLOC, LOAD, READONLY, DATA
> >   1 .note         00000000  00100108  00100108  00000108  2**0
> >                   CONTENTS, ALLOC, LOAD, READONLY, DATA
> >   2 .hash         00000178  00100108  00100108  00000108  2**2
> >                   CONTENTS, ALLOC, LOAD, READONLY, DATA
> >   3 .dynsym       00000370  00100280  00100280  00000280  2**2
> >                   CONTENTS, ALLOC, LOAD, READONLY, DATA
> >   4 .dynstr       0000021f  001005f0  001005f0  000005f0  2**0
> >                   CONTENTS, ALLOC, LOAD, READONLY, DATA
> >   5 .rel.bss      00000010  00100810  00100810  00000810  2**2
> >                   CONTENTS, ALLOC, LOAD, READONLY, DATA
> >   6 .rel.plt      00000130  00100820  00100820  00000820  2**2
> >                   CONTENTS, ALLOC, LOAD, READONLY, DATA
> >   7 .init         0000000c  00100950  00100950  00000950  2**2
> >                   CONTENTS, ALLOC, LOAD, READONLY, CODE
> >   8 .plt          00000270  0010095c  0010095c  0000095c  2**2
> >                   CONTENTS, ALLOC, LOAD, READONLY, CODE
> >   9 .text         000010d8  00100bcc  00100bcc  00000bcc  2**2
> >                   CONTENTS, ALLOC, LOAD, READONLY, CODE
> >  10 .fini         0000000c  00101ca4  00101ca4  00001ca4  2**2
> >                   CONTENTS, ALLOC, LOAD, READONLY, CODE
> >  11 .data         00000010  00102cb0  00102cb0  00001cb0  2**2
> >                   CONTENTS, ALLOC, LOAD, DATA
> >  12 .ctors        00000008  00102cc0  00102cc0  00001cc0  2**2
> >                   CONTENTS, ALLOC, LOAD, DATA
> >  13 .dtors        00000008  00102cc8  00102cc8  00001cc8  2**2
> >                   CONTENTS, ALLOC, LOAD, DATA
> >  14 .got          000000ac  00102cd0  00102cd0  00001cd0  2**2
> >                   CONTENTS, ALLOC, LOAD, DATA
> >  15 .dynamic      00000098  00102d7c  00102d7c  00001d7c  2**2
> >                   CONTENTS, ALLOC, LOAD, DATA
> >  16 .bss          000000a0  00102e14  00102e14  00001e14  2**3
> >                   ALLOC
> >  17 QNX_usage     00000003  00000000  00000000  00002a6c  2**0
> >                   CONTENTS, READONLY
> >  18 QNX_info      000000a4  00000000  00000000  00002a6f  2**0
> >                   CONTENTS, READONLY
> >
> > =================================================================
> >
> > portmap:     file format elf32-littlearm
> > portmap
> > architecture: arm, flags 0x00000112:
> > EXEC_P, HAS_SYMS, D_PAGED
> > start address 0x00100b9c
> >
> > Program Header:
> >     PHDR off    0x00000034 vaddr 0x00100034 paddr 0x00100034 align 2**2
> >          filesz 0x000000c0 memsz 0x000000c0 flags r-x
> >   INTERP off    0x000000f4 vaddr 0x001000f4 paddr 0x001000f4 align 2**0
> >          filesz 0x00000014 memsz 0x00000014 flags r--
> >     LOAD off    0x00000000 vaddr 0x00100000 paddr 0x00100000 align 2**15
> >          filesz 0x00002e0c memsz 0x00002eac flags rwx
> >  DYNAMIC off    0x00002c90 vaddr 0x00102c90 paddr 0x00102c90 align 2**2
> >          filesz 0x000000c0 memsz 0x000000c0 flags rw-
> >     NOTE off    0x00000108 vaddr 0x00100108 paddr 0x00100108 align 2**0
> >          filesz 0x00000000 memsz 0x00000000 flags r--
> >
> > Dynamic Section:
> >   NEEDED      librpc.so.2
> >   NEEDED      libsocket.so.2
> >   NEEDED      libc.so.2
> >   INIT        0x100920
> >   FINI        0x101c74
> >   HASH        0x100108
> >   STRTAB      0x1005dc
> >   SYMTAB      0x10027c
> >   STRSZ       0x202
> >   SYMENT      0x10
> >   DEBUG       0x0
> >   PLTGOT      0x102d60
> >   PLTRELSZ    0x130
> >   PLTREL      0x11
> >   JMPREL      0x1007f0
> >   REL         0x1007e0
> >   RELSZ       0x10
> >   RELENT      0x8
> > private flags = 2: [interworking not enabled] [APCS-32] [floats passed
> in
> > integer registers] [absolute position]
> >
> > Sections:
> > Idx Name          Size      VMA       LMA       File off  Algn
> >   0 .interp       00000014  001000f4  001000f4  000000f4  2**0
> >                   CONTENTS, ALLOC, LOAD, READONLY, DATA
> >   1 .note         00000000  00100108  00100108  00000108  2**0
> >                   CONTENTS, ALLOC, LOAD, READONLY, DATA
> >   2 .hash         00000174  00100108  00100108  00000108  2**2
> >                   CONTENTS, ALLOC, LOAD, READONLY, DATA
> >   3 .dynsym       00000360  0010027c  0010027c  0000027c  2**2
> >                   CONTENTS, ALLOC, LOAD, READONLY, DATA
> >   4 .dynstr       00000202  001005dc  001005dc  000005dc  2**0
> >                   CONTENTS, ALLOC, LOAD, READONLY, DATA
> >   5 .rel.bss      00000010  001007e0  001007e0  000007e0  2**2
> >                   CONTENTS, ALLOC, LOAD, READONLY, DATA
> >   6 .rel.plt      00000130  001007f0  001007f0  000007f0  2**2
> >                   CONTENTS, ALLOC, LOAD, READONLY, DATA
> >   7 .init         0000000c  00100920  00100920  00000920  2**2
> >                   CONTENTS, ALLOC, LOAD, READONLY, CODE
> >   8 .plt          00000270  0010092c  0010092c  0000092c  2**2
> >                   CONTENTS, ALLOC, LOAD, READONLY, CODE
> >   9 .text         000010d8  00100b9c  00100b9c  00000b9c  2**2
> >                   CONTENTS, ALLOC, LOAD, READONLY, CODE
> >  10 .fini         0000000c  00101c74  00101c74  00001c74  2**2
> >                   CONTENTS, ALLOC, LOAD, READONLY, CODE
> >  11 .data         00000010  00102c80  00102c80  00002c80  2**2
> >                   CONTENTS, ALLOC, LOAD, DATA
> >  12 .dynamic      000000c0  00102c90  00102c90  00002c90  2**2
> >                   CONTENTS, ALLOC, LOAD, DATA
> >  13 .ctors        00000008  00102d50  00102d50  00002d50  2**2
> >                   CONTENTS, ALLOC, LOAD, DATA
> >  14 .dtors        00000008  00102d58  00102d58  00002d58  2**2
> >                   CONTENTS, ALLOC, LOAD, DATA
> >  15 .got          000000ac  00102d60  00102d60  00002d60  2**2
> >                   CONTENTS, ALLOC, LOAD, DATA
> >  16 .bss          000000a0  00102e0c  00102e0c  00002e0c  2**3
> >                   ALLOC
> >
> > > -----Original Message-----
> > > From: Jeff Baker [mailto:jbaker@qnx.com]
> > > Sent: July 7, 2003 4:08 PM
> > > To: 'binutils@sources.redhat.com'
> > > Subject: How do I prevent ld from merging PT_LOAD segments?
> > >
> > > We're currently in the process of moving from binutils-2.10.1 (Wow,
> > that's
> > > old) to binutils-2.12.1 (Wow, that's... not quite so old).  I've
> > observed
> > > a
> > > new behaviour that I've confirmed is also in the current head branch.
> > >
> > > The newer binutils (arm, ppc and sh4) seem to be merging two PT_LOAD
> > > segments into one (x86 and mips don't).  For various reasons we need
> to
> > > have
> > > both of these segments separate.
> > >
> > > My wild, uninformed theory is that this is the result of a new feature
> > > added
> > > after 2.10.1 that can be overridden somewhere in the linker scripts.
> > > Whether I'm correct or not, I don't know how to deal with this.  I
> would
> > > appreciate an explanation of this behaviour if someone is feeling
> > > benevolent
> > > enough to give me one.
> > >
> > > Thanks,
> > > Jeff


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