On Mon, 2019-06-10 at 11:02 -0700, Dave Hansen wrote:
On 6/10/19 8:22 AM, Yu-cheng Yu wrote:
quoted
quoted
How does glibc know the linear address space size? We don’t want LA64 to
break old binaries because the address calculation changed.
When an application starts, its highest stack address is determined.
It uses that as the maximum the bitmap needs to cover.
Huh, I didn't think we ran code from the stack. ;)
Especially given the way that we implemented the new 5-level-paging
address space, I don't think that expecting code to be below the stack
is a good universal expectation.
Yes, you make a good point. However, allowing the application manage the bitmap
is the most efficient and flexible. If the loader finds a legacy lib is beyond
the bitmap can cover, it can deal with the problem by moving the lib to a lower
address; or re-allocate the bitmap. If the loader cannot allocate a big bitmap
to cover all 5-level address space (the bitmap will be large), it can put all
legacy lib's at lower address. We cannot do these easily in the kernel.
Yu-cheng