From 378683cf6216f2edcd3bb5bf2f093fa54c6aa524 Mon Sep 17 00:00:00 2001
From: Richard Henderson <rth@redhat.com>
Date: Wed, 2 Apr 2003 18:06:55 -0800
Subject: [PATCH] libgcc-std.ver (_Unwind_GetCFA): New.

        * 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.

From-SVN: r65190
---
 gcc/ChangeLog          | 8 ++++++++
 gcc/libgcc-std.ver     | 1 +
 gcc/unwind-dw2.c       | 8 ++++++++
 gcc/unwind-libunwind.c | 9 +++++++++
 gcc/unwind-sjlj.c      | 9 +++++++++
 gcc/unwind.h           | 3 +++
 6 files changed, 38 insertions(+)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 514256844f3b..548f2249c415 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 21847be6b92e..00c72c0c4af5 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 88d8d3047ded..bce8e5ee5b7d 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 8ed052453506..bbbbd3882b14 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 535804c11665..6d6fd8bc9b54 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 d7f7f4ae6077..084eebfa8750 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 *);
-- 
GitLab