X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Ftm-i386v4.h;h=59a3733a7b382b0c0a3cbcdfafb92584c68fbd6e;hb=51b80b0072e928c9163087e1fcbc71e52301f524;hp=244e43ea4c66025abc42eef75de074787900395a;hpb=ee1ad69ccdd586171462c68235793bdf71f0b33d;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/tm-i386v4.h b/gdb/tm-i386v4.h index 244e43ea4c..59a3733a7b 100644 --- a/gdb/tm-i386v4.h +++ b/gdb/tm-i386v4.h @@ -41,3 +41,29 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #undef FRAME_NUM_ARGS #define FRAME_NUM_ARGS(val,fi) (val = -1) + +/* Offsets (in target ints) into jmp_buf. Not defined in any system header + file, so we have to step through setjmp/longjmp with a debugger and figure + them out. Note that defines _JBLEN as 10, which is the default + if no specific machine is selected, even though we only use 6 slots. */ + +#define JB_ELEMENT_SIZE sizeof(int) /* jmp_buf[_JBLEN] is array of ints */ + +#define JB_EBX 0 +#define JB_ESI 1 +#define JB_EDI 2 +#define JB_EBP 3 +#define JB_ESP 4 +#define JB_EDX 5 + +#define JB_PC JB_EDX /* Setjmp()'s return PC saved in EDX */ + +/* Figure out where the longjmp will land. Slurp the args out of the stack. + We expect the first arg to be a pointer to the jmp_buf structure from which + we extract the pc (JB_PC) that we will land at. The pc is copied into ADDR. + This routine returns true on success */ + +extern int +get_longjmp_target PARAMS ((CORE_ADDR *)); + +#define GET_LONGJMP_TARGET(ADDR) get_longjmp_target(ADDR)