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: [PATCH 0/6] ld: Add "-z textonly" option to ELF linker


Hi,

On Tue, 14 Nov 2017, H.J. Lu wrote:

> > This is the result of the above problem, but it's not necessary.  Like in
> > a traditional two-LOAD-segment file, which also isn't larger than 2MB,
> > just because the page size is 2MB.  It achieves this by mapping the same
> > file bytes multiple times, and you could do the same.  E.g. for the file
> > above the better layout would be:
> >
> >   LOAD           0x000000 0x00000000 0x00000000 0x00200 0x00200 R   0x200000
> >   LOAD           0x000fd0 0x00200fd0 0x00200fd0 0x0002b 0x0002b R E 0x200000
> >   LOAD           0x001000 0x00201000 0x00201000 0x00058 0x00058 R   0x200000
> >   LOAD           0x001060 0x00401060 0x00401060 0x000a0 0x000a0 RW  0x200000
> >
> > But even then something is wrong: The RE and the second R page are both
> > mapped onto 0x0020xxxx, i.e. the same 2MB page, so can't have different
> > protections.  (You'd need 4k pages again, which defeats the whole purpose
> > of having 2MB pages in the file to start with).
> 
> You have found out yourself that it is impossible.

Well, as is the above makes not much sense.  It wants to stay at 2MB 
alignment but can't actually make use of it due to having protection 
changes within one 2MB page (from RE to R).  Hmm, which means the very 
introduction of GNU_RELRO already broke the whole 2MB pages optimization 
:-/ You're just increasing this detrimental effect to now also cause 
uselessly huge files.

Probably 4k pages should be default with "-z textonly"  Hmpf :(

> > Also this shows strangeness.  The second R and the RW page are both mapped
> > to 0x2xxx, the same 4k page, which can't have different protections.  Also
> > the offsets are somehow wrong.  The second R page starts at 0x1000 (in
> > file), and is 0x58 bytes long (memsize is 0x58 as well).  So the next
> > thing in file should start at 0x1060, not 0x1f80 (and should be mapped to
> > 0x3060, not 0x2f80).
> >
> 
> You need to look at the whole picture:

Ah, true, the GNU_RELRO segment covers the (eventually) read-only part of 
the RW segment.


Ciao,
Michael.


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