[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug ld/13352] microblaze linker relocation bug: R_MICROBLAZE_64_NONE
From: |
bfkeane at gmail dot com |
Subject: |
[Bug ld/13352] microblaze linker relocation bug: R_MICROBLAZE_64_NONE |
Date: |
Thu, 27 Oct 2011 17:40:17 +0000 |
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.