mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-07 12:44:45 +00:00
"Fix" (kludge) highly obscure bug in flag settings for growdown stacks
which manifested itself as unreliable behaviour with --smc-check=stack. The accompanying comment explains. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4305
This commit is contained in:
parent
7b67a1249d
commit
d71b68c6a3
@ -1728,6 +1728,24 @@ Bool VG_(extend_stack)(Addr addr, UInt maxsize)
|
||||
if (seg->len + newsize >= maxsize)
|
||||
return False;
|
||||
|
||||
/* Nasty Hack. The new segment will have SF_MMAP set because
|
||||
that's what VG_(mmap) does. But the existing stack segment
|
||||
won't necessarily have it set, because the initial segment list
|
||||
entry for the main thread's stack doesn't have it set. That
|
||||
means that the segment list preener won't merge the segments
|
||||
together (because they have different flags). That means the
|
||||
segment list will in fact list two adjacent segments for the
|
||||
main stack, which is wrong. This means that the tests which
|
||||
check if a translation is from a stack-like area and therefore
|
||||
in need of a self-check will not work right. Sigh.
|
||||
|
||||
So .. in lieu of fixing this properly (viz, rationalising all
|
||||
the SF_ flags), just mark the original stack segment as having
|
||||
SF_MMAP. Then the preener will merge it into the new area.
|
||||
This is a hack. */
|
||||
seg->flags |= SF_MMAP;
|
||||
/* end of Nasty Hack */
|
||||
|
||||
if (VG_(mmap)((Char *)base, newsize,
|
||||
seg->prot,
|
||||
VKI_MAP_PRIVATE | VKI_MAP_FIXED | VKI_MAP_ANONYMOUS | VKI_MAP_CLIENT,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user