Commit 5a904a61 by Jim Wilson Committed by Jim Wilson

Fix dwarf2 debug error found by gdb testsuite: add big-endian correction.

	* dwarf2out.c (add_location_or_const_value_attribute):  Add big
	endian correction for parms passed in regs but living on the stack.

From-SVN: r25412
parent 599f37b6
Wed Feb 24 17:47:28 1999 Jim Wilson <wilson@cygnus.com>
* dwarf2out.c (add_location_or_const_value_attribute): Add big
endian correction for parms passed in regs but living on the stack.
Wed Feb 24 14:03:54 1999 Jeffrey A Law (law@cygnus.com) Wed Feb 24 14:03:54 1999 Jeffrey A Law (law@cygnus.com)
* calls.c (compute_argument_block_size): New function, extracted from * calls.c (compute_argument_block_size): New function, extracted from
......
...@@ -7084,6 +7084,38 @@ add_location_or_const_value_attribute (die, decl) ...@@ -7084,6 +7084,38 @@ add_location_or_const_value_attribute (die, decl)
&& TYPE_SIZE (declared_type) <= TYPE_SIZE (passed_type)) && TYPE_SIZE (declared_type) <= TYPE_SIZE (passed_type))
rtl = DECL_INCOMING_RTL (decl); rtl = DECL_INCOMING_RTL (decl);
} }
/* If the parm was passed in registers, but lives on the stack, then
make a big endian correction if the mode of the type of the
parameter is not the same as the mode of the rtl. */
/* ??? This is the same series of checks that are made in dbxout.c before
we reach the big endian correction code there. It isn't clear if all
of these checks are necessary here, but keeping them all is the safe
thing to do. */
else if (GET_CODE (rtl) == MEM
&& XEXP (rtl, 0) != const0_rtx
&& ! CONSTANT_P (XEXP (rtl, 0))
/* Not passed in memory. */
&& GET_CODE (DECL_INCOMING_RTL (decl)) != MEM
/* Not passed by invisible reference. */
&& (GET_CODE (XEXP (rtl, 0)) != REG
|| REGNO (XEXP (rtl, 0)) == HARD_FRAME_POINTER_REGNUM
|| REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM
#if ARG_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
|| REGNO (XEXP (rtl, 0)) == ARG_POINTER_REGNUM
#endif
)
/* Big endian correction check. */
&& BYTES_BIG_ENDIAN
&& TYPE_MODE (TREE_TYPE (decl)) != GET_MODE (rtl)
&& (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)))
< UNITS_PER_WORD))
{
int offset = (UNITS_PER_WORD
- GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl))));
rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
plus_constant (XEXP (rtl, 0), offset));
}
} }
if (rtl == NULL_RTX) if (rtl == NULL_RTX)
......
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