1734b805cb3af82ddd7d3ba22a0e22aba29b78305njn// This is a test for complicated stack traces. 2734b805cb3af82ddd7d3ba22a0e22aba29b78305njn// 3734b805cb3af82ddd7d3ba22a0e22aba29b78305njn// - In deep-A.vgtest, the stack trace is larger than the asked-for depth 4734b805cb3af82ddd7d3ba22a0e22aba29b78305njn// (12 vs. 8) so not all of the trace is shown. 5734b805cb3af82ddd7d3ba22a0e22aba29b78305njn// - In deep-B.vgtest, we have --alloc-fn=a6..a12, which means that get_XCon 6734b805cb3af82ddd7d3ba22a0e22aba29b78305njn// needs to redo the IP getting, because 7 functions get removed from the 7734b805cb3af82ddd7d3ba22a0e22aba29b78305njn// trace, which is more than the initial overestimate of 3. 8734b805cb3af82ddd7d3ba22a0e22aba29b78305njn// - In deep-C.vgtest, we have --alloc-fn=a3..a12, which means that get_XCon 9734b805cb3af82ddd7d3ba22a0e22aba29b78305njn// ends up with an empty stack trace after removing all the alloc-fns. 10734b805cb3af82ddd7d3ba22a0e22aba29b78305njn// It then redoes it. 11734b805cb3af82ddd7d3ba22a0e22aba29b78305njn// - In deep-D.vgtest, we have --alloc-fn=main..a12, which means we have a 12734b805cb3af82ddd7d3ba22a0e22aba29b78305njn// stack trace with a single "(below main)" entry. 13734b805cb3af82ddd7d3ba22a0e22aba29b78305njn 14734b805cb3af82ddd7d3ba22a0e22aba29b78305njn#include <stdlib.h> 15734b805cb3af82ddd7d3ba22a0e22aba29b78305njn 16734b805cb3af82ddd7d3ba22a0e22aba29b78305njnvoid a12(int n) { malloc(n); } 17734b805cb3af82ddd7d3ba22a0e22aba29b78305njnvoid a11(int n) { a12(n); } 18734b805cb3af82ddd7d3ba22a0e22aba29b78305njnvoid a10(int n) { a11(n); } 19734b805cb3af82ddd7d3ba22a0e22aba29b78305njnvoid a9 (int n) { a10(n); } 20734b805cb3af82ddd7d3ba22a0e22aba29b78305njnvoid a8 (int n) { a9 (n); } 21734b805cb3af82ddd7d3ba22a0e22aba29b78305njnvoid a7 (int n) { a8 (n); } 22734b805cb3af82ddd7d3ba22a0e22aba29b78305njnvoid a6 (int n) { a7 (n); } 23734b805cb3af82ddd7d3ba22a0e22aba29b78305njnvoid a5 (int n) { a6 (n); } 24734b805cb3af82ddd7d3ba22a0e22aba29b78305njnvoid a4 (int n) { a5 (n); } 25734b805cb3af82ddd7d3ba22a0e22aba29b78305njnvoid a3 (int n) { a4 (n); } 26734b805cb3af82ddd7d3ba22a0e22aba29b78305njnvoid a2 (int n) { a3 (n); } 27734b805cb3af82ddd7d3ba22a0e22aba29b78305njnvoid a1 (int n) { a2 (n); } 28734b805cb3af82ddd7d3ba22a0e22aba29b78305njn 29734b805cb3af82ddd7d3ba22a0e22aba29b78305njnint main(void) 30734b805cb3af82ddd7d3ba22a0e22aba29b78305njn{ 31734b805cb3af82ddd7d3ba22a0e22aba29b78305njn int i; 32734b805cb3af82ddd7d3ba22a0e22aba29b78305njn 33734b805cb3af82ddd7d3ba22a0e22aba29b78305njn // This one exceeds the default --depth. 34734b805cb3af82ddd7d3ba22a0e22aba29b78305njn for (i = 0; i < 10; i++) 35466ed6e1efeab3b32a30a9002622fb03c0686688njn a1(400); // divisible by 16 -- no slop 36734b805cb3af82ddd7d3ba22a0e22aba29b78305njn 37734b805cb3af82ddd7d3ba22a0e22aba29b78305njn return 0; 38734b805cb3af82ddd7d3ba22a0e22aba29b78305njn} 39