]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - gdb/aarch32-linux-nat.c
Update copyright year range in all GDB files.
[thirdparty/binutils-gdb.git] / gdb / aarch32-linux-nat.c
index 568dfa60ac03e52d99b6dfa7249fc68868a6cf2b..e23dbb1bbbeaabf0f8f35d9406dd3e6657b56f81 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999-2016 Free Software Foundation, Inc.
+/* Copyright (C) 1999-2019 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -34,16 +34,20 @@ aarch32_gp_regcache_supply (struct regcache *regcache, uint32_t *regs,
   int regno;
 
   for (regno = ARM_A1_REGNUM; regno < ARM_PC_REGNUM; regno++)
-    regcache_raw_supply (regcache, regno, &regs[regno]);
+    regcache->raw_supply (regno, &regs[regno]);
 
   if (arm_apcs_32)
-    regcache_raw_supply (regcache, ARM_PS_REGNUM, &regs[ARM_CPSR_GREGNUM]);
+    {
+      /* Clear reserved bits bit 20 to bit 23.  */
+      regs[ARM_CPSR_GREGNUM] &= 0xff0fffff;
+      regcache->raw_supply (ARM_PS_REGNUM, &regs[ARM_CPSR_GREGNUM]);
+    }
   else
-    regcache_raw_supply (regcache, ARM_PS_REGNUM, &regs[ARM_PC_REGNUM]);
+    regcache->raw_supply (ARM_PS_REGNUM, &regs[ARM_PC_REGNUM]);
 
   regs[ARM_PC_REGNUM] = gdbarch_addr_bits_remove
-                         (get_regcache_arch (regcache), regs[ARM_PC_REGNUM]);
-  regcache_raw_supply (regcache, ARM_PC_REGNUM, &regs[ARM_PC_REGNUM]);
+                         (regcache->arch (), regs[ARM_PC_REGNUM]);
+  regcache->raw_supply (ARM_PC_REGNUM, &regs[ARM_PC_REGNUM]);
 }
 
 /* Collect GP registers from REGCACHE to buffer REGS.  ARM_APCS_32 is
@@ -57,14 +61,20 @@ aarch32_gp_regcache_collect (const struct regcache *regcache, uint32_t *regs,
 
   for (regno = ARM_A1_REGNUM; regno <= ARM_PC_REGNUM; regno++)
     {
-      if (REG_VALID == regcache_register_status (regcache, regno))
-       regcache_raw_collect (regcache, regno, &regs[regno]);
+      if (REG_VALID == regcache->get_register_status (regno))
+       regcache->raw_collect (regno, &regs[regno]);
     }
 
   if (arm_apcs_32
-      && REG_VALID == regcache_register_status (regcache, ARM_PS_REGNUM))
-    regcache_raw_collect (regcache, ARM_PS_REGNUM,
-                         &regs[ARM_CPSR_GREGNUM]);
+      && REG_VALID == regcache->get_register_status (ARM_PS_REGNUM))
+    {
+      uint32_t cpsr = regs[ARM_CPSR_GREGNUM];
+
+      regcache->raw_collect (ARM_PS_REGNUM, &regs[ARM_CPSR_GREGNUM]);
+      /* Keep reserved bits bit 20 to bit 23.  */
+      regs[ARM_CPSR_GREGNUM] = ((regs[ARM_CPSR_GREGNUM] & 0xff0fffff)
+                               | (cpsr & 0x00f00000));
+    }
 }
 
 /* Supply VFP registers contents, stored in REGS, to REGCACHE.
@@ -77,11 +87,9 @@ aarch32_vfp_regcache_supply (struct regcache *regcache, gdb_byte *regs,
   int regno;
 
   for (regno = 0; regno < vfp_register_count; regno++)
-    regcache_raw_supply (regcache, regno + ARM_D0_REGNUM,
-                        regs + regno * 8);
+    regcache->raw_supply (regno + ARM_D0_REGNUM, regs + regno * 8);
 
-  regcache_raw_supply (regcache, ARM_FPSCR_REGNUM,
-                      regs + 32 * 8);
+  regcache->raw_supply (ARM_FPSCR_REGNUM, regs + 32 * 8);
 }
 
 /* Collect VFP registers from REGCACHE to buffer REGS.
@@ -94,7 +102,7 @@ aarch32_vfp_regcache_collect (const struct regcache *regcache, gdb_byte *regs,
   int regno;
 
   for (regno = 0; regno < vfp_register_count; regno++)
-    regcache_raw_collect (regcache, regno + ARM_D0_REGNUM, regs + regno * 8);
+    regcache->raw_collect (regno + ARM_D0_REGNUM, regs + regno * 8);
 
-  regcache_raw_collect (regcache, ARM_FPSCR_REGNUM, regs + 32 * 8);
+  regcache->raw_collect (ARM_FPSCR_REGNUM, regs + 32 * 8);
 }