Restore i386 binary compatibility in Dwarf EH info.

* config/i386/i386.h (DWARF_FRAME_REGISTERS): Define as 17, the old
        value of FIRST_PSEUDO_REGISTER.
        * frame.h (DWARF_FRAME_REGISTERS): Default to FIRST_PSEUDO_REGISTER.
        (struct frame_state): Use DWARF_FRAME_REGISTERS.
        * dwarfout.c (output_reg_number): Ditto.
        * dwarf2out.c (reg_number, expand_builtin_init_dwarf_reg_sizes): Ditto.
        (DWARF_FRAME_RETURN_COLUMN): Default to DWARF_FRAME_REGISTERS.

From-SVN: r31127
This commit is contained in:
Martin v. Loewis 1999-12-29 20:44:13 -07:00 committed by Jeff Law
parent 87ad679bfb
commit 3073d01c3d
5 changed files with 26 additions and 7 deletions

View File

@ -1,3 +1,13 @@
1999-12-29 "Martin v. Loewis" <martin@loewis.home.cs.tu-berlin.de>
Restore i386 binary compatibility in Dwarf EH info.
* config/i386/i386.h (DWARF_FRAME_REGISTERS): Define as 17, the old
value of FIRST_PSEUDO_REGISTER.
* frame.h (DWARF_FRAME_REGISTERS): Default to FIRST_PSEUDO_REGISTER.
(struct frame_state): Use DWARF_FRAME_REGISTERS.
* dwarfout.c (output_reg_number): Ditto.
* dwarf2out.c (reg_number, expand_builtin_init_dwarf_reg_sizes): Ditto.
(DWARF_FRAME_RETURN_COLUMN): Default to DWARF_FRAME_REGISTERS.
1999-12-29 Bruce Korb <autogen@linuxbox.com> 1999-12-29 Bruce Korb <autogen@linuxbox.com>

View File

@ -612,6 +612,11 @@ extern int ix86_arch;
#define FIRST_PSEUDO_REGISTER 19 #define FIRST_PSEUDO_REGISTER 19
/* Number of hardware registers that go into the DWARF-2 unwind info.
If not defined, equals FIRST_PSEUDO_REGISTER. */
#define DWARF_FRAME_REGISTERS 17
/* 1 for registers that have pervasive standard uses /* 1 for registers that have pervasive standard uses
and are not available for the register allocator. and are not available for the register allocator.
On the 80386, the stack pointer is such, as is the arg pointer. */ On the 80386, the stack pointer is such, as is the arg pointer. */

View File

@ -515,7 +515,7 @@ static void dwarf2out_frame_debug_expr PROTO((rtx, char *));
#ifdef PC_REGNUM #ifdef PC_REGNUM
#define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (PC_REGNUM) #define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (PC_REGNUM)
#else #else
#define DWARF_FRAME_RETURN_COLUMN FIRST_PSEUDO_REGISTER #define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGISTERS
#endif #endif
#endif #endif
@ -566,7 +566,7 @@ reg_number (rtl)
{ {
register unsigned regno = REGNO (rtl); register unsigned regno = REGNO (rtl);
if (regno >= FIRST_PSEUDO_REGISTER) if (regno >= DWARF_FRAME_REGISTERS)
{ {
warning ("internal regno botch: regno = %d\n", regno); warning ("internal regno botch: regno = %d\n", regno);
regno = 0; regno = 0;
@ -587,7 +587,7 @@ expand_builtin_init_dwarf_reg_sizes (address)
rtx addr = expand_expr (address, NULL_RTX, VOIDmode, 0); rtx addr = expand_expr (address, NULL_RTX, VOIDmode, 0);
rtx mem = gen_rtx_MEM (mode, addr); rtx mem = gen_rtx_MEM (mode, addr);
for (i = 0; i < FIRST_PSEUDO_REGISTER; ++i) for (i = 0; i < DWARF_FRAME_REGISTERS; ++i)
{ {
int offset = i * GET_MODE_SIZE (mode); int offset = i * GET_MODE_SIZE (mode);
int size = GET_MODE_SIZE (reg_raw_mode[i]); int size = GET_MODE_SIZE (reg_raw_mode[i]);

View File

@ -1680,7 +1680,7 @@ output_reg_number (rtl)
{ {
register unsigned regno = REGNO (rtl); register unsigned regno = REGNO (rtl);
if (regno >= FIRST_PSEUDO_REGISTER) if (regno >= DWARF_FRAME_REGISTERS)
{ {
warning_with_decl (dwarf_last_decl, "internal regno botch: regno = %d\n", warning_with_decl (dwarf_last_decl, "internal regno botch: regno = %d\n",
regno); regno);

View File

@ -1,6 +1,6 @@
/* Header file for unwinding stack frames for exception handling. */ /* Header file for unwinding stack frames for exception handling. */
/* Compile this one with gcc. */ /* Compile this one with gcc. */
/* Copyright (C) 1997, 1998 Free Software Foundation, Inc. /* Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc.
Contributed by Jason Merrill <jason@cygnus.com>. Contributed by Jason Merrill <jason@cygnus.com>.
This file is part of GNU CC. This file is part of GNU CC.
@ -21,16 +21,20 @@ the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */ Boston, MA 02111-1307, USA. */
#ifndef DWARF_FRAME_REGISTERS
#define DWARF_FRAME_REGISTERS FIRST_PSEUDO_REGISTER
#endif
typedef struct frame_state typedef struct frame_state
{ {
void *cfa; void *cfa;
void *eh_ptr; void *eh_ptr;
long cfa_offset; long cfa_offset;
long args_size; long args_size;
long reg_or_offset[FIRST_PSEUDO_REGISTER+1]; long reg_or_offset[DWARF_FRAME_REGISTERS+1];
unsigned short cfa_reg; unsigned short cfa_reg;
unsigned short retaddr_column; unsigned short retaddr_column;
char saved[FIRST_PSEUDO_REGISTER+1]; char saved[DWARF_FRAME_REGISTERS+1];
} frame_state; } frame_state;
/* Values for 'saved' above. */ /* Values for 'saved' above. */