aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog5
-rw-r--r--bfd/elf-m10300.c4
-rw-r--r--ld/testsuite/ChangeLog8
-rw-r--r--ld/testsuite/ld-mn10300/i135409-5.d7
-rw-r--r--ld/testsuite/ld-mn10300/i135409-5.s8
-rw-r--r--ld/testsuite/ld-mn10300/i135409-5.t23
-rw-r--r--ld/testsuite/ld-mn10300/mn10300.exp10
7 files changed, 62 insertions, 3 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 8dc7003..e78868e 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,8 @@
+2007-11-28 Nick Clifton <nickc@redhat.com>
+
+ * elf-m10300.c (mn10300_elf_relax_section): Extend previous fix to
+ cover forward jumps.
+
2007-11-21 Nick Clifton <nickc@redhat.com>
* elf-m10300.c (mn10300_elf_relax_section): Allow for alignment
diff --git a/bfd/elf-m10300.c b/bfd/elf-m10300.c
index 2695217..af2fff3 100644
--- a/bfd/elf-m10300.c
+++ b/bfd/elf-m10300.c
@@ -2736,7 +2736,7 @@ mn10300_elf_relax_section (bfd *abfd,
bfd_vma aend = irel->r_offset;
aend = BFD_ALIGN (aend, 1 << irel->r_addend);
- adj = 2*adj - adj - 1;
+ adj = 2 * adj - adj - 1;
/* Record the biggest adjustmnet. Skip any alignment at the
end of our section. */
@@ -2963,7 +2963,7 @@ mn10300_elf_relax_section (bfd *abfd,
able to relax. */
/* Account for jumps across alignment boundaries using
align_gap_adjustment. */
- if (value < 0x8001 - align_gap_adjustment
+ if ((bfd_signed_vma) value < 0x8001 - (bfd_signed_vma) align_gap_adjustment
&& ((bfd_signed_vma) value > -0x8000 + (bfd_signed_vma) align_gap_adjustment))
{
unsigned char code;
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index 7e8719a..fc7671a 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,3 +1,11 @@
+2007-11-28 Nick Clifton <nickc@redhat.com>
+
+ * ld-mn10300/i135409-5.s: New test case. Check for relaxation to
+ a 16-bit backward jump instruction.
+ * ld-mn10300/i135409-5.t: Linker script for the new test.
+ * ld-mn10300/i135409-5.d: Expected disassembly of new test.
+ * ld-mn10300/mn10300.exp: Run the new test.
+
2007-11-21 Nick Clifton <nickc@redhat.com>
* ld-mn10300/i135409-4.s: New test case. Check for relaxation to
diff --git a/ld/testsuite/ld-mn10300/i135409-5.d b/ld/testsuite/ld-mn10300/i135409-5.d
new file mode 100644
index 0000000..dbff701
--- /dev/null
+++ b/ld/testsuite/ld-mn10300/i135409-5.d
@@ -0,0 +1,7 @@
+
+tmpdir/i135409-5.x: file format elf32-.*
+
+Disassembly of section .text:
+
+0+0700 <_start>:
+ 700:[ ]+cc 00 f9[ ]+jmp[ ]+0 \<L001\>
diff --git a/ld/testsuite/ld-mn10300/i135409-5.s b/ld/testsuite/ld-mn10300/i135409-5.s
new file mode 100644
index 0000000..23897e8
--- /dev/null
+++ b/ld/testsuite/ld-mn10300/i135409-5.s
@@ -0,0 +1,8 @@
+ .text
+ .global _start
+_start:
+ jmp L001
+
+ .section .text1
+L001:
+ nop
diff --git a/ld/testsuite/ld-mn10300/i135409-5.t b/ld/testsuite/ld-mn10300/i135409-5.t
new file mode 100644
index 0000000..8b42814
--- /dev/null
+++ b/ld/testsuite/ld-mn10300/i135409-5.t
@@ -0,0 +1,23 @@
+SECTIONS
+{
+ . = 0x0;
+ .text1 :
+ {
+ *(.text1)
+ }
+
+ . = 0x700;
+ .text :
+ {
+ *(.text)
+ }
+ . = 0x8100;
+ .bss :
+ {
+ *(.bss)
+ }
+ .data :
+ {
+ *(.data)
+ }
+}
diff --git a/ld/testsuite/ld-mn10300/mn10300.exp b/ld/testsuite/ld-mn10300/mn10300.exp
index f67881f..edb1470 100644
--- a/ld/testsuite/ld-mn10300/mn10300.exp
+++ b/ld/testsuite/ld-mn10300/mn10300.exp
@@ -80,13 +80,21 @@ set mn10300_tests {
"i135409-3.x"
}
{
- "adjusting a 16 bit branch"
+ "adjusting a 16-bit forward branch"
"-Ti135409-4.t -relax"
""
{ "i135409-4.s" }
{ {objdump -d i135409-4.d} }
"i135409-4.x"
}
+ {
+ "adjusting a 16-bit backward branch"
+ "-Ti135409-5.t -relax"
+ ""
+ { "i135409-5.s" }
+ { {objdump -d i135409-5.d} }
+ "i135409-5.x"
+ }
}
run_ld_link_tests $mn10300_tests