summaryrefslogtreecommitdiffstats
path: root/gcc/libgcc2.c
diff options
context:
space:
mode:
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>1995-10-29 12:42:53 +0000
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>1995-10-29 12:42:53 +0000
commitfd4acd9253cf716ce2ee9a5004294fbfa45eacf9 (patch)
treead86752ef723885c5281f2800c78364a00b95e83 /gcc/libgcc2.c
parent9a4dceee3e95ee9e6e51b500fa70ce8cd24f7a1b (diff)
downloadppe42-gcc-fd4acd9253cf716ce2ee9a5004294fbfa45eacf9.tar.gz
ppe42-gcc-fd4acd9253cf716ce2ee9a5004294fbfa45eacf9.zip
(L_eh: __unwind_function): Implement for VAX.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@10539 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/libgcc2.c')
-rw-r--r--gcc/libgcc2.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/gcc/libgcc2.c b/gcc/libgcc2.c
index d266a4a9226..4656597e06f 100644
--- a/gcc/libgcc2.c
+++ b/gcc/libgcc2.c
@@ -2390,6 +2390,22 @@ __unwind_function(void *ptr)
asm("# br");
asm("mtctr 3;bctr # b 3");
}
+#elif #machine(vax)
+__unwind_function(void *ptr)
+{
+ __label__ return_again;
+
+ /* Replace our frame's return address with the label below.
+ During execution, we will first return here instead of to
+ caller, then second return takes caller's frame off the stack.
+ Two returns matches two actual calls, so is less likely to
+ confuse debuggers. `16' corresponds to RETURN_ADDRESS_OFFSET. */
+ __asm ("movl %0,16(fp)" : : "p" (&& return_again));
+ return;
+
+ return_again:
+ return;
+}
#else
__unwind_function(void *ptr)
{
OpenPOWER on IntegriCloud