aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorAndrew Stubbs <andrew.stubbs@st.com>2009-03-18 15:28:24 +0000
committerAndrew Stubbs <andrew.stubbs@st.com>2009-03-18 15:28:24 +0000
commit42e5fcbf34e8d4850abaef7b3e6021348e59eedd (patch)
tree2f216dc0fef9405c162ab403afc3638a2ee67144 /gas
parente9dfee340cc44e525f140d10d569c2306439134b (diff)
downloadgdb-42e5fcbf34e8d4850abaef7b3e6021348e59eedd.zip
gdb-42e5fcbf34e8d4850abaef7b3e6021348e59eedd.tar.gz
gdb-42e5fcbf34e8d4850abaef7b3e6021348e59eedd.tar.bz2
2009-03-18 Andrew Stubbs <ams@codesourcery.com>
gas/ * config/tc-arm.c (md_apply_fix): Check BFD_RELOC_ARM_IMMEDIATE and BFD_RELOC_ARM_ADRL_IMMEDIATE value is in the correct section. Check BFD_RELOC_ARM_ADRL_IMMEDIATE has a defined symbol. gas/testsuites/ * gas/arm/adr-invalid.d: New file. * gas/arm/adr-invalid.l: New file. * gas/arm/adr-invalid.s: New file.
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog6
-rw-r--r--gas/config/tc-arm.c27
-rw-r--r--gas/testsuite/ChangeLog6
-rw-r--r--gas/testsuite/gas/arm/adr-invalid.d2
-rw-r--r--gas/testsuite/gas/arm/adr-invalid.l5
-rw-r--r--gas/testsuite/gas/arm/adr-invalid.s12
6 files changed, 58 insertions, 0 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 35d60da..78e8687 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,9 @@
+2009-03-18 Andrew Stubbs <ams@codesourcery.com>
+
+ * config/tc-arm.c (md_apply_fix): Check BFD_RELOC_ARM_IMMEDIATE and
+ BFD_RELOC_ARM_ADRL_IMMEDIATE value is in the correct section.
+ Check BFD_RELOC_ARM_ADRL_IMMEDIATE has a defined symbol.
+
2009-03-18 Alan Modra <amodra@bigpond.net.au>
* as.h: Include alloca-conf.h instead of config.h and remove
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
index bb783bd..98d8b7f 100644
--- a/gas/config/tc-arm.c
+++ b/gas/config/tc-arm.c
@@ -18537,6 +18537,15 @@ md_apply_fix (fixS * fixP,
break;
}
+ if (fixP->fx_addsy
+ && S_GET_SEGMENT (fixP->fx_addsy) != seg)
+ {
+ as_bad_where (fixP->fx_file, fixP->fx_line,
+ _("symbol %s is in a different section"),
+ S_GET_NAME (fixP->fx_addsy));
+ break;
+ }
+
newimm = encode_arm_immediate (value);
temp = md_chars_to_number (buf, INSN_SIZE);
@@ -18560,6 +18569,24 @@ md_apply_fix (fixS * fixP,
unsigned int highpart = 0;
unsigned int newinsn = 0xe1a00000; /* nop. */
+ if (fixP->fx_addsy
+ && ! S_IS_DEFINED (fixP->fx_addsy))
+ {
+ as_bad_where (fixP->fx_file, fixP->fx_line,
+ _("undefined symbol %s used as an immediate value"),
+ S_GET_NAME (fixP->fx_addsy));
+ break;
+ }
+
+ if (fixP->fx_addsy
+ && S_GET_SEGMENT (fixP->fx_addsy) != seg)
+ {
+ as_bad_where (fixP->fx_file, fixP->fx_line,
+ _("symbol %s is in a different section"),
+ S_GET_NAME (fixP->fx_addsy));
+ break;
+ }
+
newimm = encode_arm_immediate (value);
temp = md_chars_to_number (buf, INSN_SIZE);
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index 1ef1ed3..d5e9588 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2009-03-18 Andrew Stubbs <ams@codesourcery.com>
+
+ * gas/arm/adr-invalid.d: New file.
+ * gas/arm/adr-invalid.l: New file.
+ * gas/arm/adr-invalid.s: New file.
+
2009-03-14 Richard Sandiford <r.sandiford@uk.ibm.com>
* gas/ppc/textalign-xcoff-001.d: Expect the section VMAs to be
diff --git a/gas/testsuite/gas/arm/adr-invalid.d b/gas/testsuite/gas/arm/adr-invalid.d
new file mode 100644
index 0000000..d8043dc
--- /dev/null
+++ b/gas/testsuite/gas/arm/adr-invalid.d
@@ -0,0 +1,2 @@
+# name: Invalid use of ADR and ADRL
+# error-output: adr-invalid.l
diff --git a/gas/testsuite/gas/arm/adr-invalid.l b/gas/testsuite/gas/arm/adr-invalid.l
new file mode 100644
index 0000000..817646e
--- /dev/null
+++ b/gas/testsuite/gas/arm/adr-invalid.l
@@ -0,0 +1,5 @@
+[^:]*: Assembler messages:
+[^:]*:3: Error: symbol var is in a different section
+[^:]*:4: Error: undefined symbol undefinedvar used as an immediate value
+[^:]*:5: Error: symbol var is in a different section
+[^:]*:6: Error: undefined symbol undefinedvar used as an immediate value
diff --git a/gas/testsuite/gas/arm/adr-invalid.s b/gas/testsuite/gas/arm/adr-invalid.s
new file mode 100644
index 0000000..8ff3860
--- /dev/null
+++ b/gas/testsuite/gas/arm/adr-invalid.s
@@ -0,0 +1,12 @@
+ .text
+start:
+ adr r0, var
+ adr r0, undefinedvar
+ adrl r1, var
+ adrl r1, undefinedvar
+
+ .data
+ .globl var
+var:
+ .word 0x00000000
+