http://sourceware.org/bugzilla/show_bug.cgi?id=13352
--- Comment #1 from Barry Keane <bfkeane at gmail dot com> 2011-10-27 17:40:17 UTC --- I should clarify a little more. The problematic IMM+BRLID instruction pair lies at text addresses 0x100A8 and 0x100AC in the linker output. 100a8: b000fffe imm -2 100ac: b9f4015c brlid r15, 348 The target subroutine address (atoi0000) lies at 0x0208. The BRLID interprets its address as a PC-relative (not absolute) address, hence the linker relocation result should be the difference: atoi0000 address: 0x208: BRLID address: 0x100AC difference: 0xFFFF015C Instead the linker produces 0xFFFE015C, which is a bug. If you look at the .o assembler output you'll see that that the assembler produces a correct PC-relative address in which the IMM operand is 0xFFFE. 10270: b000fffe imm -2 10274: b9f4fd8c brlid r15, -628 // 0 <atoi0000> At this point (before relaxation) the target is more than 64KB away from the BRLID instruction: 0xFFFEFD8C (66164 decimal) bytes. After relaxation the target is less than 64KB away: 0xFFFF015C (65188 decimal) bytes. It looks to me like the linker's relaxation optimization updated the BRLID operand but neglected to update the IMM operand. -- Configure bugmail: http://sourceware.org/bugzilla/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are on the CC list for the bug. _______________________________________________ bug-binutils mailing list bug-binutils@gnu.org https://lists.gnu.org/mailman/listinfo/bug-binutils