Ensure that padding in the constant pool uses constant values.
authorNick Clifton <nickc@redhat.com>
Wed, 11 May 2016 11:51:04 +0000 (12:51 +0100)
committerNick Clifton <nickc@redhat.com>
Wed, 11 May 2016 11:53:12 +0000 (12:53 +0100)
PR target/20068
* config/tc-arm.c (add_to_lit_pool): Ensure that the padding added
to the pool uses O_constant.
* testsuite/gas/arm/pr20068.s: New test.
* testsuite/gas/arm/pr20068.d: Test driver.

gas/ChangeLog
gas/config/tc-arm.c
gas/testsuite/gas/arm/pr20068.d [new file with mode: 0644]
gas/testsuite/gas/arm/pr20068.s [new file with mode: 0644]

index cf46ef9464e3420a965a6dec160163daf75ca071..6a059e72029c4e3874aaeac7b093717617ccbf91 100644 (file)
@@ -1,3 +1,11 @@
+2016-05-11  Nick Clifton  <nickc@redhat.com>
+
+       PR target/20068
+       * config/tc-arm.c (add_to_lit_pool): Ensure that the padding added
+       to the pool uses O_constant.
+       * testsuite/gas/arm/pr20068.s: New test.
+       * testsuite/gas/arm/pr20068.d: Test driver.
+
 2016-05-11  Nick Clifton  <nickc@redhat.com>
 
        * testsuite/gas/arm/archv8m-cmse-base.d: Skip for non-ELF ARM targets.
index b5f378661e5b850c1081ef0d1f4fcb8f2584157e..3c7e0141a5d95f3e4b27387bc66f3615183d646a 100644 (file)
@@ -3288,6 +3288,7 @@ add_to_lit_pool (unsigned int nbytes)
                }
 
              pool->literals[entry] = inst.reloc.exp;
+             pool->literals[entry].X_op = O_constant;
              pool->literals[entry].X_add_number = 0;
              pool->literals[entry++].X_md = (PADDING_SLOT << 8) | 4;
              pool->next_free_entry += 1;
diff --git a/gas/testsuite/gas/arm/pr20068.d b/gas/testsuite/gas/arm/pr20068.d
new file mode 100644 (file)
index 0000000..b694c0e
--- /dev/null
@@ -0,0 +1,18 @@
+# name: PR20068 - Misaligned constant pool when running GAS on a 32-bit host.
+# as: -mfpu=vfpv3
+# objdump: -S
+
+.*:     file format .*
+
+
+Disassembly of section .text:
+
+00000000 <main>:
+   0:  e59f0008        ldr     r0, \[pc, #8\].*
+   4:  ed9f9b03        vldr    d9, \[pc, #12\].*
+   8:  e1a0f00e        mov     pc, lr
+   c:  00000000        .*
+  10:  12345678        .*
+  14:  00000000        .*
+  18:  00000fff        .*
+  1c:  0000fff0        .*
diff --git a/gas/testsuite/gas/arm/pr20068.s b/gas/testsuite/gas/arm/pr20068.s
new file mode 100644 (file)
index 0000000..483cc2e
--- /dev/null
@@ -0,0 +1,10 @@
+.global main
+
+main:
+LDR R0, =0x12345678
+@LDR R0, =0x87654321
+FLDD D9, =0xfff000000fff
+@FLDD D9, =0
+@FLDD D9, =0x0
+MOV PC, LR
+.ltorg