bug-binutils
[Top][All Lists]
Advanced

[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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]