Index: lld/ELF/Arch/Hexagon.cpp =================================================================== --- lld/ELF/Arch/Hexagon.cpp +++ lld/ELF/Arch/Hexagon.cpp @@ -102,13 +102,13 @@ case R_HEX_LO16: return R_ABS; case R_HEX_B9_PCREL: - case R_HEX_B9_PCREL_X: case R_HEX_B13_PCREL: case R_HEX_B15_PCREL: - case R_HEX_B15_PCREL_X: - case R_HEX_6_PCREL_X: case R_HEX_32_PCREL: return R_PC; + case R_HEX_6_PCREL_X: + case R_HEX_B9_PCREL_X: + case R_HEX_B15_PCREL_X: case R_HEX_B22_PCREL: case R_HEX_PLT_B22_PCREL: case R_HEX_B22_PCREL_X: Index: lld/test/ELF/hexagon-shared.s =================================================================== --- lld/test/ELF/hexagon-shared.s +++ lld/test/ELF/hexagon-shared.s @@ -17,6 +17,10 @@ # R_HEX_PLT_B22_PCREL call bar@PLT +# R_HEX_B15_PCREL_X +if (p0) jump bar +# R_HEX_B9_PCREL_X +{ r0 = #0; jump bar } # R_HEX_GOT_11_X and R_HEX_GOT_32_6_X r2=add(pc,##_GLOBAL_OFFSET_TABLE_@PCREL) @@ -41,21 +45,26 @@ .size pvar, 4 # PLT: { immext(#131008 -# PLT: r28 = add(pc,##131032) } +# PLT: r28 = add(pc,##131016) } # PLT: { r14 -= add(r28,#16) # PLT: r15 = memw(r28+#8) # PLT: r28 = memw(r28+#4) } # PLT: { r14 = asr(r14,#2) # PLT: jumpr r28 } # PLT: { trap0(#219) } -# PLT: immext(#131008) -# PLT: r14 = add(pc,##131016) } +# PLT: immext(#130944) +# PLT: r14 = add(pc,##131000) } # PLT: r28 = memw(r14+#0) } # PLT: jumpr r28 } + + # TEXT: 10000: 00 00 01 00 00010000 -# TEXT: { call 0x10050 } -# TEXT: r0 = add(r1,##-65416) } +# TEXT: { call 0x10060 } +# TEXT: if (p0) jump:nt 0x10060 +# TEXT: r0 = #0 ; jump 0x10060 +# TEXT: r0 = add(r1,##-65416) + # GOT: .got: # GOT: 20080: 00 00 00 00 00000000