X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fdummy-frame.h;h=bdc406a5b5926e5d042a808375f5dba72447aea1;hb=3b27ef472df3b4cdcdd54629281610d594c99c97;hp=c97301cd7b8a85dd696f49540d4833767bdbbd7d;hpb=39d7b0e29259dcf5cf966530ac416d1eb287ccbb;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/dummy-frame.h b/gdb/dummy-frame.h index c97301cd7b..bdc406a5b5 100644 --- a/gdb/dummy-frame.h +++ b/gdb/dummy-frame.h @@ -1,7 +1,6 @@ /* Code dealing with dummy stack frames, for GDB, the GNU debugger. - Copyright (C) 2002, 2004, 2007, 2008, 2009, 2010 - Free Software Foundation, Inc. + Copyright (C) 2002-2015 Free Software Foundation, Inc. This file is part of GDB. @@ -23,24 +22,19 @@ #include "frame.h" -struct inferior_thread_state; +struct infcall_suspend_state; struct frame_unwind; /* Push the information needed to identify, and unwind from, a dummy frame onto the dummy frame stack. */ -/* NOTE: cagney/2004-08-02: This interface will eventually need to be - parameterized with the caller's thread - that will allow per-thread - dummy-frame stacks and, hence, per-thread inferior function - calls. */ - /* NOTE: cagney/2004-08-02: In the case of ABIs using push_dummy_code containing more than one instruction, this interface many need to be expanded so that it knowns the lower/upper extent of the dummy frame's code. */ -extern void dummy_frame_push (struct inferior_thread_state *caller_state, - const struct frame_id *dummy_id); +extern void dummy_frame_push (struct infcall_suspend_state *caller_state, + const struct frame_id *dummy_id, ptid_t ptid); /* Pop the dummy frame DUMMY_ID, restoring program state to that before the frame was created. @@ -51,11 +45,26 @@ extern void dummy_frame_push (struct inferior_thread_state *caller_state, stack, because the other frames may be for different threads, and there's currently no way to tell which stack frame is for which thread. */ -extern void dummy_frame_pop (struct frame_id dummy_id); +extern void dummy_frame_pop (struct frame_id dummy_id, ptid_t ptid); + +extern void dummy_frame_discard (struct frame_id dummy_id, ptid_t ptid); /* If the PC falls in a dummy frame, return a dummy frame unwinder. */ extern const struct frame_unwind dummy_frame_unwind; +/* Call DTOR with DTOR_DATA when DUMMY_ID frame of thread PTID gets discarded. + Dummy frame with DUMMY_ID must exist. There must be no other call of + register_dummy_frame_dtor for that dummy frame. */ +typedef void (dummy_frame_dtor_ftype) (void *data); +extern void register_dummy_frame_dtor (struct frame_id dummy_id, ptid_t ptid, + dummy_frame_dtor_ftype *dtor, + void *dtor_data); + +/* Return 1 if there exists dummy frame with registered DTOR and DTOR_DATA. + Return 0 otherwise. */ +extern int find_dummy_frame_dtor (dummy_frame_dtor_ftype *dtor, + void *dtor_data); + #endif /* !defined (DUMMY_FRAME_H) */