aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2001-12-06 21:38:03 +0000
committerAldy Hernandez <aldyh@gcc.gnu.org>2001-12-06 21:38:03 +0000
commit919543abfebfc21d56c54f2efd749b4a5ed199be (patch)
treecd6dbf587957cb3511174505bc954073ae688089 /gcc
parent9d6a24bd514b4056553f49053d3c4b3862401207 (diff)
downloadgcc-919543abfebfc21d56c54f2efd749b4a5ed199be.zip
gcc-919543abfebfc21d56c54f2efd749b4a5ed199be.tar.gz
gcc-919543abfebfc21d56c54f2efd749b4a5ed199be.tar.bz2
tm.texi (DWARF_FRAME_REGISTERS): Add documentation.
* doc/tm.texi (DWARF_FRAME_REGISTERS): Add documentation. (PRE_GCC3_DWARF_FRAME_REGISTERS): Same. * unwind-dw2.c (__frame_state_for): Change DWARF_FRAME_REGISTERS to PRE_GCC3_DWARF_FRAME_REGISTERS. (frame_state): Same. (PRE_GCC3_DWARF_FRAME_REGISTERS): Define if not already defined. Co-Authored-By: Richard Henderson <rth@redhat.com> From-SVN: r47730
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog11
-rw-r--r--gcc/doc/tm.texi27
-rw-r--r--gcc/unwind-dw2.c11
3 files changed, 46 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1560217..167de28 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,14 @@
+2001-12-06 Aldy Hernandez <aldyh@redhat.com>
+ Richard Henderson <rth@redhat.com>
+
+ * doc/tm.texi (DWARF_FRAME_REGISTERS): Add documentation.
+ (PRE_GCC3_DWARF_FRAME_REGISTERS): Same.
+
+ * unwind-dw2.c (__frame_state_for): Change DWARF_FRAME_REGISTERS
+ to PRE_GCC3_DWARF_FRAME_REGISTERS.
+ (frame_state): Same.
+ (PRE_GCC3_DWARF_FRAME_REGISTERS): Define if not already defined.
+
2001-12-06 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* langhooks.c (lhd_staticp): Mark parameter with
diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi
index 67b78e6..0991bf0 100644
--- a/gcc/doc/tm.texi
+++ b/gcc/doc/tm.texi
@@ -3011,6 +3011,33 @@ macros and should be used to refer to those items.
If the static chain is passed in a register, the two previous macros should
be defined instead.
+
+@findex DWARF_FRAME_REGISTERS
+@item DWARF_FRAME_REGISTERS
+This macro specifies the maximum number of hard registers that can be
+saved in a call frame. This is used to size data structures used in
+DWARF2 exception handling.
+
+Prior to GCC 3.0, this macro was needed in order to establish a stable
+exception handling ABI in the face of adding new hard registers for ISA
+extensions. In GCC 3.0 and later, the EH ABI is insulated from changes
+in the number of hard registers. Nevertheless, this macro can still be
+used to reduce the runtime memory requirements of the exception handling
+routines, which can be substantial if the ISA contains a lot of
+registers that are not call-saved.
+
+If this macro is not defined, it defaults to
+@code{FIRST_PSEUDO_REGISTER}.
+
+@findex PRE_GCC3_DWARF_FRAME_REGISTERS
+@item PRE_GCC3_DWARF_FRAME_REGISTERS
+
+This macro is similar to @code{DWARF_FRAME_REGISTERS}, but is provided
+for backward compatibility in pre GCC 3.0 compiled code.
+
+If this macro is not defined, it defaults to
+@code{DWARF_FRAME_REGISTERS}.
+
@end table
@node Elimination
diff --git a/gcc/unwind-dw2.c b/gcc/unwind-dw2.c
index 5d335c6..a5ac3683 100644
--- a/gcc/unwind-dw2.c
+++ b/gcc/unwind-dw2.c
@@ -42,6 +42,11 @@
#define DWARF_FRAME_REGISTERS FIRST_PSEUDO_REGISTER
#endif
+/* Dwarf frame registers used for pre gcc 3.0 compiled glibc. */
+#ifndef PRE_GCC3_DWARF_FRAME_REGISTERS
+#define PRE_GCC3_DWARF_FRAME_REGISTERS DWARF_FRAME_REGISTERS
+#endif
+
/* This is the register and unwind state for a particular frame. */
struct _Unwind_Context
{
@@ -944,10 +949,10 @@ typedef struct frame_state
void *eh_ptr;
long cfa_offset;
long args_size;
- long reg_or_offset[DWARF_FRAME_REGISTERS+1];
+ long reg_or_offset[PRE_GCC3_DWARF_FRAME_REGISTERS+1];
unsigned short cfa_reg;
unsigned short retaddr_column;
- char saved[DWARF_FRAME_REGISTERS+1];
+ char saved[PRE_GCC3_DWARF_FRAME_REGISTERS+1];
} frame_state;
struct frame_state * __frame_state_for (void *, struct frame_state *);
@@ -974,7 +979,7 @@ __frame_state_for (void *pc_target, struct frame_state *state_in)
if (fs.cfa_how == CFA_EXP)
return 0;
- for (reg = 0; reg < DWARF_FRAME_REGISTERS + 1; reg++)
+ for (reg = 0; reg < PRE_GCC3_DWARF_FRAME_REGISTERS + 1; reg++)
{
state_in->saved[reg] = fs.regs.reg[reg].how;
switch (state_in->saved[reg])