mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2024-11-24 04:29:49 +00:00
Fix PR10373 which is SH relax bug.
This commit is contained in:
parent
b131d1fcfa
commit
8c78401680
@ -1,3 +1,8 @@
|
||||
2014-08-01 Takashi Yoshii <yoshii.takashi@renesas.com>
|
||||
|
||||
PR 10373
|
||||
* elf32-sh.c (sh_elf_relax_section): Add jmp to bra relaxing.
|
||||
|
||||
2014-07-29 Matthew Fortune <matthew.fortune@imgtec.com>
|
||||
|
||||
* elfxx-mips.c (ABI_O32_P, MIPS_ELF_ABIFLAGS_SECTION_NAME_P): New macro.
|
||||
|
@ -702,10 +702,10 @@ sh_elf_relax_section (bfd *abfd, asection *sec,
|
||||
elf_section_data (sec)->this_hdr.contents = contents;
|
||||
symtab_hdr->contents = (unsigned char *) isymbuf;
|
||||
|
||||
/* Replace the jsr with a bsr. */
|
||||
/* Replace the jmp/jsr with a bra/bsr. */
|
||||
|
||||
/* Change the R_SH_USES reloc into an R_SH_IND12W reloc, and
|
||||
replace the jsr with a bsr. */
|
||||
replace the jmp/jsr with a bra/bsr. */
|
||||
irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irelfn->r_info), R_SH_IND12W);
|
||||
/* We used to test (ELF32_R_SYM (irelfn->r_info) < symtab_hdr->sh_info)
|
||||
here, but that only checks if the symbol is an external symbol,
|
||||
@ -716,7 +716,10 @@ sh_elf_relax_section (bfd *abfd, asection *sec,
|
||||
/* We can't fully resolve this yet, because the external
|
||||
symbol value may be changed by future relaxing. We let
|
||||
the final link phase handle it. */
|
||||
bfd_put_16 (abfd, (bfd_vma) 0xb000, contents + irel->r_offset);
|
||||
if (bfd_get_16 (abfd, contents + irel->r_offset) & 0x0020)
|
||||
bfd_put_16 (abfd, (bfd_vma) 0xa000, contents + irel->r_offset);
|
||||
else
|
||||
bfd_put_16 (abfd, (bfd_vma) 0xb000, contents + irel->r_offset);
|
||||
|
||||
irel->r_addend = -4;
|
||||
|
||||
|
@ -1,3 +1,9 @@
|
||||
2014-08-01 Takashi Yoshii <yoshii.takashi@renesas.com>
|
||||
|
||||
PR 10373
|
||||
* ld-sh/sh1.s: Add jmp relaxing test.
|
||||
* ld-sh/sh.exp: Likewise.
|
||||
|
||||
2014-08-01 Takashi Yoshii <yoshii.takashi@renesas.com>
|
||||
|
||||
PR 10378
|
||||
|
@ -49,7 +49,7 @@ if ![ld_assemble $as "-relax $srcdir/$subdir/sh1.s" tmpdir/sh1.o] {
|
||||
verbose "bad output from nm"
|
||||
fail $testsimple
|
||||
} else {
|
||||
if {$nm_output(bar) != $nm_output(foo) + 4} {
|
||||
if {$nm_output(bar) != $nm_output(foo) + 0xc} {
|
||||
send_log "foo == $nm_output(foo)\n"
|
||||
verbose "foo == $nm_output(foo)"
|
||||
send_log "bar == $nm_output(bar)\n"
|
||||
@ -149,7 +149,7 @@ if [istarget sh*-*linux*] {
|
||||
}
|
||||
|
||||
if {![ld_assemble $as "-relax tmpdir/start.s" tmpdir/start.o] \
|
||||
|| ![ld_compile $CC "-O -mrelax $srcdir/$subdir/sh2.c" tmpdir/sh2.o]} {
|
||||
|| ![ld_compile $CC "-O -mrelax -foptimize-sibling-calls $srcdir/$subdir/sh2.c" tmpdir/sh2.o]} {
|
||||
unresolved $testlink
|
||||
unresolved $testjsr
|
||||
unresolved $testrun
|
||||
@ -168,7 +168,8 @@ pass $testlink
|
||||
send_log "$objdump -d tmpdir/sh2\n"
|
||||
verbose "$objdump -d tmpdir/sh2"
|
||||
catch "exec $objdump -d tmpdir/sh2" exec_output
|
||||
if [string match "*jsr*" $exec_output] {
|
||||
if {[string match "*jsr*" $exec_output]
|
||||
|| [string match "*jmp*" $exec_output]} {
|
||||
fail $testjsr
|
||||
} else {
|
||||
pass $testjsr
|
||||
|
@ -4,7 +4,12 @@ L1:
|
||||
mov.l L2,r0
|
||||
.uses L1
|
||||
jsr @r0
|
||||
nop
|
||||
.uses L1
|
||||
jmp @r0
|
||||
nop
|
||||
rts
|
||||
nop
|
||||
.align 2
|
||||
L2:
|
||||
.long bar
|
||||
|
Loading…
Reference in New Issue
Block a user