This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: Encoding page size in the ELF header
- From: Rich Felker <dalias at libc dot org>
- To: Carlos O'Donell <carlos at redhat dot com>
- Cc: Florian Weimer <fweimer at redhat dot com>, Roland McGrath <roland at hack dot frob dot com>, GNU C Library <libc-alpha at sourceware dot org>
- Date: Mon, 28 Sep 2015 12:45:13 -0400
- Subject: Re: Encoding page size in the ELF header
- Authentication-results: sourceware.org; auth=none
- References: <56054662 dot 2010106 at redhat dot com> <20150925195845 dot 3C6312C3B69 at topped-with-meat dot com> <560946D9 dot 6040303 at redhat dot com> <20150928142418 dot GY17773 at brightrain dot aerifal dot cx> <56096294 dot 9070201 at redhat dot com>
On Mon, Sep 28, 2015 at 11:53:56AM -0400, Carlos O'Donell wrote:
> > which makes it a "minimum alignment". The actual "maximum alignment"
> > is not p_align but rather:
> >
> > lcm { (ph[i].p_vaddr-ph[i].p_offset) - (ph[j].p_vaddr-ph[j].p_offset) }
> >
> > where i,j range over all PT_LOAD headers. With a larger page size you
> > cannot simultaneously satisfy the displacement constraints between
> > segments.
>
> Right.
>
> In summary:
>
> Roland's right, you could use p_align from the first PT_LOAD segment
> to guess the largest possible page alignment supported by the binary.
> It's not the truth though, you might support larger if the page alignment
> was a multiple of p_align. You might also support much smaller if you
> only have one PT_LOAD segment (Rich's lcm equation always being correct).
>
> Does any of this help you solve your problem? :-)
Actually I misspoke; page size has to divide all of the above, not be
divisible by them, so it should be gcd not lcm. :-)
Rich