summaryrefslogtreecommitdiff
path: root/sysdeps/generic/unwind-dw2-fde.h
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-04-13 16:45:10 +0000
committerUlrich Drepper <drepper@redhat.com>2003-04-13 16:45:10 +0000
commit6180ac2f06eec2a3f2ae05b04af60baf4f1e4149 (patch)
tree3ab6c00f8ad6eaf2f911e90a888a29783b3c0fa5 /sysdeps/generic/unwind-dw2-fde.h
parent6a1aff6912ff551906d4c60f5ca2eeb8fd78090e (diff)
Update from recent gcc version.
Diffstat (limited to 'sysdeps/generic/unwind-dw2-fde.h')
-rw-r--r--sysdeps/generic/unwind-dw2-fde.h49
1 files changed, 32 insertions, 17 deletions
diff --git a/sysdeps/generic/unwind-dw2-fde.h b/sysdeps/generic/unwind-dw2-fde.h
index 83b4470ce5..4fc4836d2a 100644
--- a/sysdeps/generic/unwind-dw2-fde.h
+++ b/sysdeps/generic/unwind-dw2-fde.h
@@ -1,13 +1,14 @@
/* Subroutines needed for unwinding stack frames for exception handling. */
-/* Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+ Free Software Foundation, Inc.
Contributed by Jason Merrill <jason@cygnus.com>.
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
In addition to the permissions in the GNU General Public License, the
Free Software Foundation gives you unlimited permission to link the
@@ -18,15 +19,15 @@ do apply in other respects; for example, they cover modification of
the file, and distribution when not linked into a combine
executable.)
-GNU CC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
You should have received a copy of the GNU General Public License
-along with GNU CC; see the file COPYING. If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
+along with GCC; see the file COPYING. If not, write to the Free
+Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+02111-1307, USA. */
struct fde_vector
@@ -57,12 +58,16 @@ struct object
unsigned long mixed_encoding : 1;
unsigned long encoding : 8;
/* ??? Wish there was an easy way to detect a 64-bit host here;
- we've got 32 bits left to play with... */
+ we've got 32 bits left to play with... */
unsigned long count : 21;
} b;
size_t i;
} s;
+#ifdef DWARF2_OBJECT_END_PTR_EXTENSION
+ char *fde_end;
+#endif
+
struct object *next;
};
#endif
@@ -116,7 +121,7 @@ typedef unsigned char ubyte;
is located, and what the register lifetimes and stack layout are
within the function.
- The data structures are defined in the DWARF specfication, although
+ The data structures are defined in the DWARF specification, although
not in a very readable way (see LITERATURE).
Every time an exception is thrown, the code needs to locate the FDE
@@ -125,7 +130,7 @@ typedef unsigned char ubyte;
a) in a linear search, find the shared image (i.e. DLL) containing
the PC
b) using the FDE table for that shared object, locate the FDE using
- binary search (which requires the sorting). */
+ binary search (which requires the sorting). */
/* The first few fields of a CIE. The CIE_id field is 0 for a CIE,
to distinguish it from a valid FDE. FDEs are aligned to an addressing
@@ -159,7 +164,17 @@ get_cie (struct dwarf_fde *f)
static inline fde *
next_fde (fde *f)
{
- return (fde *)((char *)f + f->length + sizeof (f->length));
+ return (fde *) ((char *) f + f->length + sizeof (f->length));
}
extern fde * _Unwind_Find_FDE (void *, struct dwarf_eh_bases *);
+
+static inline int
+last_fde (struct object *obj __attribute__ ((__unused__)), fde *f)
+{
+#ifdef DWARF2_OBJECT_END_PTR_EXTENSION
+ return (char *)f == obj->fde_end || f->length == 0;
+#else
+ return f->length == 0;
+#endif
+}