aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorAndrew Burgess <andrew.burgess@embecosm.com>2015-01-04 00:03:16 +0000
committerAndrew Burgess <andrew.burgess@embecosm.com>2015-01-10 00:04:35 +0000
commit491793b5cbcc9f42662a2da8427c0022d7b03f9c (patch)
tree634079837ab2ecd6c164308cc851986692d6557d /gas
parente321dd9a810dd92c5f739e0e4e35ceec2a3e951a (diff)
downloadfsf-binutils-gdb-491793b5cbcc9f42662a2da8427c0022d7b03f9c.zip
fsf-binutils-gdb-491793b5cbcc9f42662a2da8427c0022d7b03f9c.tar.gz
fsf-binutils-gdb-491793b5cbcc9f42662a2da8427c0022d7b03f9c.tar.bz2
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.
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog5
-rw-r--r--gas/config/tc-avr.c1
-rw-r--r--gas/testsuite/ChangeLog5
-rw-r--r--gas/testsuite/gas/avr/large-debug-line-table.d15
-rw-r--r--gas/testsuite/gas/avr/large-debug-line-table.s16
5 files changed, 42 insertions, 0 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index b703835..97422c1 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -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
diff --git a/gas/config/tc-avr.c b/gas/config/tc-avr.c
index 19326a1..5a0b405 100644
--- a/gas/config/tc-avr.c
+++ b/gas/config/tc-avr.c
@@ -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;
}
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index 541c329..a547a3b 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -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.
diff --git a/gas/testsuite/gas/avr/large-debug-line-table.d b/gas/testsuite/gas/avr/large-debug-line-table.d
new file mode 100644
index 0000000..31ca7ed
--- /dev/null
+++ b/gas/testsuite/gas/avr/large-debug-line-table.d
@@ -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
+
+#...
diff --git a/gas/testsuite/gas/avr/large-debug-line-table.s b/gas/testsuite/gas/avr/large-debug-line-table.s
new file mode 100644
index 0000000..8e19ba7
--- /dev/null
+++ b/gas/testsuite/gas/avr/large-debug-line-table.s
@@ -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