diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/arm/arm.c | 6 |
2 files changed, 10 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 08722af..ecb96a5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2012-07-24 Roland McGrath <mcgrathr@google.com> + + * arm.c (arm_get_frame_offsets): Don't use fixed regs for + stack alignment padding. + 2012-07-24 Uros Bizjak <ubizjak@gmail.com> PR target/53961 diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 376274a..ca84604 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -16178,7 +16178,11 @@ arm_get_frame_offsets (void) else for (i = 4; i <= (TARGET_THUMB1 ? LAST_LO_REGNUM : 11); i++) { - if ((offsets->saved_regs_mask & (1 << i)) == 0) + /* Avoid fixed registers; they may be changed at + arbitrary times so it's unsafe to restore them + during the epilogue. */ + if (!fixed_regs[i] + && (offsets->saved_regs_mask & (1 << i)) == 0) { reg = i; break; |