diff options
author | Andrew Stubbs <andrew.stubbs@st.com> | 2009-03-18 15:28:24 +0000 |
---|---|---|
committer | Andrew Stubbs <andrew.stubbs@st.com> | 2009-03-18 15:28:24 +0000 |
commit | 42e5fcbf34e8d4850abaef7b3e6021348e59eedd (patch) | |
tree | 2f216dc0fef9405c162ab403afc3638a2ee67144 /gas | |
parent | e9dfee340cc44e525f140d10d569c2306439134b (diff) | |
download | gdb-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/ChangeLog | 6 | ||||
-rw-r--r-- | gas/config/tc-arm.c | 27 | ||||
-rw-r--r-- | gas/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gas/testsuite/gas/arm/adr-invalid.d | 2 | ||||
-rw-r--r-- | gas/testsuite/gas/arm/adr-invalid.l | 5 | ||||
-rw-r--r-- | gas/testsuite/gas/arm/adr-invalid.s | 12 |
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 + |