From: Jim Blandy Date: Wed, 2 Jul 2003 19:20:55 +0000 (+0000) Subject: * s390-tdep.c (struct frame_extra_info): new member: X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a9dd42f1978d784aed979d58d51766af84c2f986;p=binutils-gdb.git * 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. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 9d9b6b12ce8..60de94dd36f 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,13 @@ 2003-07-02 Jim Blandy + * 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 69463ab83ca..0f3bd41f764 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;