diff options
-rw-r--r-- | gdb/ChangeLog | 8 | ||||
-rw-r--r-- | gdb/s390-tdep.c | 5 |
2 files changed, 12 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 9d9b6b1..60de94d 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,13 @@ 2003-07-02 Jim Blandy <jimb@redhat.com> + * s390-tdep.c (struct frame_extra_info): new member: + 'stack_bought_valid'. + (s390_get_frame_info): Set fextra_info->stack_bought_valid if we + initialize fextra_info->stack_bought. + (s390_frameless_function_invocation): Don't trust the value of + fextra_info_ptr->stack_bought unless + fextra_info->stack_bought_valid is set. + New S390 prologue analyzer. * s390-tdep.c (struct prologue_value, enum pv_boolean): New types. (pv_set_to_unknown, pv_set_to_constant, pv_set_to_register, diff --git a/gdb/s390-tdep.c b/gdb/s390-tdep.c index 69463ab..0f3bd41 100644 --- a/gdb/s390-tdep.c +++ b/gdb/s390-tdep.c @@ -113,6 +113,7 @@ struct frame_extra_info CORE_ADDR sig_fixed_saved_pc_valid; CORE_ADDR sig_fixed_saved_pc; CORE_ADDR frame_pointer_saved_pc; /* frame pointer needed for alloca */ + CORE_ADDR stack_bought_valid; CORE_ADDR stack_bought; /* amount we decrement the stack pointer by */ CORE_ADDR sigcontext; }; @@ -1392,6 +1393,7 @@ s390_get_frame_info (CORE_ADDR start_pc, if (frame_size != -1) { + fextra_info->stack_bought_valid = 1; fextra_info->stack_bought = frame_size; } @@ -1604,7 +1606,8 @@ s390_frameless_function_invocation (struct frame_info *fi) s390_get_frame_info (s390_sniff_pc_function_start (get_frame_pc (fi), fi), fextra_info_ptr, fi, 1); } - frameless = ((fextra_info_ptr->stack_bought == 0)); + frameless = (fextra_info_ptr->stack_bought_valid + && fextra_info_ptr->stack_bought == 0); } return frameless; |