PR savannah/3331:

* elf32-m68hc11.c (m68hc11_elf_relax_section): Clear prev_insn_group
	when we couldn't relax something.
	* ld-m68hc11/bug-3331.d: New test.
	* ld-m68hc11/bug-3331.s: New file.
This commit is contained in:
Stephane Carrez 2003-04-26 11:53:36 +00:00
parent aaa222e7b0
commit d204f4c0f9
5 changed files with 49 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2003-04-26 Stephane Carrez <stcarrez@nerim.fr>
PR savannah/3331:
* elf32-m68hc11.c (m68hc11_elf_relax_section): Clear prev_insn_group
when we couldn't relax something.
2003-04-25 Alan Modra <amodra@bigpond.net.au>
* elflink.h (elf_merge_symbol): When we find a regular definition

View File

@ -1073,6 +1073,7 @@ m68hc11_elf_relax_section (abfd, sec, link_info, again)
}
}
prev_insn_branch = 0;
prev_insn_group = 0;
}
if (free_relocs != NULL)

View File

@ -1,3 +1,8 @@
2003-04-26 Stephane Carrez <stcarrez@nerim.fr>
* ld-m68hc11/bug-3331.d: New test.
* ld-m68hc11/bug-3331.s: New file.
2003-04-25 Nick Clifton <nickc@redhat.com>
J"orn Rennecke <joern.rennecke@superh.com>

View File

@ -0,0 +1,14 @@
#source: bug-3331.s
#as: -m68hc11
#ld: --relax
#objdump: -d --prefix-addresses -r
#target: m6811-*-* m6812-*-*
.*: +file format elf32-m68hc11
Disassembly of section .text:
0+8000 <_start> ldx #0+1100 <__data_section_start>
0+8003 <_start\+0x3> bset 0,x \#\$04
0+8006 <L1> ldd \#0+2 <__bss_size\+0x2>
0+8009 <L1\+0x3> std \*0+ <__bss_size>
0+800b <L1\+0x5> rts

View File

@ -0,0 +1,23 @@
;;; Bug #3331: Invalid group relaxation, bset uses an invalid address
;;; http://savannah.gnu.org/bugs/?func=detailbug&bug_id=3331&group_id=2424
;;;
.sect .text
.globl _start
_start:
.relax L1
ldx #foo ;; This relax group must not be changed.
bset 0,x #4
L1:
ldd #2
std table ;; This instruction uses a symbol in page0
;; and it triggered the relaxation of the
;; previous relax group
rts
.sect .page0
.globl table
table: .long 0
.sect .data
.globl foo
foo: .long 0