Index: gcc/unwind-pnacl.h |
diff --git a/gcc/unwind-pnacl.h b/gcc/unwind-pnacl.h |
index cd5e839f4db9b6e0474c0c03ece19bc60a402fd7..1d5ff86d6fc09d9f6798e9dbd510d80dc1292dc3 100644 |
--- a/gcc/unwind-pnacl.h |
+++ b/gcc/unwind-pnacl.h |
@@ -24,7 +24,12 @@ |
#if defined(__x86_64__) || defined(__i386__) |
#define DWARF_FRAME_REGISTERS 17 |
#elif defined(__arm__) |
-#define DWARF_FRAME_REGISTERS 16 |
+/* |
+ * r0-15, and map 256-287 for d0-d31 into regno 16 -> 48. |
+ * See: |
+ *http://infocenter.arm.com/help/topic/com.arm.doc.ihi0040b/IHI0040B_aadwarf.pdf |
+ */ |
+#define DWARF_FRAME_REGISTERS 48 |
#elif defined(__mips__) |
/* |
* Number of hardware registers we use in PNaCl. We have: |
@@ -61,11 +66,14 @@ |
definition of __builtin_init_dwarf_reg_size_table(). */ |
#elif defined(__arm__) |
-/* All regs are 32bit = 4 bytes */ |
-#define __builtin_init_dwarf_reg_size_table(table) do { \ |
- int i; \ |
- for (i = 0; i < DWARF_FRAME_REGISTERS; ++i) \ |
- table[i] = 4; \ |
+#define __builtin_init_dwarf_reg_size_table(table) do { \ |
+ int i; \ |
+ /* Integer registers are 32bit. */ \ |
+ for (i = 0; i < 16; ++i) \ |
+ table[i] = 4; \ |
+ /* The rest are VFPv3/NEON (64bit). */ \ |
+ for (i = 16; i < DWARF_FRAME_REGISTERS; ++i) \ |
+ table[i] = 8; \ |
} while (0) |
#elif defined(__mips__) |
@@ -107,4 +115,3 @@ |
#endif |
#endif /* UNWIND_PNACL_H */ |
- |