diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1995-10-29 07:42:53 -0500 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1995-10-29 07:42:53 -0500 |
commit | 139eda626f1994d1f1b0bac849db4e0836850990 (patch) | |
tree | ad86752ef723885c5281f2800c78364a00b95e83 /gcc | |
parent | 2c3aa1ba73a602e91676d7c2c0a905e1e57576b3 (diff) | |
download | gcc-139eda626f1994d1f1b0bac849db4e0836850990.zip gcc-139eda626f1994d1f1b0bac849db4e0836850990.tar.gz gcc-139eda626f1994d1f1b0bac849db4e0836850990.tar.bz2 |
(L_eh: __unwind_function): Implement for VAX.
From-SVN: r10539
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/libgcc2.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/gcc/libgcc2.c b/gcc/libgcc2.c index d266a4a..4656597 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) { |