gas/avr: Prevent incorrect overflow errors for diff fixups.

When fixups are converted to a difference type within md_apply_fix, we
previously left the contents of VALP (the value that was initially
computed within write.c:fixup_segment) unchanged.  This is harmless,
except that this value is used within write.c:fixup_segment once we
return from md_apply_fix to perform an overflow check.

In some cases, the value computed in write.c:fixup_segment is so wrong
that an overflow error can be triggered.  These errors are incorrect.

This patch avoids the overflow errors by adjusting the value in
write.c:fixup_segment using the VALP pointer in md_apply_fix.

A test for this issue is included.

gas/ChangeLog:

	* config/tc-avr.c (md_apply_fix): Update the contents of VALP for
	diff fixups.

gas/testsuite/ChangeLog:

	* gas/avr/large-debug-line-table.d: New file.
	* gas/avr/large-debug-line-table.s: New file.
This commit is contained in:
Andrew Burgess
2015-01-04 00:03:16 +00:00
parent e321dd9a81
commit 491793b5cb
5 changed files with 42 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2015-01-10 Andrew Burgess <andrew.burgess@embecosm.com>
* config/tc-avr.c (md_apply_fix): Update the contents of VALP for
diff fixups.
2015-01-09 Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
* config/tc-arm.c (arm_cpus): Add support for APM X-Gene 1 and

View File

@ -1344,6 +1344,7 @@ md_apply_fix (fixS *fixP, valueT * valP, segT seg)
value = S_GET_VALUE (fixP->fx_addsy) +
fixP->fx_offset - S_GET_VALUE (fixP->fx_subsy);
*valP = value;
fixP->fx_subsy = NULL;
}

View File

@ -1,3 +1,8 @@
2015-01-10 Andrew Burgess <andrew.burgess@embecosm.com>
* gas/avr/large-debug-line-table.d: New file.
* gas/avr/large-debug-line-table.s: New file.
2015-01-01 Alan Modra <amodra@gmail.com>
Update year range in copyright notice of all files.

View File

@ -0,0 +1,15 @@
#name: AVR, large .debug_line table
#as: -mlink-relax -mmcu=avrxmega2
#objdump: --dwarf=decodedline
#source: large-debug-line-table.s
#target: avr-*-*
.*: file format elf32-avr
Decoded dump of debug contents of section \.debug_line:
CU: large-debug-line-table\.c:
File name Line number Starting address
large-debug-line-table\.c 1 0
#...

View File

@ -0,0 +1,16 @@
.file 1 "large-debug-line-table.c"
.text
.global _start
_start:
.rept 4000
.loc 1 1
nop
nop
nop
nop
nop
nop
nop
nop
nop
.endr