From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 114345 invoked by alias); 26 May 2015 12:36:57 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 114332 invoked by uid 89); 26 May 2015 12:36:57 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.8 required=5.0 tests=AWL,BAYES_00,NO_DNS_FOR_FROM autolearn=no version=3.3.2 X-HELO: mail-lb0-f177.google.com Received: from mail-lb0-f177.google.com (HELO mail-lb0-f177.google.com) (209.85.217.177) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Tue, 26 May 2015 12:36:28 +0000 Received: by lbbzk7 with SMTP id zk7so69382464lbb.0 for ; Tue, 26 May 2015 05:36:24 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc:content-type:content-transfer-encoding; bh=HGMwQmxJisKuNIu9IZykZklKQQcTCFM3ysfvpC2ryzk=; b=CYSbh+2w3dVfyzjNpIXJq7+FTWC6w+jbrWZnR+lh9f0V7hVa2G/Ws9BzUh+LZjmSB0 KytSeaB+DXy3Gxy4knf7NzNkcOYFtR7ZIjnxuaL3kEwhGvEfT42tt5SE3JTOI60Nn0Fm CxMq7B/FBG3WGuIy1r9To+tiaT/oH/GE5LNWxq+t11/HtMx4YtX1T/tyZ/7UO6MZP2G2 rVHisOKH43pW2jFDScTxWgUBUmmWlsWifdkFlUwnYC45wpIXyQ3kd2nRsxhS3MG6rVSL /46Q3i8qVcsUQPzLTdRjibMEClEbFEyoAzJ9vHjciRWAFkbZFVmI1c3kBJCU7pTJqtBz afnw== X-Gm-Message-State: ALoCoQn+SUQorwCJfkA+4jxOC2RMuIPwD5Svr2bcPI2u1LjmizD1/4LkjAObGlMzQdkACaXG8Enn X-Received: by 10.152.120.135 with SMTP id lc7mr14848792lab.107.1432643784233; Tue, 26 May 2015 05:36:24 -0700 (PDT) MIME-Version: 1.0 Received: by 10.112.144.200 with HTTP; Tue, 26 May 2015 05:35:43 -0700 (PDT) In-Reply-To: <86pp5nr41x.fsf@gmail.com> References: <1432341054-12148-1-git-send-email-martin.galvan@tallertechnologies.com> <86pp5nr41x.fsf@gmail.com> From: Martin Galvan Date: Tue, 26 May 2015 12:36:00 -0000 Message-ID: Subject: Re: [PATCH v2] Rename in_function_epilogue_p to stack_frame_destroyed_p To: Yao Qi Cc: gdb-patches , Pedro Alves , Daniel Gutson Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-SW-Source: 2015-05/txt/msg00636.txt.bz2 Thanks a lot, Yao! Yes, I have a couple more patches on the works. I'll see if I can get a "commit after approval" access; Doug Evans suggested the same on a previous patch. Again, thanks a lot for reviewing this. On Tue, May 26, 2015 at 8:06 AM, Yao Qi wrote: > Martin Galvan writes: > >> * Changes in v2: Re-created the patch from the current sources and rewro= te >> some comments. > > Hi Martin, > Thanks a lot for doing this .... > >> >> I have a company-wide copyright assignment for gdb. I don't have write >> access > > Yes, I checked /gd/gnuorg/copyright.list and your assignment is there. > >> though, so it would be great if someone could commit this for me. > > The patch is OK to me except for some minor things in changelog entry > and comment style. I point them out here. I fix them in the patch > below and will push it in. If you have GDB patches to contribute in the > future, you can apply for an account on sourceware.org. > >> >> gdb/ >> 2015-05-22 Martin Galvan >> >> * amd64-tdep.c: Replace in_function_epilogue_p with >> stack_frame_destroyed_p throughout. >> * arch-utils.c: Ditto. >> * arch-utils.h: Ditto. >> * arm-tdep.c: Ditto. >> * breakpoint.c: Ditto. >> * gdbarch.c: Ditto. >> * gdbarch.h: Ditto. >> * gdbarch.sh: Ditto. > > gdbarch.c and gdbarch.h is re-generated by changed gdbarsh.sh, so we > usually describe the changes in this way: > > * gdbarch.c, gdbarch.h: Re-generated. > >> diff --git a/gdb/score-tdep.c b/gdb/score-tdep.c >> index 9cd5038..7ba3a61 100644 >> --- a/gdb/score-tdep.c >> +++ b/gdb/score-tdep.c >> @@ -737,8 +737,9 @@ score3_skip_prologue (struct gdbarch *gdbarch, CORE_= ADDR pc) >> return pc; >> } >> >> +/* Implement the stack_frame_destroyed_p gdbarch method. */ > > A blank line is needed here. > >> static int >> -score7_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR cur_p= c) >> +score7_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR cur_= pc) >> { >> inst_t *inst =3D score7_fetch_inst (gdbarch, cur_pc, NULL); >> >> @@ -761,8 +762,9 @@ score7_in_function_epilogue_p (struct gdbarch *gdbar= ch, CORE_ADDR cur_pc) >> return 0; >> } >> >> +/* Implement the stack_frame_destroyed_p gdbarch method. */ > > Likewise. > > I rebuild GDB with --enable-targets=3Dall --enable-64-bit-bfd. I'll push > it in soon. > > -- > Yao (=E9=BD=90=E5=B0=A7) > > From: Martin Galvan > Date: Tue, 26 May 2015 11:59:17 +0100 > Subject: [PATCH] Rename in_function_epilogue_p to stack_frame_destroyed_p > > We concluded that gdbarch_in_function_epilogue_p is misnamed, since it > returns true if the given PC is one instruction after the one that > destroyed the stack (which isn't necessarily inside an epilogue), > therefore it should be renamed to stack_frame_destroyed_p. > > I also took the liberty of renaming the arch-specific implementations to > *_stack_frame_destroyed_p as well for consistency. > > gdb: > > 2015-05-26 Martin Galvan > > * amd64-tdep.c: Replace in_function_epilogue_p with > stack_frame_destroyed_p throughout. > * arch-utils.c: Ditto. > * arch-utils.h: Ditto. > * arm-tdep.c: Ditto. > * breakpoint.c: Ditto. > * gdbarch.sh: Ditto. > * hppa-tdep.c: Ditto. > * i386-tdep.c: Ditto. > * mips-tdep.c: Ditto. > * nios2-tdep.c: Ditto. > * rs6000-tdep.c: Ditto. > * s390-linux-tdep.c: Ditto. > * score-tdep.c: Ditto. > * sh-tdep.c: Ditto. > * sparc-tdep.c: Ditto. > * sparc-tdep.h: Ditto. > * sparc64-tdep.c: Ditto. > * spu-tdep.c: Ditto. > * tic6x-tdep.c: Ditto. > * tilegx-tdep.c: Ditto. > * xstormy16-tdep.c: Ditto. > * gdbarch.c, gdbarch.h: Re-generated. > > diff --git a/gdb/amd64-tdep.c b/gdb/amd64-tdep.c > index 461b701..5e63b5e 100644 > --- a/gdb/amd64-tdep.c > +++ b/gdb/amd64-tdep.c > @@ -2719,12 +2719,14 @@ static const struct frame_base amd64_frame_base = =3D > > /* Normal frames, but in a function epilogue. */ > > -/* The epilogue is defined here as the 'ret' instruction, which will > +/* Implement the stack_frame_destroyed_p gdbarch method. > + > + The epilogue is defined here as the 'ret' instruction, which will > follow any instruction such as 'leave' or 'pop %ebp' that destroys > the function's stack frame. */ > > static int > -amd64_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc) > +amd64_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc) > { > gdb_byte insn; > struct compunit_symtab *cust; > @@ -2748,8 +2750,8 @@ amd64_epilogue_frame_sniffer (const struct frame_un= wind *self, > void **this_prologue_cache) > { > if (frame_relative_level (this_frame) =3D=3D 0) > - return amd64_in_function_epilogue_p (get_frame_arch (this_frame), > - get_frame_pc (this_frame)); > + return amd64_stack_frame_destroyed_p (get_frame_arch (this_frame), > + get_frame_pc (this_frame)); > else > return 0; > } > diff --git a/gdb/arch-utils.c b/gdb/arch-utils.c > index e1c8ab0..8c3eb7c 100644 > --- a/gdb/arch-utils.c > +++ b/gdb/arch-utils.c > @@ -127,7 +127,7 @@ generic_in_solib_return_trampoline (struct gdbarch *g= dbarch, > } > > int > -generic_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc) > +generic_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc) > { > return 0; > } > diff --git a/gdb/arch-utils.h b/gdb/arch-utils.h > index ed3bec9..1be323b 100644 > --- a/gdb/arch-utils.h > +++ b/gdb/arch-utils.h > @@ -104,8 +104,8 @@ extern CORE_ADDR generic_skip_solib_resolver (struct = gdbarch *gdbarch, > extern int generic_in_solib_return_trampoline (struct gdbarch *gdbarch, > CORE_ADDR pc, const char *= name); > > -extern int generic_in_function_epilogue_p (struct gdbarch *gdbarch, > - CORE_ADDR pc); > +extern int generic_stack_frame_destroyed_p (struct gdbarch *gdbarch, > + CORE_ADDR pc); > > /* By default, registers are not convertible. */ > extern int generic_convert_register_p (struct gdbarch *gdbarch, int regn= um, > diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c > index 8181f25..638855b 100644 > --- a/gdb/arm-tdep.c > +++ b/gdb/arm-tdep.c > @@ -3223,11 +3223,10 @@ arm_dwarf2_frame_init_reg (struct gdbarch *gdbarc= h, int regnum, > } > } > > -/* Return true if we are in the function's epilogue, i.e. after the > - instruction that destroyed the function's stack frame. */ > +/* Implement the stack_frame_destroyed_p gdbarch method. */ > > static int > -thumb_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc) > +thumb_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc) > { > enum bfd_endian byte_order_for_code =3D gdbarch_byte_order_for_code (g= dbarch); > unsigned int insn, insn2; > @@ -3334,11 +3333,10 @@ thumb_in_function_epilogue_p (struct gdbarch *gdb= arch, CORE_ADDR pc) > return found_stack_adjust; > } > > -/* Return true if we are in the function's epilogue, i.e. after the > - instruction that destroyed the function's stack frame. */ > +/* Implement the stack_frame_destroyed_p gdbarch method. */ > > static int > -arm_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc) > +arm_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc) > { > enum bfd_endian byte_order_for_code =3D gdbarch_byte_order_for_code (g= dbarch); > unsigned int insn; > @@ -3346,7 +3344,7 @@ arm_in_function_epilogue_p (struct gdbarch *gdbarch= , CORE_ADDR pc) > CORE_ADDR func_start, func_end; > > if (arm_pc_is_thumb (gdbarch, pc)) > - return thumb_in_function_epilogue_p (gdbarch, pc); > + return thumb_stack_frame_destroyed_p (gdbarch, pc); > > if (!find_pc_partial_function (pc, NULL, &func_start, &func_end)) > return 0; > @@ -10356,8 +10354,8 @@ arm_gdbarch_init (struct gdbarch_info info, struc= t gdbarch_list *arches) > /* Advance PC across function entry code. */ > set_gdbarch_skip_prologue (gdbarch, arm_skip_prologue); > > - /* Detect whether PC is in function epilogue. */ > - set_gdbarch_in_function_epilogue_p (gdbarch, arm_in_function_epilogue_= p); > + /* Detect whether PC is at a point where the stack has been destroyed.= */ > + set_gdbarch_stack_frame_destroyed_p (gdbarch, arm_stack_frame_destroye= d_p); > > /* Skip trampolines. */ > set_gdbarch_skip_trampoline_code (gdbarch, arm_skip_stub); > diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c > index a3531a0..657c58e 100644 > --- a/gdb/breakpoint.c > +++ b/gdb/breakpoint.c > @@ -1837,10 +1837,11 @@ update_watchpoint (struct watchpoint *b, int repa= rse) > struct gdbarch *frame_arch =3D get_frame_arch (fi); > CORE_ADDR frame_pc =3D get_frame_pc (fi); > > - /* If we're in a function epilogue, unwinding may not work > - properly, so do not attempt to recreate locations at this > + /* If we're at a point where the stack has been destroyed > + (e.g. in a function epilogue), unwinding may not work > + properly. Do not attempt to recreate locations at this > point. See similar comments in watchpoint_check. */ > - if (gdbarch_in_function_epilogue_p (frame_arch, frame_pc)) > + if (gdbarch_stack_frame_destroyed_p (frame_arch, frame_pc)) > return; > > /* Save the current frame's ID so we can restore it after > @@ -5037,7 +5038,7 @@ watchpoint_check (void *p) > struct gdbarch *frame_arch =3D get_frame_arch (frame); > CORE_ADDR frame_pc =3D get_frame_pc (frame); > > - /* in_function_epilogue_p() returns a non-zero value if we're > + /* stack_frame_destroyed_p() returns a non-zero value if we're > still in the function but the stack frame has already been > invalidated. Since we can't rely on the values of local > variables after the stack has been destroyed, we are treating > @@ -5046,7 +5047,7 @@ watchpoint_check (void *p) > frame is in an epilogue - even if they are in some other > frame, our view of the stack is likely to be wrong and > frame_find_by_id could error out. */ > - if (gdbarch_in_function_epilogue_p (frame_arch, frame_pc)) > + if (gdbarch_stack_frame_destroyed_p (frame_arch, frame_pc)) > return WP_IGNORE; > > fr =3D frame_find_by_id (b->watchpoint_frame); > diff --git a/gdb/gdbarch.c b/gdb/gdbarch.c > index 97874c9..821ad5e 100644 > --- a/gdb/gdbarch.c > +++ b/gdb/gdbarch.c > @@ -249,7 +249,7 @@ struct gdbarch > gdbarch_skip_trampoline_code_ftype *skip_trampoline_code; > gdbarch_skip_solib_resolver_ftype *skip_solib_resolver; > gdbarch_in_solib_return_trampoline_ftype *in_solib_return_trampoline; > - gdbarch_in_function_epilogue_p_ftype *in_function_epilogue_p; > + gdbarch_stack_frame_destroyed_p_ftype *stack_frame_destroyed_p; > gdbarch_elf_make_msymbol_special_ftype *elf_make_msymbol_special; > gdbarch_coff_make_msymbol_special_ftype *coff_make_msymbol_special; > gdbarch_make_symbol_special_ftype *make_symbol_special; > @@ -402,7 +402,7 @@ gdbarch_alloc (const struct gdbarch_info *info, > gdbarch->skip_trampoline_code =3D generic_skip_trampoline_code; > gdbarch->skip_solib_resolver =3D generic_skip_solib_resolver; > gdbarch->in_solib_return_trampoline =3D generic_in_solib_return_trampo= line; > - gdbarch->in_function_epilogue_p =3D generic_in_function_epilogue_p; > + gdbarch->stack_frame_destroyed_p =3D generic_stack_frame_destroyed_p; > gdbarch->coff_make_msymbol_special =3D default_coff_make_msymbol_speci= al; > gdbarch->make_symbol_special =3D default_make_symbol_special; > gdbarch->adjust_dwarf2_addr =3D default_adjust_dwarf2_addr; > @@ -580,7 +580,7 @@ verify_gdbarch (struct gdbarch *gdbarch) > /* Skip verify of skip_trampoline_code, invalid_p =3D=3D 0 */ > /* Skip verify of skip_solib_resolver, invalid_p =3D=3D 0 */ > /* Skip verify of in_solib_return_trampoline, invalid_p =3D=3D 0 */ > - /* Skip verify of in_function_epilogue_p, invalid_p =3D=3D 0 */ > + /* Skip verify of stack_frame_destroyed_p, invalid_p =3D=3D 0 */ > /* Skip verify of elf_make_msymbol_special, has predicate. */ > /* Skip verify of coff_make_msymbol_special, invalid_p =3D=3D 0 */ > /* Skip verify of make_symbol_special, invalid_p =3D=3D 0 */ > @@ -1020,8 +1020,8 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_fi= le *file) > "gdbarch_dump: have_nonsteppable_watchpoint =3D %s= \n", > plongest (gdbarch->have_nonsteppable_watchpoint)); > fprintf_unfiltered (file, > - "gdbarch_dump: in_function_epilogue_p =3D <%s>\n", > - host_address_to_string (gdbarch->in_function_epilo= gue_p)); > + "gdbarch_dump: stack_frame_destroyed_p =3D <%s>\n", > + host_address_to_string (gdbarch->stack_frame_destr= oyed_p)); > fprintf_unfiltered (file, > "gdbarch_dump: in_solib_return_trampoline =3D <%s>= \n", > host_address_to_string (gdbarch->in_solib_return_t= rampoline)); > @@ -3110,20 +3110,20 @@ set_gdbarch_in_solib_return_trampoline (struct gd= barch *gdbarch, > } > > int > -gdbarch_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR addr) > +gdbarch_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR addr) > { > gdb_assert (gdbarch !=3D NULL); > - gdb_assert (gdbarch->in_function_epilogue_p !=3D NULL); > + gdb_assert (gdbarch->stack_frame_destroyed_p !=3D NULL); > if (gdbarch_debug >=3D 2) > - fprintf_unfiltered (gdb_stdlog, "gdbarch_in_function_epilogue_p call= ed\n"); > - return gdbarch->in_function_epilogue_p (gdbarch, addr); > + fprintf_unfiltered (gdb_stdlog, "gdbarch_stack_frame_destroyed_p cal= led\n"); > + return gdbarch->stack_frame_destroyed_p (gdbarch, addr); > } > > void > -set_gdbarch_in_function_epilogue_p (struct gdbarch *gdbarch, > - gdbarch_in_function_epilogue_p_ftype= in_function_epilogue_p) > +set_gdbarch_stack_frame_destroyed_p (struct gdbarch *gdbarch, > + gdbarch_stack_frame_destroyed_p_fty= pe stack_frame_destroyed_p) > { > - gdbarch->in_function_epilogue_p =3D in_function_epilogue_p; > + gdbarch->stack_frame_destroyed_p =3D stack_frame_destroyed_p; > } > > int > diff --git a/gdb/gdbarch.h b/gdb/gdbarch.h > index c94c19c..6f9e844 100644 > --- a/gdb/gdbarch.h > +++ b/gdb/gdbarch.h > @@ -685,7 +685,7 @@ extern void set_gdbarch_in_solib_return_trampoline (s= truct gdbarch *gdbarch, gdb > > /* A target might have problems with watchpoints as soon as the stack > frame of the current function has been destroyed. This mostly happens > - as the first action in a funtion's epilogue. in_function_epilogue_p() > + as the first action in a function's epilogue. stack_frame_destroyed_= p() > is defined to return a non-zero value if either the given addr is one > instruction after the stack destroying instruction up to the trailing > return instruction or if we can figure out that the stack frame has > @@ -693,9 +693,9 @@ extern void set_gdbarch_in_solib_return_trampoline (s= truct gdbarch *gdbarch, gdb > which don't suffer from that problem could just let this functionality > untouched. */ > > -typedef int (gdbarch_in_function_epilogue_p_ftype) (struct gdbarch *gdba= rch, CORE_ADDR addr); > -extern int gdbarch_in_function_epilogue_p (struct gdbarch *gdbarch, CORE= _ADDR addr); > -extern void set_gdbarch_in_function_epilogue_p (struct gdbarch *gdbarch,= gdbarch_in_function_epilogue_p_ftype *in_function_epilogue_p); > +typedef int (gdbarch_stack_frame_destroyed_p_ftype) (struct gdbarch *gdb= arch, CORE_ADDR addr); > +extern int gdbarch_stack_frame_destroyed_p (struct gdbarch *gdbarch, COR= E_ADDR addr); > +extern void set_gdbarch_stack_frame_destroyed_p (struct gdbarch *gdbarch= , gdbarch_stack_frame_destroyed_p_ftype *stack_frame_destroyed_p); > > /* Process an ELF symbol in the minimal symbol table in a backend-specif= ic > way. Normally this hook is supposed to do nothing, however if requir= ed, > diff --git a/gdb/gdbarch.sh b/gdb/gdbarch.sh > index 0f303a4..668e3eb 100755 > --- a/gdb/gdbarch.sh > +++ b/gdb/gdbarch.sh > @@ -627,14 +627,14 @@ m:int:in_solib_return_trampoline:CORE_ADDR pc, cons= t char *name:pc, name::generi > > # A target might have problems with watchpoints as soon as the stack > # frame of the current function has been destroyed. This mostly happens > -# as the first action in a funtion's epilogue. in_function_epilogue_p() > +# as the first action in a function's epilogue. stack_frame_destroyed_p= () > # is defined to return a non-zero value if either the given addr is one > # instruction after the stack destroying instruction up to the trailing > # return instruction or if we can figure out that the stack frame has > # already been invalidated regardless of the value of addr. Targets > # which don't suffer from that problem could just let this functionality > # untouched. > -m:int:in_function_epilogue_p:CORE_ADDR addr:addr:0:generic_in_function_e= pilogue_p::0 > +m:int:stack_frame_destroyed_p:CORE_ADDR addr:addr:0:generic_stack_frame_= destroyed_p::0 > # Process an ELF symbol in the minimal symbol table in a backend-specific > # way. Normally this hook is supposed to do nothing, however if require= d, > # then this hook can be used to apply tranformations to symbols that are > diff --git a/gdb/hppa-tdep.c b/gdb/hppa-tdep.c > index 8964ec0..01a7c80 100644 > --- a/gdb/hppa-tdep.c > +++ b/gdb/hppa-tdep.c > @@ -560,13 +560,16 @@ find_unwind_entry (CORE_ADDR pc) > return NULL; > } > > -/* The epilogue is defined here as the area either on the `bv' instructi= on > +/* Implement the stack_frame_destroyed_p gdbarch method. > + > + The epilogue is defined here as the area either on the `bv' instructi= on > itself or an instruction which destroys the function's stack frame. > > We do not assume that the epilogue is at the end of a function as we = can > also have return sequences in the middle of a function. */ > + > static int > -hppa_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc) > +hppa_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc) > { > enum bfd_endian byte_order =3D gdbarch_byte_order (gdbarch); > unsigned long status; > @@ -3135,8 +3138,8 @@ hppa_gdbarch_init (struct gdbarch_info info, struct= gdbarch_list *arches) > /* The following gdbarch vector elements do not depend on the address > size, or in any other gdbarch element previously set. */ > set_gdbarch_skip_prologue (gdbarch, hppa_skip_prologue); > - set_gdbarch_in_function_epilogue_p (gdbarch, > - hppa_in_function_epilogue_p); > + set_gdbarch_stack_frame_destroyed_p (gdbarch, > + hppa_stack_frame_destroyed_p); > set_gdbarch_inner_than (gdbarch, core_addr_greaterthan); > set_gdbarch_sp_regnum (gdbarch, HPPA_SP_REGNUM); > set_gdbarch_fp0_regnum (gdbarch, HPPA_FP0_REGNUM); > diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c > index 0c7eb5a..b4ffe1b 100644 > --- a/gdb/i386-tdep.c > +++ b/gdb/i386-tdep.c > @@ -2178,12 +2178,14 @@ static const struct frame_unwind i386_frame_unwin= d =3D > > /* Normal frames, but in a function epilogue. */ > > -/* The epilogue is defined here as the 'ret' instruction, which will > +/* Implement the stack_frame_destroyed_p gdbarch method. > + > + The epilogue is defined here as the 'ret' instruction, which will > follow any instruction such as 'leave' or 'pop %ebp' that destroys > the function's stack frame. */ > > static int > -i386_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc) > +i386_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc) > { > gdb_byte insn; > struct compunit_symtab *cust; > @@ -2207,8 +2209,8 @@ i386_epilogue_frame_sniffer (const struct frame_unw= ind *self, > void **this_prologue_cache) > { > if (frame_relative_level (this_frame) =3D=3D 0) > - return i386_in_function_epilogue_p (get_frame_arch (this_frame), > - get_frame_pc (this_frame)); > + return i386_stack_frame_destroyed_p (get_frame_arch (this_frame), > + get_frame_pc (this_frame)); > else > return 0; > } > diff --git a/gdb/mips-tdep.c b/gdb/mips-tdep.c > index 6e8ccd6..e0706db 100644 > --- a/gdb/mips-tdep.c > +++ b/gdb/mips-tdep.c > @@ -6693,10 +6693,11 @@ mips_skip_prologue (struct gdbarch *gdbarch, CORE= _ADDR pc) > return mips32_scan_prologue (gdbarch, pc, limit_pc, NULL, NULL); > } > > -/* Check whether the PC is in a function epilogue (32-bit version). > - This is a helper function for mips_in_function_epilogue_p. */ > +/* Implement the stack_frame_destroyed_p gdbarch method (32-bit version). > + This is a helper function for mips_stack_frame_destroyed_p. */ > + > static int > -mips32_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc) > +mips32_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc) > { > CORE_ADDR func_addr =3D 0, func_end =3D 0; > > @@ -6731,11 +6732,11 @@ mips32_in_function_epilogue_p (struct gdbarch *gd= barch, CORE_ADDR pc) > return 0; > } > > -/* Check whether the PC is in a function epilogue (microMIPS version). > - This is a helper function for mips_in_function_epilogue_p. */ > +/* Implement the stack_frame_destroyed_p gdbarch method (microMIPS versi= on). > + This is a helper function for mips_stack_frame_destroyed_p. */ > > static int > -micromips_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc) > +micromips_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc) > { > CORE_ADDR func_addr =3D 0; > CORE_ADDR func_end =3D 0; > @@ -6832,10 +6833,11 @@ micromips_in_function_epilogue_p (struct gdbarch = *gdbarch, CORE_ADDR pc) > return 1; > } > > -/* Check whether the PC is in a function epilogue (16-bit version). > - This is a helper function for mips_in_function_epilogue_p. */ > +/* Implement the stack_frame_destroyed_p gdbarch method (16-bit version). > + This is a helper function for mips_stack_frame_destroyed_p. */ > + > static int > -mips16_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc) > +mips16_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc) > { > CORE_ADDR func_addr =3D 0, func_end =3D 0; > > @@ -6872,17 +6874,20 @@ mips16_in_function_epilogue_p (struct gdbarch *gd= barch, CORE_ADDR pc) > return 0; > } > > -/* The epilogue is defined here as the area at the end of a function, > +/* Implement the stack_frame_destroyed_p gdbarch method. > + > + The epilogue is defined here as the area at the end of a function, > after an instruction which destroys the function's stack frame. */ > + > static int > -mips_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc) > +mips_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc) > { > if (mips_pc_is_mips16 (gdbarch, pc)) > - return mips16_in_function_epilogue_p (gdbarch, pc); > + return mips16_stack_frame_destroyed_p (gdbarch, pc); > else if (mips_pc_is_micromips (gdbarch, pc)) > - return micromips_in_function_epilogue_p (gdbarch, pc); > + return micromips_stack_frame_destroyed_p (gdbarch, pc); > else > - return mips32_in_function_epilogue_p (gdbarch, pc); > + return mips32_stack_frame_destroyed_p (gdbarch, pc); > } > > /* Root of all "set mips "/"show mips " commands. This will eventually = be > @@ -8843,7 +8848,7 @@ mips_gdbarch_init (struct gdbarch_info info, struct= gdbarch_list *arches) > > set_gdbarch_skip_prologue (gdbarch, mips_skip_prologue); > > - set_gdbarch_in_function_epilogue_p (gdbarch, mips_in_function_epilogue= _p); > + set_gdbarch_stack_frame_destroyed_p (gdbarch, mips_stack_frame_destroy= ed_p); > > set_gdbarch_pointer_to_address (gdbarch, signed_pointer_to_address); > set_gdbarch_address_to_pointer (gdbarch, address_to_signed_pointer); > diff --git a/gdb/nios2-tdep.c b/gdb/nios2-tdep.c > index 988b9fc..1968a88 100644 > --- a/gdb/nios2-tdep.c > +++ b/gdb/nios2-tdep.c > @@ -658,10 +658,10 @@ nios2_in_epilogue_p (struct gdbarch *gdbarch, > return 0; > } > > -/* Implement the in_function_epilogue_p gdbarch method. */ > +/* Implement the stack_frame_destroyed_p gdbarch method. */ > > static int > -nios2_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc) > +nios2_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc) > { > CORE_ADDR func_addr; > > @@ -1775,7 +1775,7 @@ nios2_gdbarch_init (struct gdbarch_info info, struc= t gdbarch_list *arches) > set_gdbarch_return_value (gdbarch, nios2_return_value); > > set_gdbarch_skip_prologue (gdbarch, nios2_skip_prologue); > - set_gdbarch_in_function_epilogue_p (gdbarch, nios2_in_function_epilogu= e_p); > + set_gdbarch_stack_frame_destroyed_p (gdbarch, nios2_stack_frame_destro= yed_p); > set_gdbarch_breakpoint_from_pc (gdbarch, nios2_breakpoint_from_pc); > > set_gdbarch_dummy_id (gdbarch, nios2_dummy_id); > diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c > index a125000..eb40430 100644 > --- a/gdb/rs6000-tdep.c > +++ b/gdb/rs6000-tdep.c > @@ -934,10 +934,10 @@ rs6000_in_function_epilogue_frame_p (struct frame_i= nfo *curfrm, > return 0; > } > > -/* Implementation of gdbarch_in_function_epilogue_p. */ > +/* Implement the stack_frame_destroyed_p gdbarch method. */ > > static int > -rs6000_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc) > +rs6000_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc) > { > return rs6000_in_function_epilogue_frame_p (get_current_frame (), > gdbarch, pc); > @@ -5890,7 +5890,7 @@ rs6000_gdbarch_init (struct gdbarch_info info, stru= ct gdbarch_list *arches) > set_gdbarch_push_dummy_call (gdbarch, ppc64_sysv_abi_push_dummy_call= ); > > set_gdbarch_skip_prologue (gdbarch, rs6000_skip_prologue); > - set_gdbarch_in_function_epilogue_p (gdbarch, rs6000_in_function_epilog= ue_p); > + set_gdbarch_stack_frame_destroyed_p (gdbarch, rs6000_stack_frame_destr= oyed_p); > set_gdbarch_skip_main_prologue (gdbarch, rs6000_skip_main_prologue); > > set_gdbarch_inner_than (gdbarch, core_addr_lessthan); > diff --git a/gdb/s390-linux-tdep.c b/gdb/s390-linux-tdep.c > index edc0da1..0650c27 100644 > --- a/gdb/s390-linux-tdep.c > +++ b/gdb/s390-linux-tdep.c > @@ -1487,10 +1487,9 @@ s390_skip_prologue (struct gdbarch *gdbarch, CORE_= ADDR pc) > return skip_pc ? skip_pc : pc; > } > > -/* Return true if we are in the functin's epilogue, i.e. after the > - instruction that destroyed the function's stack frame. */ > +/* Implmement the stack_frame_destroyed_p gdbarch method. */ > static int > -s390_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc) > +s390_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc) > { > int word_size =3D gdbarch_ptr_bit (gdbarch) / 8; > > @@ -1838,9 +1837,9 @@ s390_prologue_frame_unwind_cache (struct frame_info= *this_frame, > && (next_frame =3D=3D NULL > || get_frame_type (get_next_frame (this_frame)) !=3D NORMAL_FRA= ME)) > { > - /* See the comment in s390_in_function_epilogue_p on why this is > + /* See the comment in s390_stack_frame_destroyed_p on why this is > not completely reliable ... */ > - if (s390_in_function_epilogue_p (gdbarch, get_frame_pc (this_frame= ))) > + if (s390_stack_frame_destroyed_p (gdbarch, get_frame_pc (this_fram= e))) > { > memset (&data, 0, sizeof (data)); > size =3D 0; > @@ -3220,7 +3219,7 @@ s390_gdbarch_init (struct gdbarch_info info, struct= gdbarch_list *arches) > set_gdbarch_inner_than (gdbarch, core_addr_lessthan); > set_gdbarch_breakpoint_from_pc (gdbarch, s390_breakpoint_from_pc); > set_gdbarch_skip_prologue (gdbarch, s390_skip_prologue); > - set_gdbarch_in_function_epilogue_p (gdbarch, s390_in_function_epilogue= _p); > + set_gdbarch_stack_frame_destroyed_p (gdbarch, s390_stack_frame_destroy= ed_p); > > set_gdbarch_num_regs (gdbarch, S390_NUM_REGS); > set_gdbarch_sp_regnum (gdbarch, S390_SP_REGNUM); > diff --git a/gdb/score-tdep.c b/gdb/score-tdep.c > index 9cd5038..ef9336e 100644 > --- a/gdb/score-tdep.c > +++ b/gdb/score-tdep.c > @@ -737,8 +737,10 @@ score3_skip_prologue (struct gdbarch *gdbarch, CORE_= ADDR pc) > return pc; > } > > +/* Implement the stack_frame_destroyed_p gdbarch method. */ > + > static int > -score7_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR cur_pc) > +score7_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR cur_p= c) > { > inst_t *inst =3D score7_fetch_inst (gdbarch, cur_pc, NULL); > > @@ -761,8 +763,10 @@ score7_in_function_epilogue_p (struct gdbarch *gdbar= ch, CORE_ADDR cur_pc) > return 0; > } > > +/* Implement the stack_frame_destroyed_p gdbarch method. */ > + > static int > -score3_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR cur_pc) > +score3_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR cur_p= c) > { > CORE_ADDR pc =3D cur_pc; > inst_t *inst > @@ -1494,8 +1498,8 @@ score_gdbarch_init (struct gdbarch_info info, struc= t gdbarch_list *arches) > case bfd_mach_score7: > set_gdbarch_breakpoint_from_pc (gdbarch, score7_breakpoint_from_pc= ); > set_gdbarch_skip_prologue (gdbarch, score7_skip_prologue); > - set_gdbarch_in_function_epilogue_p (gdbarch, > - score7_in_function_epilogue_p); > + set_gdbarch_stack_frame_destroyed_p (gdbarch, > + score7_stack_frame_destroyed_p= ); > set_gdbarch_register_name (gdbarch, score7_register_name); > set_gdbarch_num_regs (gdbarch, SCORE7_NUM_REGS); > /* Core file support. */ > @@ -1506,8 +1510,8 @@ score_gdbarch_init (struct gdbarch_info info, struc= t gdbarch_list *arches) > case bfd_mach_score3: > set_gdbarch_breakpoint_from_pc (gdbarch, score3_breakpoint_from_pc= ); > set_gdbarch_skip_prologue (gdbarch, score3_skip_prologue); > - set_gdbarch_in_function_epilogue_p (gdbarch, > - score3_in_function_epilogue_p); > + set_gdbarch_stack_frame_destroyed_p (gdbarch, > + score3_stack_frame_destroyed_p= ); > set_gdbarch_register_name (gdbarch, score3_register_name); > set_gdbarch_num_regs (gdbarch, SCORE3_NUM_REGS); > break; > diff --git a/gdb/sh-tdep.c b/gdb/sh-tdep.c > index 82cf2f4..6f66f0e 100644 > --- a/gdb/sh-tdep.c > +++ b/gdb/sh-tdep.c > @@ -2050,11 +2050,14 @@ static const struct frame_unwind sh_stub_unwind = =3D > sh_stub_unwind_sniffer > }; > > -/* The epilogue is defined here as the area at the end of a function, > +/* Implement the stack_frame_destroyed_p gdbarch method. > + > + The epilogue is defined here as the area at the end of a function, > either on the `ret' instruction itself or after an instruction which > destroys the function's stack frame. */ > + > static int > -sh_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc) > +sh_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc) > { > enum bfd_endian byte_order =3D gdbarch_byte_order (gdbarch); > CORE_ADDR func_addr =3D 0, func_end =3D 0; > @@ -2294,7 +2297,7 @@ sh_gdbarch_init (struct gdbarch_info info, struct g= dbarch_list *arches) > set_gdbarch_dummy_id (gdbarch, sh_dummy_id); > frame_base_set_default (gdbarch, &sh_frame_base); > > - set_gdbarch_in_function_epilogue_p (gdbarch, sh_in_function_epilogue_p= ); > + set_gdbarch_stack_frame_destroyed_p (gdbarch, sh_stack_frame_destroyed= _p); > > dwarf2_frame_set_init_reg (gdbarch, sh_dwarf2_frame_init_reg); > > diff --git a/gdb/sparc-tdep.c b/gdb/sparc-tdep.c > index aae4604..5c77784 100644 > --- a/gdb/sparc-tdep.c > +++ b/gdb/sparc-tdep.c > @@ -452,10 +452,10 @@ sparc32_pseudo_register_write (struct gdbarch *gdba= rch, > regcache_raw_write (regcache, regnum + 1, buf + 4); > } > > -/* Implement "in_function_epilogue_p". */ > +/* Implement the stack_frame_destroyed_p gdbarch method. */ > > int > -sparc_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc) > +sparc_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc) > { > /* This function must return true if we are one instruction after an > instruction that destroyed the stack frame of the current > diff --git a/gdb/sparc-tdep.h b/gdb/sparc-tdep.h > index b216529..905d213 100644 > --- a/gdb/sparc-tdep.h > +++ b/gdb/sparc-tdep.h > @@ -194,7 +194,7 @@ extern struct sparc_frame_cache * > sparc32_frame_cache (struct frame_info *this_frame, void **this_cache); > > extern int > - sparc_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc); > + sparc_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc); > > > > diff --git a/gdb/sparc64-tdep.c b/gdb/sparc64-tdep.c > index eba8101..4978863 100644 > --- a/gdb/sparc64-tdep.c > +++ b/gdb/sparc64-tdep.c > @@ -1211,7 +1211,7 @@ sparc64_init_abi (struct gdbarch_info info, struct = gdbarch *gdbarch) > (gdbarch, default_stabs_argument_has_addr); > > set_gdbarch_skip_prologue (gdbarch, sparc64_skip_prologue); > - set_gdbarch_in_function_epilogue_p (gdbarch, sparc_in_function_epilogu= e_p); > + set_gdbarch_stack_frame_destroyed_p (gdbarch, sparc_stack_frame_destro= yed_p); > > /* Hook in the DWARF CFI frame unwinder. */ > dwarf2_frame_set_init_reg (gdbarch, sparc64_dwarf2_frame_init_reg); > diff --git a/gdb/spu-tdep.c b/gdb/spu-tdep.c > index 7e05834..e2cd91f 100644 > --- a/gdb/spu-tdep.c > +++ b/gdb/spu-tdep.c > @@ -881,8 +881,7 @@ spu_virtual_frame_pointer (struct gdbarch *gdbarch, C= ORE_ADDR pc, > } > } > > -/* Return true if we are in the function's epilogue, i.e. after the > - instruction that destroyed the function's stack frame. > +/* Implement the stack_frame_destroyed_p gdbarch method. > > 1) scan forward from the point of execution: > a) If you find an instruction that modifies the stack pointer > @@ -899,7 +898,7 @@ spu_virtual_frame_pointer (struct gdbarch *gdbarch, C= ORE_ADDR pc, > limit for the size of an epilogue. */ > > static int > -spu_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc) > +spu_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc) > { > enum bfd_endian byte_order =3D gdbarch_byte_order (gdbarch); > CORE_ADDR scan_pc, func_start, func_end, epilogue_start, epilogue_end; > @@ -2785,7 +2784,7 @@ spu_gdbarch_init (struct gdbarch_info info, struct = gdbarch_list *arches) > set_gdbarch_virtual_frame_pointer (gdbarch, spu_virtual_frame_pointer); > set_gdbarch_frame_args_skip (gdbarch, 0); > set_gdbarch_skip_prologue (gdbarch, spu_skip_prologue); > - set_gdbarch_in_function_epilogue_p (gdbarch, spu_in_function_epilogue_= p); > + set_gdbarch_stack_frame_destroyed_p (gdbarch, spu_stack_frame_destroye= d_p); > > /* Cell/B.E. cross-architecture unwinder support. */ > frame_unwind_prepend_unwinder (gdbarch, &spu2ppu_unwind); > diff --git a/gdb/tic6x-tdep.c b/gdb/tic6x-tdep.c > index 140ffbc..2603f91 100644 > --- a/gdb/tic6x-tdep.c > +++ b/gdb/tic6x-tdep.c > @@ -1122,10 +1122,10 @@ tic6x_push_dummy_call (struct gdbarch *gdbarch, s= truct value *function, > return sp; > } > > -/* This is the implementation of gdbarch method in_function_epilogue_p. = */ > +/* This is the implementation of gdbarch method stack_frame_destroyed_p.= */ > > static int > -tic6x_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc) > +tic6x_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc) > { > unsigned long inst =3D tic6x_fetch_instruction (gdbarch, pc); > /* Normally, the epilogue is composed by instruction `b .S2 b3'. */ > @@ -1328,7 +1328,7 @@ tic6x_gdbarch_init (struct gdbarch_info info, struc= t gdbarch_list *arches) > > set_gdbarch_get_longjmp_target (gdbarch, tic6x_get_longjmp_target); > > - set_gdbarch_in_function_epilogue_p (gdbarch, tic6x_in_function_epilogu= e_p); > + set_gdbarch_stack_frame_destroyed_p (gdbarch, tic6x_stack_frame_destro= yed_p); > > set_gdbarch_return_in_first_hidden_param_p (gdbarch, > tic6x_return_in_first_hidde= n_param_p); > diff --git a/gdb/tilegx-tdep.c b/gdb/tilegx-tdep.c > index 7c5eea7..18b1832 100644 > --- a/gdb/tilegx-tdep.c > +++ b/gdb/tilegx-tdep.c > @@ -771,10 +771,10 @@ tilegx_skip_prologue (struct gdbarch *gdbarch, CORE= _ADDR start_pc) > NULL, NULL); > } > > -/* This is the implementation of gdbarch method in_function_epilogue_p. = */ > +/* This is the implementation of gdbarch method stack_frame_destroyed_p.= */ > > static int > -tilegx_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc) > +tilegx_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc) > { > CORE_ADDR func_addr =3D 0, func_end =3D 0; > > @@ -1051,8 +1051,7 @@ tilegx_gdbarch_init (struct gdbarch_info info, stru= ct gdbarch_list *arches) > > set_gdbarch_skip_prologue (gdbarch, tilegx_skip_prologue); > > - set_gdbarch_in_function_epilogue_p (gdbarch, > - tilegx_in_function_epilogue_p); > + set_gdbarch_stack_frame_destroyed_p (gdbarch, tilegx_stack_frame_destr= oyed_p); > > /* Map debug registers into internal register numbers. */ > set_gdbarch_dwarf2_reg_to_regnum (gdbarch, tilegx_dwarf2_reg_to_regnum= ); > diff --git a/gdb/xstormy16-tdep.c b/gdb/xstormy16-tdep.c > index 135e43a..4faad2e 100644 > --- a/gdb/xstormy16-tdep.c > +++ b/gdb/xstormy16-tdep.c > @@ -453,11 +453,14 @@ xstormy16_skip_prologue (struct gdbarch *gdbarch, C= ORE_ADDR pc) > return (CORE_ADDR) pc; > } > > -/* The epilogue is defined here as the area at the end of a function, > +/* Implement the stack_frame_destroyed_p gdbarch method. > + > + The epilogue is defined here as the area at the end of a function, > either on the `ret' instruction itself or after an instruction which > destroys the function's stack frame. */ > + > static int > -xstormy16_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc) > +xstormy16_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc) > { > enum bfd_endian byte_order =3D gdbarch_byte_order (gdbarch); > CORE_ADDR func_addr =3D 0, func_end =3D 0; > @@ -835,8 +838,8 @@ xstormy16_gdbarch_init (struct gdbarch_info info, str= uct gdbarch_list *arches) > frame_base_set_default (gdbarch, &xstormy16_frame_base); > > set_gdbarch_skip_prologue (gdbarch, xstormy16_skip_prologue); > - set_gdbarch_in_function_epilogue_p (gdbarch, > - xstormy16_in_function_epilogue_p); > + set_gdbarch_stack_frame_destroyed_p (gdbarch, > + xstormy16_stack_frame_destroyed_p); > > /* These values and methods are used when gdb calls a target function.= */ > set_gdbarch_push_dummy_call (gdbarch, xstormy16_push_dummy_call); --=20 Martin Galvan Software Engineer Taller Technologies Argentina San Lorenzo 47, 3rd Floor, Office 5 C=C3=B3rdoba, Argentina Phone: 54 351 4217888 / +54 351 4218211