aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.8.1/libgo/runtime/go-recover.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.8.1/libgo/runtime/go-recover.c')
-rw-r--r--gcc-4.8.1/libgo/runtime/go-recover.c80
1 files changed, 0 insertions, 80 deletions
diff --git a/gcc-4.8.1/libgo/runtime/go-recover.c b/gcc-4.8.1/libgo/runtime/go-recover.c
deleted file mode 100644
index d6403e00d..000000000
--- a/gcc-4.8.1/libgo/runtime/go-recover.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/* go-recover.c -- support for the go recover function.
-
- Copyright 2010 The Go Authors. All rights reserved.
- Use of this source code is governed by a BSD-style
- license that can be found in the LICENSE file. */
-
-#include "runtime.h"
-#include "interface.h"
-#include "go-panic.h"
-#include "go-defer.h"
-
-/* This is called by a thunk to see if the real function should be
- permitted to recover a panic value. Recovering a value is
- permitted if the thunk was called directly by defer. RETADDR is
- the return address of the function which is calling
- __go_can_recover--this is, the thunk. */
-
-_Bool
-__go_can_recover (const void* retaddr)
-{
- G *g;
- struct __go_defer_stack *d;
- const char* ret;
- const char* dret;
-
- g = runtime_g ();
-
- d = g->defer;
- if (d == NULL)
- return 0;
-
- /* The panic which this function would recover is the one on the top
- of the panic stack. We do not want to recover it if that panic
- was on the top of the panic stack when this function was
- deferred. */
- if (d->__panic == g->panic)
- return 0;
-
- /* D->__RETADDR is the address of a label immediately following the
- call to the thunk. We can recover a panic if that is the same as
- the return address of the thunk. We permit a bit of slack in
- case there is any code between the function return and the label,
- such as an instruction to adjust the stack pointer. */
-
- ret = (const char *) retaddr;
-
-#ifdef __sparc__
- /* On SPARC the address we get, from __builtin_return_address, is
- the address of the call instruction. Adjust forward, also
- skipping the delayed instruction following the call. */
- ret += 8;
-#endif
-
- dret = (const char *) d->__retaddr;
- return ret <= dret && ret + 16 >= dret;
-}
-
-/* This is only called when it is valid for the caller to recover the
- value on top of the panic stack, if there is one. */
-
-struct __go_empty_interface
-__go_recover ()
-{
- G *g;
- struct __go_panic_stack *p;
-
- g = runtime_g ();
-
- if (g->panic == NULL || g->panic->__was_recovered)
- {
- struct __go_empty_interface ret;
-
- ret.__type_descriptor = NULL;
- ret.__object = NULL;
- return ret;
- }
- p = g->panic;
- p->__was_recovered = 1;
- return p->__arg;
-}