arm.c (arm_compute_save_reg0_reg12_mask): Add special case for noreturn functions.
2009-11-23 Paul Brook <paul@codesourcery.com> gcc/ * config/arm/arm.c (arm_compute_save_reg0_reg12_mask): Add special case for noreturn functions. (arm_compute_save_reg_mask): Remove special noreturn handling. From-SVN: r154441
This commit is contained in:
parent
0230277c25
commit
1586899ee9
@ -1,3 +1,9 @@
|
|||||||
|
2009-11-23 Paul Brook <paul@codesourcery.com>
|
||||||
|
|
||||||
|
* config/arm/arm.c (arm_compute_save_reg0_reg12_mask): Add special
|
||||||
|
case for noreturn functions.
|
||||||
|
(arm_compute_save_reg_mask): Remove special noreturn handling.
|
||||||
|
|
||||||
2009-11-23 Richard Guenther <rguenther@suse.de>
|
2009-11-23 Richard Guenther <rguenther@suse.de>
|
||||||
|
|
||||||
* tree-dfa.c (get_ref_base_and_extent): Adjust maximum access
|
* tree-dfa.c (get_ref_base_and_extent): Adjust maximum access
|
||||||
|
@ -12831,6 +12831,20 @@ arm_compute_save_reg0_reg12_mask (void)
|
|||||||
&& crtl->uses_pic_offset_table)
|
&& crtl->uses_pic_offset_table)
|
||||||
save_reg_mask |= 1 << PIC_OFFSET_TABLE_REGNUM;
|
save_reg_mask |= 1 << PIC_OFFSET_TABLE_REGNUM;
|
||||||
}
|
}
|
||||||
|
else if (IS_VOLATILE(func_type))
|
||||||
|
{
|
||||||
|
/* For noreturn functions we historically omitted register saves
|
||||||
|
altogether. However this really messes up debugging. As a
|
||||||
|
compromise save just the fame pointers. Combined with the link
|
||||||
|
register saved elsewhere this should be sufficient to get
|
||||||
|
a backtrace. */
|
||||||
|
if (frame_pointer_needed)
|
||||||
|
save_reg_mask |= 1 << HARD_FRAME_POINTER_REGNUM;
|
||||||
|
if (df_regs_ever_live_p (ARM_HARD_FRAME_POINTER_REGNUM))
|
||||||
|
save_reg_mask |= 1 << ARM_HARD_FRAME_POINTER_REGNUM;
|
||||||
|
if (df_regs_ever_live_p (THUMB_HARD_FRAME_POINTER_REGNUM))
|
||||||
|
save_reg_mask |= 1 << THUMB_HARD_FRAME_POINTER_REGNUM;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* In the normal case we only need to save those registers
|
/* In the normal case we only need to save those registers
|
||||||
@ -12917,11 +12931,6 @@ arm_compute_save_reg_mask (void)
|
|||||||
| (1 << LR_REGNUM)
|
| (1 << LR_REGNUM)
|
||||||
| (1 << PC_REGNUM);
|
| (1 << PC_REGNUM);
|
||||||
|
|
||||||
/* Volatile functions do not return, so there
|
|
||||||
is no need to save any other registers. */
|
|
||||||
if (IS_VOLATILE (func_type))
|
|
||||||
return save_reg_mask;
|
|
||||||
|
|
||||||
save_reg_mask |= arm_compute_save_reg0_reg12_mask ();
|
save_reg_mask |= arm_compute_save_reg0_reg12_mask ();
|
||||||
|
|
||||||
/* Decide if we need to save the link register.
|
/* Decide if we need to save the link register.
|
||||||
|
Loading…
Reference in New Issue
Block a user