aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2003-06-18 15:53:06 -0700
committerRichard Henderson <rth@gcc.gnu.org>2003-06-18 15:53:06 -0700
commit61193e7bb1d4a3922456b597244517f727ffbb8c (patch)
tree36973099df56b9dc18ee3e916ade49d51b6947c0
parenta2f8629a69f92173f290f5c8b1fac802f418c628 (diff)
downloadgcc-61193e7bb1d4a3922456b597244517f727ffbb8c.zip
gcc-61193e7bb1d4a3922456b597244517f727ffbb8c.tar.gz
gcc-61193e7bb1d4a3922456b597244517f727ffbb8c.tar.bz2
unwind-ia64.c (_Unwind_GetCFA): New.
* config/ia64/unwind-ia64.c (_Unwind_GetCFA): New. (_Unwind_FindEnclosingFunction): Implement. From-SVN: r68168
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/ia64/unwind-ia64.c19
2 files changed, 23 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1e942f6..c78a883 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2003-06-18 Richard Henderson <rth@redhat.com>
+
+ * config/ia64/unwind-ia64.c (_Unwind_GetCFA): New.
+ (_Unwind_FindEnclosingFunction): Implement.
+
2003-06-18 Kazu Hirata <kazu@cs.umass.edu>
* toplev.c (rest_of_handle_sched): Hide the entire function if
diff --git a/gcc/config/ia64/unwind-ia64.c b/gcc/config/ia64/unwind-ia64.c
index 573a84a..9b6023d 100644
--- a/gcc/config/ia64/unwind-ia64.c
+++ b/gcc/config/ia64/unwind-ia64.c
@@ -1647,7 +1647,24 @@ _Unwind_GetRegionStart (struct _Unwind_Context *context)
void *
_Unwind_FindEnclosingFunction (void *pc)
{
- return NULL;
+ struct unw_table_entry *ent;
+ unsigned long segment_base, gp;
+
+ ent = _Unwind_FindTableEntry (pc, &segment_base, &gp);
+ if (ent == NULL)
+ return NULL;
+ else
+ return (void *)(segment_base + ent->start_offset);
+}
+
+/* Get the value of the CFA as saved in CONTEXT. In GCC/Dwarf2 parlance,
+ the CFA is the value of the stack pointer on entry; In IA-64 unwind
+ parlance, this is the PSP. */
+
+_Unwind_Word
+_Unwind_GetCFA (struct _Unwind_Context *context)
+{
+ return (_Unwind_Ptr) context->psp;
}