Bug 21152 - Incorrect relocation handling of R_MIPS_HI16 / R_MIPS_LO16
Summary: Incorrect relocation handling of R_MIPS_HI16 / R_MIPS_LO16
Status: UNCONFIRMED
Alias: None
Product: binutils
Classification: Unclassified
Component: gold (show other bugs)
Version: 2.28
: P2 normal
Target Milestone: ---
Assignee: Cary Coutant
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2017-02-13 19:05 UTC by Jan Smets
Modified: 2017-02-14 15:25 UTC (History)
1 user (show)

See Also:
Host:
Target: mips64-unknown-elf
Build:
Last reconfirmed:


Attachments
testcase (499 bytes, text/plain)
2017-02-14 15:18 UTC, Jan Smets
Details
testcase a.s (166 bytes, text/plain)
2017-02-14 15:19 UTC, Jan Smets
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Jan Smets 2017-02-13 19:05:16 UTC
MIPS O32


BFD

(gdb) disas /rm cvmx_l2c_flush_mem_region_line_reuse,+0x40
Dump of assembler code from 0x2875728 to 0x2875768:
   0x02875728 <cvmx_l2c_flush_mem_region_line_reuse+0>: 27 bd ff d0     addiu   sp,sp,-48
   0x0287572c <cvmx_l2c_flush_mem_region_line_reuse+4>: af b3 00 1c     sw      s3,28(sp)
   0x02875730 <cvmx_l2c_flush_mem_region_line_reuse+8>: 3c 13 07 02     lui     s3,0x702
   0x02875734 <cvmx_l2c_flush_mem_region_line_reuse+12>:        8e 62 30 b8     lw      v0,12472(s3)
   0x02875738 <cvmx_l2c_flush_mem_region_line_reuse+16>:        af b5 00 24     sw      s5,36(sp)
   0x0287573c <cvmx_l2c_flush_mem_region_line_reuse+20>:        af b4 00 20     sw      s4,32(sp)
   0x02875740 <cvmx_l2c_flush_mem_region_line_reuse+24>:        af b2 00 18     sw      s2,24(sp)
   0x02875744 <cvmx_l2c_flush_mem_region_line_reuse+28>:        af b0 00 10     sw      s0,16(sp)
   0x02875748 <cvmx_l2c_flush_mem_region_line_reuse+32>:        af bf 00 2c     sw      ra,44(sp)
   0x0287574c <cvmx_l2c_flush_mem_region_line_reuse+36>:        af b6 00 28     sw      s6,40(sp)
   0x02875750 <cvmx_l2c_flush_mem_region_line_reuse+40>:        af b1 00 14     sw      s1,20(sp)

GOLD

(gdb) disas /rm cvmx_l2c_flush_mem_region_line_reuse,+0x40
Dump of assembler code from 0x2875728 to 0x2875768:
   0x02875728 <cvmx_l2c_flush_mem_region_line_reuse+0>: 27 bd ff d0     addiu   sp,sp,-48
   0x0287572c <cvmx_l2c_flush_mem_region_line_reuse+4>: af b3 00 1c     sw      s3,28(sp)
   0x02875730 <cvmx_l2c_flush_mem_region_line_reuse+8>: 6c cb 07 00     ldr     t3,1792(a2)           <<<<< should be lui
   0x02875734 <cvmx_l2c_flush_mem_region_line_reuse+12>:        bf 1a 00 00     cache   0x1a,0(t8)    <<<<< should be lw
   0x02875738 <cvmx_l2c_flush_mem_region_line_reuse+16>:        af b5 00 24     sw      s5,36(sp)
   0x0287573c <cvmx_l2c_flush_mem_region_line_reuse+20>:        af b4 00 20     sw      s4,32(sp)
   0x02875740 <cvmx_l2c_flush_mem_region_line_reuse+24>:        af b2 00 18     sw      s2,24(sp)
   0x02875744 <cvmx_l2c_flush_mem_region_line_reuse+28>:        af b0 00 10     sw      s0,16(sp)
   0x02875748 <cvmx_l2c_flush_mem_region_line_reuse+32>:        af bf 00 2c     sw      ra,44(sp)
   0x0287574c <cvmx_l2c_flush_mem_region_line_reuse+36>:        af b6 00 28     sw      s6,40(sp)
   0x02875750 <cvmx_l2c_flush_mem_region_line_reuse+40>:        af b1 00 14     sw      s1,20(sp)

GCC generated assembly 

    .set    macro
    .set    reorder
    .end    cvmx_l2c_flush_one_set_via_line_reuse
    .size   cvmx_l2c_flush_one_set_via_line_reuse, .-cvmx_l2c_flush_one_set_via_line_reuse
    .align  2
    .globl  cvmx_l2c_flush_mem_region_line_reuse
    .set    nomips16
    .set    nomicromips
    .ent    cvmx_l2c_flush_mem_region_line_reuse
    .type   cvmx_l2c_flush_mem_region_line_reuse, @function
cvmx_l2c_flush_mem_region_line_reuse:
    .frame  $sp,48,$31      # vars= 0, regs= 8/0, args= 16, gp= 0
    .mask   0x807f0000,-4
    .fmask  0x00000000,0
    addiu   $sp,$sp,-48
    sw  $19,28($sp)
    lui $19,%hi(indxalias$97671)
    lw  $2,%lo(indxalias$97671)($19)
    sw  $21,36($sp)
    sw  $20,32($sp)
    sw  $18,24($sp)
    sw  $16,16($sp)
    sw  $31,44($sp)
    sw  $22,40($sp)
    sw  $17,20($sp)
...
    .data
    .align  2
    .type   indxalias$97671, @object
    .size   indxalias$97671, 4
indxalias$97671:
    .word   -1
    .align  2
...
Comment 1 Jan Smets 2017-02-14 15:18:32 UTC
Created attachment 9828 [details]
testcase
Comment 2 Jan Smets 2017-02-14 15:19:48 UTC
Created attachment 9829 [details]
testcase a.s
Comment 3 Jan Smets 2017-02-14 15:20:11 UTC
I found the corruption occurred at an earlier stage,  ld -r

Attached files can used to reproduce the issue.

mips64-linux-gnuabi64-as -mabi=32 a.s -o a.o
mips64-linux-gnuabi64-as -mabi=32 b.s -o b.o
mips64-linux-gnuabi64-ld.gold -r -o test.a a.o b.o 

GNU gold (GNU Binutils for Ubuntu 2.27.90.20170114) 1.14


n32/n64 appears to be OK.
Omitting a.o also gives a correct result.

Also occurs with 2.27, so not a regression.