aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.8.1/libgo/runtime/go-panic.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.8.1/libgo/runtime/go-panic.c')
-rw-r--r--gcc-4.8.1/libgo/runtime/go-panic.c106
1 files changed, 0 insertions, 106 deletions
diff --git a/gcc-4.8.1/libgo/runtime/go-panic.c b/gcc-4.8.1/libgo/runtime/go-panic.c
deleted file mode 100644
index 530629ca3..000000000
--- a/gcc-4.8.1/libgo/runtime/go-panic.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/* go-panic.c -- support for the go panic function.
-
- Copyright 2009 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 <stdio.h>
-#include <stdlib.h>
-
-#include "runtime.h"
-#include "arch.h"
-#include "malloc.h"
-#include "go-alloc.h"
-#include "go-defer.h"
-#include "go-panic.h"
-#include "interface.h"
-
-/* Print the panic stack. This is used when there is no recover. */
-
-static void
-__printpanics (struct __go_panic_stack *p)
-{
- if (p->__next != NULL)
- {
- __printpanics (p->__next);
- runtime_printf ("\t");
- }
- runtime_printf ("panic: ");
- runtime_printany (p->__arg);
- if (p->__was_recovered)
- runtime_printf (" [recovered]");
- runtime_printf ("\n");
-}
-
-/* This implements __go_panic which is used for the panic
- function. */
-
-void
-__go_panic (struct __go_empty_interface arg)
-{
- G *g;
- struct __go_panic_stack *n;
-
- g = runtime_g ();
-
- n = (struct __go_panic_stack *) __go_alloc (sizeof (struct __go_panic_stack));
- n->__arg = arg;
- n->__next = g->panic;
- g->panic = n;
-
- /* Run all the defer functions. */
-
- while (1)
- {
- struct __go_defer_stack *d;
- void (*pfn) (void *);
-
- d = g->defer;
- if (d == NULL)
- break;
-
- pfn = d->__pfn;
- d->__pfn = NULL;
-
- if (pfn != NULL)
- {
- (*pfn) (d->__arg);
-
- if (n->__was_recovered)
- {
- /* Some defer function called recover. That means that
- we should stop running this panic. */
-
- g->panic = n->__next;
- __go_free (n);
-
- /* Now unwind the stack by throwing an exception. The
- compiler has arranged to create exception handlers in
- each function which uses a defer statement. These
- exception handlers will check whether the entry on
- the top of the defer stack is from the current
- function. If it is, we have unwound the stack far
- enough. */
- __go_unwind_stack ();
-
- /* __go_unwind_stack should not return. */
- abort ();
- }
-
- /* Because we executed that defer function by a panic, and
- it did not call recover, we know that we are not
- returning from the calling function--we are panicing
- through it. */
- *d->__frame = 0;
- }
-
- g->defer = d->__next;
- __go_free (d);
- }
-
- /* The panic was not recovered. */
-
- runtime_startpanic ();
- __printpanics (g->panic);
- runtime_dopanic (0);
-}