diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 514256844f3b5dbd4e659b39078379fc3f68133e..548f2249c41539a84e192b32faf47db5017ce4fd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2003-04-02 Richard Henderson <rth@redhat.com> + + * libgcc-std.ver (_Unwind_GetCFA): New. + * unwind-dw2.c (_Unwind_GetCFA): New. + * unwind-libunwind.c (_Unwind_GetCFA): New. + * unwind-sjlj.c (_Unwind_GetCFA): New. + * unwind.h: Declare it. + Thu Apr 3 00:31:21 CEST 2003 Jan Hubicka <jh@suse.cz> PR inline-asm/8088 diff --git a/gcc/libgcc-std.ver b/gcc/libgcc-std.ver index 21847be6b92eb07b6551a7c538111996805434f2..00c72c0c4af5c5ab87a2c95947f50934a3438df0 100644 --- a/gcc/libgcc-std.ver +++ b/gcc/libgcc-std.ver @@ -179,6 +179,7 @@ GCC_3.0 { %inherit GCC_3.3 GCC_3.0 GCC_3.3 { _Unwind_FindEnclosingFunction + _Unwind_GetCFA } %inherit GCC_3.4 GCC_3.3 diff --git a/gcc/unwind-dw2.c b/gcc/unwind-dw2.c index 88d8d3047ded5aad3bf916627b1fdfbc4133cb38..bce8e5ee5b7defeb5369c2a0a6356462e210a049 100644 --- a/gcc/unwind-dw2.c +++ b/gcc/unwind-dw2.c @@ -173,6 +173,14 @@ _Unwind_GetGR (struct _Unwind_Context *context, int index) return * (_Unwind_Word *) context->reg[index]; } +/* Get the value of the CFA as saved in CONTEXT. */ + +_Unwind_Word +_Unwind_GetCFA (struct _Unwind_Context *context) +{ + return context->cfa; +} + /* Overwrite the saved value for register REG in CONTEXT with VAL. */ inline void diff --git a/gcc/unwind-libunwind.c b/gcc/unwind-libunwind.c index 8ed052453506c5884d6596466214346ad987015a..bbbbd3882b1432b8be3c64d21280d00fdae162ed 100644 --- a/gcc/unwind-libunwind.c +++ b/gcc/unwind-libunwind.c @@ -105,6 +105,15 @@ _Unwind_GetGR (struct _Unwind_Context *context, int index) return ret; } +/* Get the value of the CFA as saved in CONTEXT. */ + +_Unwind_Word +_Unwind_GetCFA (struct _Unwind_Context *context) +{ + /* ??? Is there any way to get this information? */ + return NULL; +} + /* Overwrite the saved value for register REG in CONTEXT with VAL. */ void diff --git a/gcc/unwind-sjlj.c b/gcc/unwind-sjlj.c index 535804c116658cc62dbf357542826f074afe83a0..6d6fd8bc9b54878130b258461333c16a4573bc32 100644 --- a/gcc/unwind-sjlj.c +++ b/gcc/unwind-sjlj.c @@ -170,6 +170,15 @@ _Unwind_GetGR (struct _Unwind_Context *context, int index) return context->fc->data[index]; } +/* Get the value of the CFA as saved in CONTEXT. */ + +_Unwind_Word +_Unwind_GetCFA (struct _Unwind_Context *context) +{ + /* ??? Ideally __builtin_setjmp places the CFA in the jmpbuf. */ + return NULL; +} + void _Unwind_SetGR (struct _Unwind_Context *context, int index, _Unwind_Word val) { diff --git a/gcc/unwind.h b/gcc/unwind.h index d7f7f4ae607750d58a0320ff12e4f18c81fc2ba3..084eebfa8750f7c00cb704d0bca82348ed02792c 100644 --- a/gcc/unwind.h +++ b/gcc/unwind.h @@ -138,6 +138,9 @@ extern void _Unwind_SetGR (struct _Unwind_Context *, int, _Unwind_Word); extern _Unwind_Ptr _Unwind_GetIP (struct _Unwind_Context *); extern void _Unwind_SetIP (struct _Unwind_Context *, _Unwind_Ptr); +/* @@@ Retrieve the CFA of the given context. */ +extern _Unwind_Word _Unwind_GetCFA (struct _Unwind_Context *); + extern void *_Unwind_GetLanguageSpecificData (struct _Unwind_Context *); extern _Unwind_Ptr _Unwind_GetRegionStart (struct _Unwind_Context *);