1cda0c2cf073a7fba19e1fb2576446506894facbaphilippe#include <stdio.h> 2cda0c2cf073a7fba19e1fb2576446506894facbaphilippe 3cda0c2cf073a7fba19e1fb2576446506894facbaphilippe__attribute__((noinline)) void big(void) 4cda0c2cf073a7fba19e1fb2576446506894facbaphilippe{ 5cda0c2cf073a7fba19e1fb2576446506894facbaphilippe /* The below ensures the stack grows a lot. However, we hope the stack 6cda0c2cf073a7fba19e1fb2576446506894facbaphilippe extension is not done yet, as no memory has been read/written. */ 7cda0c2cf073a7fba19e1fb2576446506894facbaphilippe volatile char c[200000]; 8cda0c2cf073a7fba19e1fb2576446506894facbaphilippe 9cda0c2cf073a7fba19e1fb2576446506894facbaphilippe /* Access only the higher part of the stack, to avoid mapping SP */ 10cda0c2cf073a7fba19e1fb2576446506894facbaphilippe /* The below 2 printfs should produce deterministic output, whatever 11cda0c2cf073a7fba19e1fb2576446506894facbaphilippe the random value of c[]. */ 12cda0c2cf073a7fba19e1fb2576446506894facbaphilippe if (c[200000 - 1]) 13cda0c2cf073a7fba19e1fb2576446506894facbaphilippe fprintf(stderr, "Accessing fresh %s\n", "stack"); 14cda0c2cf073a7fba19e1fb2576446506894facbaphilippe else 15cda0c2cf073a7fba19e1fb2576446506894facbaphilippe fprintf(stderr, "Accessing %s stack\n", "fresh"); 16cda0c2cf073a7fba19e1fb2576446506894facbaphilippe 17cda0c2cf073a7fba19e1fb2576446506894facbaphilippe} 18cda0c2cf073a7fba19e1fb2576446506894facbaphilippe 19cda0c2cf073a7fba19e1fb2576446506894facbaphilippeint main(void ) 20cda0c2cf073a7fba19e1fb2576446506894facbaphilippe{ 21cda0c2cf073a7fba19e1fb2576446506894facbaphilippe big(); 22cda0c2cf073a7fba19e1fb2576446506894facbaphilippe return 0; 23cda0c2cf073a7fba19e1fb2576446506894facbaphilippe} 24