Commit 4f42d714 by Richard Henderson Committed by Richard Henderson

re PR target/49713 (Conflicting types for 'arm_dbx_register_number')

PR target/49713
        * dwarf2out.h (dwarf_frame_regnum): Remove.
        * dwarf2out.c (based_loc_descr): Revert last change.  Initialize regno
        earlier from DWARF_FRAME_REGNUM.  Never use dbx_reg_number.
        * dwarf2cfi.c (dw_stack_pointer_regnum, dw_frame_pointer_regnum): New.
        (execute_dwarf2_frame): Initialize them.
        (DW_STACK_POINTER_REGNUM, DW_FRAME_POINTER_REGNUM): Remove; replace
        users of the macros with the variables.
        (expand_builtin_dwarf_sp_column): Revert last change.
        (expand_builtin_init_dwarf_reg_sizes): Likewise.  Compute the
        result of DWARF_FRAME_REGNUM into a local variable.

From-SVN: r176212
parent 3a5e4ad6
2011-07-12 Richard Henderson <rth@redhat.com> 2011-07-12 Richard Henderson <rth@redhat.com>
PR target/49713
* dwarf2out.h (dwarf_frame_regnum): Remove.
* dwarf2out.c (based_loc_descr): Revert last change. Initialize regno
earlier from DWARF_FRAME_REGNUM. Never use dbx_reg_number.
* dwarf2cfi.c (dw_stack_pointer_regnum, dw_frame_pointer_regnum): New.
(execute_dwarf2_frame): Initialize them.
(DW_STACK_POINTER_REGNUM, DW_FRAME_POINTER_REGNUM): Remove; replace
users of the macros with the variables.
(expand_builtin_dwarf_sp_column): Revert last change.
(expand_builtin_init_dwarf_reg_sizes): Likewise. Compute the
result of DWARF_FRAME_REGNUM into a local variable.
2011-07-12 Richard Henderson <rth@redhat.com>
PR target/49714 PR target/49714
* config/i386/i386.c (x86_output_mi_thunk): Use * config/i386/i386.c (x86_output_mi_thunk): Use
machopic_indirect_call_target instead of machopic_indirection_name machopic_indirect_call_target instead of machopic_indirection_name
......
...@@ -57,10 +57,6 @@ along with GCC; see the file COPYING3. If not see ...@@ -57,10 +57,6 @@ along with GCC; see the file COPYING3. If not see
/* Maximum size (in bytes) of an artificially generated label. */ /* Maximum size (in bytes) of an artificially generated label. */
#define MAX_ARTIFICIAL_LABEL_BYTES 30 #define MAX_ARTIFICIAL_LABEL_BYTES 30
/* Short-hand for commonly used register numbers. */
#define DW_STACK_POINTER_REGNUM dwarf_frame_regnum (STACK_POINTER_REGNUM)
#define DW_FRAME_POINTER_REGNUM dwarf_frame_regnum (HARD_FRAME_POINTER_REGNUM)
/* A vector of call frame insns for the CIE. */ /* A vector of call frame insns for the CIE. */
cfi_vec cie_cfi_vec; cfi_vec cie_cfi_vec;
...@@ -78,6 +74,10 @@ static bool emit_cfa_remember; ...@@ -78,6 +74,10 @@ static bool emit_cfa_remember;
/* True if any CFI directives were emitted at the current insn. */ /* True if any CFI directives were emitted at the current insn. */
static bool any_cfis_emitted; static bool any_cfis_emitted;
/* Short-hand for commonly used register numbers. */
static unsigned dw_stack_pointer_regnum;
static unsigned dw_frame_pointer_regnum;
static void dwarf2out_cfi_begin_epilogue (rtx insn); static void dwarf2out_cfi_begin_epilogue (rtx insn);
...@@ -89,7 +89,7 @@ static void dwarf2out_frame_debug_restore_state (void); ...@@ -89,7 +89,7 @@ static void dwarf2out_frame_debug_restore_state (void);
rtx rtx
expand_builtin_dwarf_sp_column (void) expand_builtin_dwarf_sp_column (void)
{ {
unsigned int dwarf_regnum = DW_STACK_POINTER_REGNUM; unsigned int dwarf_regnum = DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM);
return GEN_INT (DWARF2_FRAME_REG_OUT (dwarf_regnum, 1)); return GEN_INT (DWARF2_FRAME_REG_OUT (dwarf_regnum, 1));
} }
...@@ -117,7 +117,8 @@ expand_builtin_init_dwarf_reg_sizes (tree address) ...@@ -117,7 +117,8 @@ expand_builtin_init_dwarf_reg_sizes (tree address)
for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
{ {
unsigned int rnum = DWARF2_FRAME_REG_OUT (dwarf_frame_regnum (i), 1); unsigned int dnum = DWARF_FRAME_REGNUM (i);
unsigned int rnum = DWARF2_FRAME_REG_OUT (dnum, 1);
if (rnum < DWARF_FRAME_REGISTERS) if (rnum < DWARF_FRAME_REGISTERS)
{ {
...@@ -127,7 +128,7 @@ expand_builtin_init_dwarf_reg_sizes (tree address) ...@@ -127,7 +128,7 @@ expand_builtin_init_dwarf_reg_sizes (tree address)
if (HARD_REGNO_CALL_PART_CLOBBERED (i, save_mode)) if (HARD_REGNO_CALL_PART_CLOBBERED (i, save_mode))
save_mode = choose_hard_reg_mode (i, 1, true); save_mode = choose_hard_reg_mode (i, 1, true);
if (dwarf_frame_regnum (i) == DWARF_FRAME_RETURN_COLUMN) if (dnum == DWARF_FRAME_RETURN_COLUMN)
{ {
if (save_mode == VOIDmode) if (save_mode == VOIDmode)
continue; continue;
...@@ -812,10 +813,10 @@ dwarf2out_args_size (HOST_WIDE_INT size) ...@@ -812,10 +813,10 @@ dwarf2out_args_size (HOST_WIDE_INT size)
static void static void
dwarf2out_stack_adjust (HOST_WIDE_INT offset) dwarf2out_stack_adjust (HOST_WIDE_INT offset)
{ {
if (cfa.reg == DW_STACK_POINTER_REGNUM) if (cfa.reg == dw_stack_pointer_regnum)
cfa.offset += offset; cfa.offset += offset;
if (cfa_store.reg == DW_STACK_POINTER_REGNUM) if (cfa_store.reg == dw_stack_pointer_regnum)
cfa_store.offset += offset; cfa_store.offset += offset;
if (ACCUMULATE_OUTGOING_ARGS) if (ACCUMULATE_OUTGOING_ARGS)
...@@ -861,7 +862,7 @@ dwarf2out_notice_stack_adjust (rtx insn, bool after_p) ...@@ -861,7 +862,7 @@ dwarf2out_notice_stack_adjust (rtx insn, bool after_p)
/* If only calls can throw, and we have a frame pointer, /* If only calls can throw, and we have a frame pointer,
save up adjustments until we see the CALL_INSN. */ save up adjustments until we see the CALL_INSN. */
if (!flag_asynchronous_unwind_tables && cfa.reg != DW_STACK_POINTER_REGNUM) if (!flag_asynchronous_unwind_tables && cfa.reg != dw_stack_pointer_regnum)
{ {
if (CALL_P (insn) && !after_p) if (CALL_P (insn) && !after_p)
{ {
...@@ -955,13 +956,13 @@ static GTY(()) VEC(reg_saved_in_data, gc) *regs_saved_in_regs; ...@@ -955,13 +956,13 @@ static GTY(()) VEC(reg_saved_in_data, gc) *regs_saved_in_regs;
static GTY(()) reg_saved_in_data *cie_return_save; static GTY(()) reg_saved_in_data *cie_return_save;
/* Short-hand inline for the very common D_F_R (REGNO (x)) operation. */ /* Short-hand inline for the very common D_F_R (REGNO (x)) operation. */
/* ??? This ought to go into dwarf2out.h alongside dwarf_frame_regnum, /* ??? This ought to go into dwarf2out.h, except that dwarf2out.h is
except that dwarf2out.h is used in places where rtl is prohibited. */ used in places where rtl is prohibited. */
static inline unsigned static inline unsigned
dwf_regno (const_rtx reg) dwf_regno (const_rtx reg)
{ {
return dwarf_frame_regnum (REGNO (reg)); return DWARF_FRAME_REGNUM (REGNO (reg));
} }
/* Compare X and Y for equivalence. The inputs may be REGs or PC_RTX. */ /* Compare X and Y for equivalence. The inputs may be REGs or PC_RTX. */
...@@ -1651,8 +1652,8 @@ dwarf2out_frame_debug_expr (rtx expr) ...@@ -1651,8 +1652,8 @@ dwarf2out_frame_debug_expr (rtx expr)
if (XEXP (src, 0) == hard_frame_pointer_rtx) if (XEXP (src, 0) == hard_frame_pointer_rtx)
{ {
/* Restoring SP from FP in the epilogue. */ /* Restoring SP from FP in the epilogue. */
gcc_assert (cfa.reg == DW_FRAME_POINTER_REGNUM); gcc_assert (cfa.reg == dw_frame_pointer_regnum);
cfa.reg = DW_STACK_POINTER_REGNUM; cfa.reg = dw_stack_pointer_regnum;
} }
else if (GET_CODE (src) == LO_SUM) else if (GET_CODE (src) == LO_SUM)
/* Assume we've set the source reg of the LO_SUM from sp. */ /* Assume we've set the source reg of the LO_SUM from sp. */
...@@ -1662,9 +1663,9 @@ dwarf2out_frame_debug_expr (rtx expr) ...@@ -1662,9 +1663,9 @@ dwarf2out_frame_debug_expr (rtx expr)
if (GET_CODE (src) != MINUS) if (GET_CODE (src) != MINUS)
offset = -offset; offset = -offset;
if (cfa.reg == DW_STACK_POINTER_REGNUM) if (cfa.reg == dw_stack_pointer_regnum)
cfa.offset += offset; cfa.offset += offset;
if (cfa_store.reg == DW_STACK_POINTER_REGNUM) if (cfa_store.reg == dw_stack_pointer_regnum)
cfa_store.offset += offset; cfa_store.offset += offset;
} }
else if (dest == hard_frame_pointer_rtx) else if (dest == hard_frame_pointer_rtx)
...@@ -1681,7 +1682,7 @@ dwarf2out_frame_debug_expr (rtx expr) ...@@ -1681,7 +1682,7 @@ dwarf2out_frame_debug_expr (rtx expr)
if (GET_CODE (src) != MINUS) if (GET_CODE (src) != MINUS)
offset = -offset; offset = -offset;
cfa.offset += offset; cfa.offset += offset;
cfa.reg = DW_FRAME_POINTER_REGNUM; cfa.reg = dw_frame_pointer_regnum;
} }
else else
{ {
...@@ -1709,7 +1710,7 @@ dwarf2out_frame_debug_expr (rtx expr) ...@@ -1709,7 +1710,7 @@ dwarf2out_frame_debug_expr (rtx expr)
{ {
/* Setting a scratch register that we will use instead /* Setting a scratch register that we will use instead
of SP for saving registers to the stack. */ of SP for saving registers to the stack. */
gcc_assert (cfa.reg == DW_STACK_POINTER_REGNUM); gcc_assert (cfa.reg == dw_stack_pointer_regnum);
cfa_store.reg = dwf_regno (dest); cfa_store.reg = dwf_regno (dest);
cfa_store.offset = cfa.offset - cfa_temp.offset; cfa_store.offset = cfa.offset - cfa_temp.offset;
} }
...@@ -1771,8 +1772,8 @@ dwarf2out_frame_debug_expr (rtx expr) ...@@ -1771,8 +1772,8 @@ dwarf2out_frame_debug_expr (rtx expr)
fde->stack_realignment = INTVAL (XEXP (src, 1)); fde->stack_realignment = INTVAL (XEXP (src, 1));
cfa_store.offset = 0; cfa_store.offset = 0;
if (cfa.reg != DW_STACK_POINTER_REGNUM if (cfa.reg != dw_stack_pointer_regnum
&& cfa.reg != DW_FRAME_POINTER_REGNUM) && cfa.reg != dw_frame_pointer_regnum)
fde->drap_reg = cfa.reg; fde->drap_reg = cfa.reg;
} }
return; return;
...@@ -1800,10 +1801,10 @@ dwarf2out_frame_debug_expr (rtx expr) ...@@ -1800,10 +1801,10 @@ dwarf2out_frame_debug_expr (rtx expr)
offset = -INTVAL (XEXP (XEXP (XEXP (dest, 0), 1), 1)); offset = -INTVAL (XEXP (XEXP (XEXP (dest, 0), 1), 1));
gcc_assert (REGNO (XEXP (XEXP (dest, 0), 0)) == STACK_POINTER_REGNUM gcc_assert (REGNO (XEXP (XEXP (dest, 0), 0)) == STACK_POINTER_REGNUM
&& cfa_store.reg == DW_STACK_POINTER_REGNUM); && cfa_store.reg == dw_stack_pointer_regnum);
cfa_store.offset += offset; cfa_store.offset += offset;
if (cfa.reg == DW_STACK_POINTER_REGNUM) if (cfa.reg == dw_stack_pointer_regnum)
cfa.offset = cfa_store.offset; cfa.offset = cfa_store.offset;
if (GET_CODE (XEXP (dest, 0)) == POST_MODIFY) if (GET_CODE (XEXP (dest, 0)) == POST_MODIFY)
...@@ -1822,7 +1823,7 @@ dwarf2out_frame_debug_expr (rtx expr) ...@@ -1822,7 +1823,7 @@ dwarf2out_frame_debug_expr (rtx expr)
gcc_assert ((REGNO (XEXP (XEXP (dest, 0), 0)) gcc_assert ((REGNO (XEXP (XEXP (dest, 0), 0))
== STACK_POINTER_REGNUM) == STACK_POINTER_REGNUM)
&& cfa_store.reg == DW_STACK_POINTER_REGNUM); && cfa_store.reg == dw_stack_pointer_regnum);
cfa_store.offset += offset; cfa_store.offset += offset;
...@@ -1833,11 +1834,11 @@ dwarf2out_frame_debug_expr (rtx expr) ...@@ -1833,11 +1834,11 @@ dwarf2out_frame_debug_expr (rtx expr)
&& fde->stack_realign && fde->stack_realign
&& src == hard_frame_pointer_rtx) && src == hard_frame_pointer_rtx)
{ {
gcc_assert (cfa.reg != DW_FRAME_POINTER_REGNUM); gcc_assert (cfa.reg != dw_frame_pointer_regnum);
cfa_store.offset = 0; cfa_store.offset = 0;
} }
if (cfa.reg == DW_STACK_POINTER_REGNUM) if (cfa.reg == dw_stack_pointer_regnum)
cfa.offset = cfa_store.offset; cfa.offset = cfa_store.offset;
if (GET_CODE (XEXP (dest, 0)) == POST_DEC) if (GET_CODE (XEXP (dest, 0)) == POST_DEC)
...@@ -1927,14 +1928,14 @@ dwarf2out_frame_debug_expr (rtx expr) ...@@ -1927,14 +1928,14 @@ dwarf2out_frame_debug_expr (rtx expr)
if (fde if (fde
&& fde->stack_realign && fde->stack_realign
&& cfa.indirect == 0 && cfa.indirect == 0
&& cfa.reg != DW_FRAME_POINTER_REGNUM) && cfa.reg != dw_frame_pointer_regnum)
{ {
dw_cfa_location cfa_exp; dw_cfa_location cfa_exp;
gcc_assert (fde->drap_reg == cfa.reg); gcc_assert (fde->drap_reg == cfa.reg);
cfa_exp.indirect = 1; cfa_exp.indirect = 1;
cfa_exp.reg = DW_FRAME_POINTER_REGNUM; cfa_exp.reg = dw_frame_pointer_regnum;
cfa_exp.base_offset = offset; cfa_exp.base_offset = offset;
cfa_exp.offset = 0; cfa_exp.offset = 0;
...@@ -2487,14 +2488,17 @@ execute_dwarf2_frame (void) ...@@ -2487,14 +2488,17 @@ execute_dwarf2_frame (void)
{ {
dw_cfa_location loc; dw_cfa_location loc;
dw_stack_pointer_regnum = DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM);
dw_frame_pointer_regnum = DWARF_FRAME_REGNUM (HARD_FRAME_POINTER_REGNUM);
add_cfi_vec = &cie_cfi_vec; add_cfi_vec = &cie_cfi_vec;
memset(&old_cfa, 0, sizeof (old_cfa)); memset (&old_cfa, 0, sizeof (old_cfa));
old_cfa.reg = INVALID_REGNUM; old_cfa.reg = INVALID_REGNUM;
/* On entry, the Canonical Frame Address is at SP. */ /* On entry, the Canonical Frame Address is at SP. */
memset(&loc, 0, sizeof (loc)); memset(&loc, 0, sizeof (loc));
loc.reg = DW_STACK_POINTER_REGNUM; loc.reg = dw_stack_pointer_regnum;
loc.offset = INCOMING_FRAME_SP_OFFSET; loc.offset = INCOMING_FRAME_SP_OFFSET;
def_cfa_1 (&loc); def_cfa_1 (&loc);
...@@ -2534,7 +2538,7 @@ execute_dwarf2_frame (void) ...@@ -2534,7 +2538,7 @@ execute_dwarf2_frame (void)
gcc_checking_assert (regs_saved_in_regs == NULL); gcc_checking_assert (regs_saved_in_regs == NULL);
memset (&cfa, 0, sizeof(cfa)); memset (&cfa, 0, sizeof(cfa));
cfa.reg = DW_STACK_POINTER_REGNUM; cfa.reg = dw_stack_pointer_regnum;
cfa.offset = INCOMING_FRAME_SP_OFFSET; cfa.offset = INCOMING_FRAME_SP_OFFSET;
old_cfa = cfa; old_cfa = cfa;
......
...@@ -10406,10 +10406,11 @@ based_loc_descr (rtx reg, HOST_WIDE_INT offset, ...@@ -10406,10 +10406,11 @@ based_loc_descr (rtx reg, HOST_WIDE_INT offset,
return new_loc_descr (DW_OP_fbreg, offset, 0); return new_loc_descr (DW_OP_fbreg, offset, 0);
} }
} }
else if (!optimize
&& fde regno = DWARF_FRAME_REGNUM (REGNO (reg));
&& (fde->drap_reg == dwarf_frame_regnum (REGNO (reg))
|| fde->vdrap_reg == dwarf_frame_regnum (REGNO (reg)))) if (!optimize && fde
&& (fde->drap_reg == regno || fde->vdrap_reg == regno))
{ {
/* Use cfa+offset to represent the location of arguments passed /* Use cfa+offset to represent the location of arguments passed
on the stack when drap is used to align stack. on the stack when drap is used to align stack.
...@@ -10420,7 +10421,6 @@ based_loc_descr (rtx reg, HOST_WIDE_INT offset, ...@@ -10420,7 +10421,6 @@ based_loc_descr (rtx reg, HOST_WIDE_INT offset,
return new_loc_descr (DW_OP_fbreg, offset, 0); return new_loc_descr (DW_OP_fbreg, offset, 0);
} }
regno = dbx_reg_number (reg);
if (regno <= 31) if (regno <= 31)
result = new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + regno), result = new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + regno),
offset, 0); offset, 0);
......
...@@ -262,15 +262,6 @@ extern void dwarf2out_set_demangle_name_func (const char *(*) (const char *)); ...@@ -262,15 +262,6 @@ extern void dwarf2out_set_demangle_name_func (const char *(*) (const char *));
extern void dwarf2out_vms_debug_main_pointer (void); extern void dwarf2out_vms_debug_main_pointer (void);
#endif #endif
/* Unfortunately, DWARF_FRAME_REGNUM is not universally defined in such a
way as to force an unsigned return type. Do that via inline wrapper. */
static inline unsigned
dwarf_frame_regnum (unsigned regnum)
{
return DWARF_FRAME_REGNUM (regnum);
}
struct array_descr_info struct array_descr_info
{ {
int ndimensions; int ndimensions;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment