| Index: tests/gdb/gdb_test_guest.c
|
| ===================================================================
|
| --- tests/gdb/gdb_test_guest.c (revision 9432)
|
| +++ tests/gdb/gdb_test_guest.c (working copy)
|
| @@ -6,8 +6,10 @@
|
|
|
| #include <assert.h>
|
| #include <string.h>
|
| +#include <alloca.h>
|
|
|
| int global_var;
|
| +volatile void *global_ptr;
|
|
|
| void test_two_line_function(int arg) {
|
| global_var = arg - 1;
|
| @@ -40,6 +42,18 @@
|
| return global_var;
|
| }
|
|
|
| +/* A function with non-trivial prolog. */
|
| +void test_step_from_function_start(int arg) {
|
| + int local_var = arg - 1;
|
| + global_var = local_var;
|
| + /*
|
| + * Force using frame pointer for this function by calling alloca.
|
| + * This allows to test skipping %esp modifying instructions when they
|
| + * are located in the middle of the function.
|
| + */
|
| + global_ptr = alloca(arg);
|
| +}
|
| +
|
| int main(int argc, char **argv) {
|
| assert(argc >= 2);
|
|
|
| @@ -58,5 +72,10 @@
|
| nested_calls(1);
|
| return 0;
|
| }
|
| + if (strcmp(argv[1], "step_from_func_start") == 0) {
|
| + global_var = 0;
|
| + test_step_from_function_start(2);
|
| + return 0;
|
| + }
|
| return 1;
|
| }
|
|
|