OK to apply.
On 4/4/20 2:18 AM, Nagaraju Mekala wrote:
Hello All,
Fixed missing save of r18 in fast_interrupt.
Register 18 is used as a clobber register, and must be stored when entering a
fast_interrupt. Before this fix, register 18 was only saved if it was used
directly in the interrupt function.
However, if the fast_interrupt function called a function that used r18, the register would not be saved, and thus be mangled upon returning from the interrupt.
Changelog
2020-04-04 Klaus Petersen <klauspeter...@gmail.com>
* gcc/config/microblaze/microblaze.c: Check for fast_interrupt in
microblaze_must_save_register.
Signed-off-by: Klaus Petersen <klauspeter...@gmail.com>
Signed-off-by :Nagaraju Mekala <nmek...@xilix.com>
diff --git a/gcc/config/microblaze/microblaze.c
b/gcc/config/microblaze/microblaze.c
index b4754b1..67e393d 100644
--- a/gcc/config/microblaze/microblaze.c
+++ b/gcc/config/microblaze/microblaze.c
@@ -2035,7 +2035,7 @@ microblaze_must_save_register (int regno)
{
if (df_regs_ever_live_p (regno)
|| regno == MB_ABI_MSR_SAVE_REG
- || (interrupt_handler
+ || ((interrupt_handler || fast_interrupt)
&& (regno == MB_ABI_ASM_TEMP_REGNUM
|| regno == MB_ABI_EXCEPTION_RETURN_ADDR_REGNUM)))
return 1;
Attached is the patch.
Thanks
Nagaraju
--
Michael Eager ea...@eagercon.com
1960 Park Blvd., Palo Alto, CA 94306