mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-03 18:13:01 +00:00
ignoring accesses on the stack below SP. Serves as a more modern replacement for --workaround-gcc296-bugs, which is now deprecated. Fixes #360571. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@16073
40 lines
765 B
C
40 lines
765 B
C
|
|
#include <stdio.h>
|
|
|
|
|
|
#define COMPILER_BARRIER __asm__ __volatile("":::"cc","memory")
|
|
|
|
/* force the kernel to map in 15k below SP, so we can safely poke
|
|
around there. */
|
|
__attribute__((noinline)) void make_below_sp_safe ( void )
|
|
{
|
|
const int N = 15000;
|
|
unsigned char a[N];
|
|
int i;
|
|
|
|
for (i = 0; i < N; i++) {
|
|
a[i] = i & 0xFF;
|
|
}
|
|
|
|
COMPILER_BARRIER;
|
|
|
|
unsigned int r = 0;
|
|
for (i = 0; i < N; i++) {
|
|
r = (r << 1) | (r >> 31);
|
|
r ^= (unsigned int)a[i];
|
|
}
|
|
fprintf(stderr, "Checksum: %08x\n", r);
|
|
}
|
|
|
|
|
|
int main ( void )
|
|
{
|
|
make_below_sp_safe();
|
|
|
|
unsigned int res;
|
|
__asm__ __volatile__("movl -8192(%%rsp), %0"
|
|
: "=r"(res) : : "memory","cc");
|
|
fprintf(stderr, "Got %08x\n", res);
|
|
return 0;
|
|
}
|