aboutsummaryrefslogtreecommitdiff
path: root/gdb/target-delegates.c
diff options
context:
space:
mode:
authorAndrew Burgess <andrew.burgess@embecosm.com>2018-08-29 18:49:51 +0100
committerAndrew Burgess <andrew.burgess@embecosm.com>2018-08-30 16:33:49 +0100
commitc67f2e1518a829c4ae4f346c316701ef5d56a30f (patch)
tree632ff9a1f8a9ac701bab13bb93a2bfc874034961 /gdb/target-delegates.c
parenta0dc02a6df86011462293cc11b4e35c0f18effd0 (diff)
downloadgdb-c67f2e1518a829c4ae4f346c316701ef5d56a30f.zip
gdb-c67f2e1518a829c4ae4f346c316701ef5d56a30f.tar.gz
gdb-c67f2e1518a829c4ae4f346c316701ef5d56a30f.tar.bz2
gdb: Ensure compiler doesn't optimise variable out in test
In the test gdb.base/funcargs.exp, there's this function: void recurse (SVAL a, int depth) { a.s = a.i = a.l = --depth; if (depth == 0) hitbottom (); else recurse (a, depth); } The test script places a breakpoint in hitbottom, and runs the executable which calls recurse with an initial depth of 4. When GDB hits the breakpoint in hitbottom the testscript performs a backtrace, and examines 'a' at each level. The problem is that 'a' is not live after either the call to 'hitbottom' or the call to 'recurse', and as a result the test fails. In the particular case I was looking at GCC for RISC-V 32-bit, the variable 'a' is on the stack and GCC selects the register $ra (the return address register) to hold the pointer to 'a'. This is fine, because, by the time the $ra register is needed to hold a return address (calling hitbottom or recurse) then 'a' is dead. In this patch I propose that a use of 'a' is added after the calls to hitbottom and recurse, this should cause the compiler to keep 'a' around, which should ensure GDB can find it. gdb/testsuite/ChangeLog: * gdb.base/funcargs.c (use_a): New function. (recurse): Call use_a.
Diffstat (limited to 'gdb/target-delegates.c')
0 files changed, 0 insertions, 0 deletions