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.
This commit is contained in:
Andrew Stubbs 2009-03-18 15:28:24 +00:00
parent e9dfee340c
commit 42e5fcbf34
6 changed files with 58 additions and 0 deletions

View File

@ -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

View File

@ -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);

View File

@ -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

View File

@ -0,0 +1,2 @@
# name: Invalid use of ADR and ADRL
# error-output: adr-invalid.l

View File

@ -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

View File

@ -0,0 +1,12 @@
.text
start:
adr r0, var
adr r0, undefinedvar
adrl r1, var
adrl r1, undefinedvar
.data
.globl var
var:
.word 0x00000000