arm.c (arm_get_frame_offsets): Don't use fixed regs for stack alignment padding.
[gcc.git] / gcc / config / arm / arm.c
index 376274a6cef69c2721c8ae12426c0ac8d0bdb2aa..ca84604ddea6c93888448b41ed0baf97caf34927 100644 (file)
@@ -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;