+arm_supply_gregset (struct regcache *regcache, struct reg *gregset)
+{
+ int regno;
+ CORE_ADDR r_pc;
+
+ /* Integer registers. */
+ for (regno = ARM_A1_REGNUM; regno < ARM_SP_REGNUM; regno++)
+ regcache_raw_supply (regcache, regno, (char *) &gregset->r[regno]);
+
+ regcache_raw_supply (regcache, ARM_SP_REGNUM,
+ (char *) &gregset->r_sp);
+ regcache_raw_supply (regcache, ARM_LR_REGNUM,
+ (char *) &gregset->r_lr);
+ /* This is ok: we're running native... */
+ r_pc = gdbarch_addr_bits_remove (get_regcache_arch (regcache), gregset->r_pc);
+ regcache_raw_supply (regcache, ARM_PC_REGNUM, (char *) &r_pc);
+
+ if (arm_apcs_32)
+ regcache_raw_supply (regcache, ARM_PS_REGNUM,
+ (char *) &gregset->r_cpsr);
+ else
+ regcache_raw_supply (regcache, ARM_PS_REGNUM,
+ (char *) &gregset->r_pc);
+}
+
+static void
+arm_supply_fparegset (struct regcache *regcache, struct fpreg *fparegset)
+{
+ int regno;
+
+ for (regno = ARM_F0_REGNUM; regno <= ARM_F7_REGNUM; regno++)
+ regcache_raw_supply (regcache, regno,
+ (char *) &fparegset->fpr[regno - ARM_F0_REGNUM]);
+
+ regcache_raw_supply (regcache, ARM_FPS_REGNUM,
+ (char *) &fparegset->fpr_fpsr);
+}
+
+static void
+fetch_register (struct regcache *regcache, int regno)