On Mon, 20 Apr 2009, Chris Friesen wrote:
For anonymous mappings, the older kernels put the starting address of the VMA
(from the point of view of the app) as the offset. Until the recent change,
new kernels still did this for most VMAs, but the stack offset was a 64-bit
value with no obvious relation to the VMA start address.
No, what they put there was something that in most cases matched the
starting address of the VMA; but try moving that VMA with mremap (and
an old /proc/<pid>/maps!) and you'll see that the "offset" remained
unchanged even when the starting address of the VMA was changed.
(The offset remaining constant so that rmap can locate the VMA's pages
and unmap them, despite their being mapped at different virtual
addresses in parent and child after a move in one of them.)
... so I think your app was indeed already broken, wasn't it?
It's also unclear why you'd want to use the offset field for the
starting address of the VMA, when /proc/<pid>/maps already shows
the starting address of the VMA. I think you've more to tell us!