mirror of https://github.com/golang/go.git
cmd/internal, cmd/link: unify the relocation naming style of loong64
Change-Id: I2990701e71a63af7bdd6851b6008dc63cb1c1a83 Reviewed-on: https://go-review.googlesource.com/c/go/+/535616 Reviewed-by: abner chenc <chenguoqi@loongson.cn> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Michael Pratt <mpratt@google.com> Reviewed-by: sophie zhao <zhaoxiaolin@loongson.cn> Reviewed-by: Cherry Mui <cherryyz@google.com> Run-TryBot: Cherry Mui <cherryyz@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
This commit is contained in:
parent
98bccd3513
commit
0584574797
|
|
@ -1607,7 +1607,7 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) {
|
|||
rel.Siz = 4
|
||||
rel.Sym = p.To.Sym
|
||||
rel.Add = p.To.Offset
|
||||
rel.Type = objabi.R_ADDRLOONG64U
|
||||
rel.Type = objabi.R_LOONG64_ADDR_HI
|
||||
|
||||
o2 = OP_12IRR(c.opirr(p.As), uint32(0), uint32(REGTMP), uint32(p.From.Reg))
|
||||
rel2 := obj.Addrel(c.cursym)
|
||||
|
|
@ -1615,7 +1615,7 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) {
|
|||
rel2.Siz = 4
|
||||
rel2.Sym = p.To.Sym
|
||||
rel2.Add = p.To.Offset
|
||||
rel2.Type = objabi.R_ADDRLOONG64
|
||||
rel2.Type = objabi.R_LOONG64_ADDR_LO
|
||||
|
||||
case 51: // mov addr,r ==> pcalau12i + lw
|
||||
o1 = OP_IR(c.opir(APCALAU12I), uint32(0), uint32(REGTMP))
|
||||
|
|
@ -1624,14 +1624,14 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) {
|
|||
rel.Siz = 4
|
||||
rel.Sym = p.From.Sym
|
||||
rel.Add = p.From.Offset
|
||||
rel.Type = objabi.R_ADDRLOONG64U
|
||||
rel.Type = objabi.R_LOONG64_ADDR_HI
|
||||
o2 = OP_12IRR(c.opirr(-p.As), uint32(0), uint32(REGTMP), uint32(p.To.Reg))
|
||||
rel2 := obj.Addrel(c.cursym)
|
||||
rel2.Off = int32(c.pc + 4)
|
||||
rel2.Siz = 4
|
||||
rel2.Sym = p.From.Sym
|
||||
rel2.Add = p.From.Offset
|
||||
rel2.Type = objabi.R_ADDRLOONG64
|
||||
rel2.Type = objabi.R_LOONG64_ADDR_LO
|
||||
|
||||
case 52: // mov $lext, r
|
||||
// NOTE: this case does not use REGTMP. If it ever does,
|
||||
|
|
@ -1642,14 +1642,14 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) {
|
|||
rel.Siz = 4
|
||||
rel.Sym = p.From.Sym
|
||||
rel.Add = p.From.Offset
|
||||
rel.Type = objabi.R_ADDRLOONG64U
|
||||
rel.Type = objabi.R_LOONG64_ADDR_HI
|
||||
o2 = OP_12IRR(c.opirr(add), uint32(0), uint32(p.To.Reg), uint32(p.To.Reg))
|
||||
rel2 := obj.Addrel(c.cursym)
|
||||
rel2.Off = int32(c.pc + 4)
|
||||
rel2.Siz = 4
|
||||
rel2.Sym = p.From.Sym
|
||||
rel2.Add = p.From.Offset
|
||||
rel2.Type = objabi.R_ADDRLOONG64
|
||||
rel2.Type = objabi.R_LOONG64_ADDR_LO
|
||||
|
||||
case 53: // mov r, tlsvar ==> lu12i.w + ori + add r2, regtmp + sw o(regtmp)
|
||||
// NOTE: this case does not use REGTMP. If it ever does,
|
||||
|
|
@ -1660,14 +1660,14 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) {
|
|||
rel.Siz = 4
|
||||
rel.Sym = p.To.Sym
|
||||
rel.Add = p.To.Offset
|
||||
rel.Type = objabi.R_ADDRLOONG64TLSU
|
||||
rel.Type = objabi.R_LOONG64_TLS_LE_HI
|
||||
o2 = OP_12IRR(c.opirr(AOR), uint32(0), uint32(REGTMP), uint32(REGTMP))
|
||||
rel2 := obj.Addrel(c.cursym)
|
||||
rel2.Off = int32(c.pc + 4)
|
||||
rel2.Siz = 4
|
||||
rel2.Sym = p.To.Sym
|
||||
rel2.Add = p.To.Offset
|
||||
rel2.Type = objabi.R_ADDRLOONG64TLS
|
||||
rel2.Type = objabi.R_LOONG64_TLS_LE_LO
|
||||
o3 = OP_RRR(c.oprrr(AADDV), uint32(REG_R2), uint32(REGTMP), uint32(REGTMP))
|
||||
o4 = OP_12IRR(c.opirr(p.As), uint32(0), uint32(REGTMP), uint32(p.From.Reg))
|
||||
|
||||
|
|
@ -1680,14 +1680,14 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) {
|
|||
rel.Siz = 4
|
||||
rel.Sym = p.From.Sym
|
||||
rel.Add = p.From.Offset
|
||||
rel.Type = objabi.R_ADDRLOONG64TLSU
|
||||
rel.Type = objabi.R_LOONG64_TLS_LE_HI
|
||||
o2 = OP_12IRR(c.opirr(AOR), uint32(0), uint32(REGTMP), uint32(REGTMP))
|
||||
rel2 := obj.Addrel(c.cursym)
|
||||
rel2.Off = int32(c.pc + 4)
|
||||
rel2.Siz = 4
|
||||
rel2.Sym = p.From.Sym
|
||||
rel2.Add = p.From.Offset
|
||||
rel2.Type = objabi.R_ADDRLOONG64TLS
|
||||
rel2.Type = objabi.R_LOONG64_TLS_LE_LO
|
||||
o3 = OP_RRR(c.oprrr(AADDV), uint32(REG_R2), uint32(REGTMP), uint32(REGTMP))
|
||||
o4 = OP_12IRR(c.opirr(-p.As), uint32(0), uint32(REGTMP), uint32(p.To.Reg))
|
||||
|
||||
|
|
@ -1700,14 +1700,14 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) {
|
|||
rel.Siz = 4
|
||||
rel.Sym = p.From.Sym
|
||||
rel.Add = p.From.Offset
|
||||
rel.Type = objabi.R_ADDRLOONG64TLSU
|
||||
rel.Type = objabi.R_LOONG64_TLS_LE_HI
|
||||
o2 = OP_12IRR(c.opirr(AOR), uint32(0), uint32(REGTMP), uint32(REGTMP))
|
||||
rel2 := obj.Addrel(c.cursym)
|
||||
rel2.Off = int32(c.pc + 4)
|
||||
rel2.Siz = 4
|
||||
rel2.Sym = p.From.Sym
|
||||
rel2.Add = p.From.Offset
|
||||
rel2.Type = objabi.R_ADDRLOONG64TLS
|
||||
rel2.Type = objabi.R_LOONG64_TLS_LE_LO
|
||||
o3 = OP_RRR(c.oprrr(AADDV), uint32(REG_R2), uint32(REGTMP), uint32(p.To.Reg))
|
||||
|
||||
case 56: // mov r, tlsvar IE model ==> (pcalau12i + ld.d)tlsvar@got + add.d + st.d
|
||||
|
|
@ -1717,7 +1717,7 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) {
|
|||
rel.Siz = 4
|
||||
rel.Sym = p.To.Sym
|
||||
rel.Add = 0x0
|
||||
rel.Type = objabi.R_LOONG64_TLS_IE_PCREL_HI
|
||||
rel.Type = objabi.R_LOONG64_TLS_IE_HI
|
||||
o2 = OP_12IRR(c.opirr(-p.As), uint32(0), uint32(REGTMP), uint32(REGTMP))
|
||||
rel2 := obj.Addrel(c.cursym)
|
||||
rel2.Off = int32(c.pc + 4)
|
||||
|
|
@ -1735,7 +1735,7 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) {
|
|||
rel.Siz = 4
|
||||
rel.Sym = p.From.Sym
|
||||
rel.Add = 0x0
|
||||
rel.Type = objabi.R_LOONG64_TLS_IE_PCREL_HI
|
||||
rel.Type = objabi.R_LOONG64_TLS_IE_HI
|
||||
o2 = OP_12IRR(c.opirr(-p.As), uint32(0), uint32(REGTMP), uint32(REGTMP))
|
||||
rel2 := obj.Addrel(c.cursym)
|
||||
rel2.Off = int32(c.pc + 4)
|
||||
|
|
|
|||
|
|
@ -320,29 +320,27 @@ const (
|
|||
|
||||
// Loong64.
|
||||
|
||||
// R_ADDRLOONG64 resolves to the low 12 bits of an external address, by encoding
|
||||
// it into the instruction.
|
||||
R_ADDRLOONG64
|
||||
|
||||
// R_ADDRLOONG64U resolves to the sign-adjusted "upper" 20 bits (bit 5-24) of an
|
||||
// R_LOONG64_ADDR_HI resolves to the sign-adjusted "upper" 20 bits (bit 5-24) of an
|
||||
// external address, by encoding it into the instruction.
|
||||
R_ADDRLOONG64U
|
||||
// R_LOONG64_ADDR_LO resolves to the low 12 bits of an external address, by encoding
|
||||
// it into the instruction.
|
||||
R_LOONG64_ADDR_HI
|
||||
R_LOONG64_ADDR_LO
|
||||
|
||||
// R_ADDRLOONG64TLS resolves to the low 12 bits of a TLS address (offset from
|
||||
// R_LOONG64_TLS_LE_HI resolves to the high 20 bits of a TLS address (offset from
|
||||
// thread pointer), by encoding it into the instruction.
|
||||
R_ADDRLOONG64TLS
|
||||
|
||||
// R_ADDRLOONG64TLSU resolves to the high 20 bits of a TLS address (offset from
|
||||
// R_LOONG64_TLS_LE_LO resolves to the low 12 bits of a TLS address (offset from
|
||||
// thread pointer), by encoding it into the instruction.
|
||||
R_ADDRLOONG64TLSU
|
||||
R_LOONG64_TLS_LE_HI
|
||||
R_LOONG64_TLS_LE_LO
|
||||
|
||||
// R_CALLLOONG64 resolves to non-PC-relative target address of a CALL (BL/JIRL)
|
||||
// instruction, by encoding the address into the instruction.
|
||||
R_CALLLOONG64
|
||||
|
||||
// R_LOONG64_TLS_IE_PCREL_HI and R_LOONG64_TLS_IE_LO relocates a pcalau12i, ld.d
|
||||
// R_LOONG64_TLS_IE_HI and R_LOONG64_TLS_IE_LO relocates a pcalau12i, ld.d
|
||||
// pair to compute the address of the GOT slot of the tls symbol.
|
||||
R_LOONG64_TLS_IE_PCREL_HI
|
||||
R_LOONG64_TLS_IE_HI
|
||||
R_LOONG64_TLS_IE_LO
|
||||
|
||||
// R_LOONG64_GOT_HI and R_LOONG64_GOT_LO resolves a GOT-relative instruction sequence,
|
||||
|
|
|
|||
|
|
@ -82,12 +82,12 @@ func _() {
|
|||
_ = x[R_RISCV_RVC_BRANCH-72]
|
||||
_ = x[R_RISCV_RVC_JUMP-73]
|
||||
_ = x[R_PCRELDBL-74]
|
||||
_ = x[R_ADDRLOONG64-75]
|
||||
_ = x[R_ADDRLOONG64U-76]
|
||||
_ = x[R_ADDRLOONG64TLS-77]
|
||||
_ = x[R_ADDRLOONG64TLSU-78]
|
||||
_ = x[R_LOONG64_ADDR_HI-75]
|
||||
_ = x[R_LOONG64_ADDR_LO-76]
|
||||
_ = x[R_LOONG64_TLS_LE_HI-77]
|
||||
_ = x[R_LOONG64_TLS_LE_LO-78]
|
||||
_ = x[R_CALLLOONG64-79]
|
||||
_ = x[R_LOONG64_TLS_IE_PCREL_HI-80]
|
||||
_ = x[R_LOONG64_TLS_IE_HI-80]
|
||||
_ = x[R_LOONG64_TLS_IE_LO-81]
|
||||
_ = x[R_LOONG64_GOT_HI-82]
|
||||
_ = x[R_LOONG64_GOT_LO-83]
|
||||
|
|
@ -101,9 +101,9 @@ func _() {
|
|||
_ = x[R_INITORDER-91]
|
||||
}
|
||||
|
||||
const _RelocType_name = "R_ADDRR_ADDRPOWERR_ADDRARM64R_ADDRMIPSR_ADDROFFR_SIZER_CALLR_CALLARMR_CALLARM64R_CALLINDR_CALLPOWERR_CALLMIPSR_CONSTR_PCRELR_TLS_LER_TLS_IER_GOTOFFR_PLT0R_PLT1R_PLT2R_USEFIELDR_USETYPER_USEIFACER_USEIFACEMETHODR_USENAMEDMETHODR_METHODOFFR_KEEPR_POWER_TOCR_GOTPCRELR_JMPMIPSR_DWARFSECREFR_DWARFFILEREFR_ARM64_TLS_LER_ARM64_TLS_IER_ARM64_GOTPCRELR_ARM64_GOTR_ARM64_PCRELR_ARM64_PCREL_LDST8R_ARM64_PCREL_LDST16R_ARM64_PCREL_LDST32R_ARM64_PCREL_LDST64R_ARM64_LDST8R_ARM64_LDST16R_ARM64_LDST32R_ARM64_LDST64R_ARM64_LDST128R_POWER_TLS_LER_POWER_TLS_IER_POWER_TLSR_POWER_TLS_IE_PCREL34R_POWER_TLS_LE_TPREL34R_ADDRPOWER_DSR_ADDRPOWER_GOTR_ADDRPOWER_GOT_PCREL34R_ADDRPOWER_PCRELR_ADDRPOWER_TOCRELR_ADDRPOWER_TOCREL_DSR_ADDRPOWER_D34R_ADDRPOWER_PCREL34R_RISCV_JALR_RISCV_JAL_TRAMPR_RISCV_CALLR_RISCV_PCREL_ITYPER_RISCV_PCREL_STYPER_RISCV_TLS_IER_RISCV_TLS_LER_RISCV_GOT_HI20R_RISCV_PCREL_HI20R_RISCV_PCREL_LO12_IR_RISCV_PCREL_LO12_SR_RISCV_BRANCHR_RISCV_RVC_BRANCHR_RISCV_RVC_JUMPR_PCRELDBLR_ADDRLOONG64R_ADDRLOONG64UR_ADDRLOONG64TLSR_ADDRLOONG64TLSUR_CALLLOONG64R_LOONG64_TLS_IE_PCREL_HIR_LOONG64_TLS_IE_LOR_LOONG64_GOT_HIR_LOONG64_GOT_LOR_JMPLOONG64R_ADDRMIPSUR_ADDRMIPSTLSR_ADDRCUOFFR_WASMIMPORTR_XCOFFREFR_PEIMAGEOFFR_INITORDER"
|
||||
const _RelocType_name = "R_ADDRR_ADDRPOWERR_ADDRARM64R_ADDRMIPSR_ADDROFFR_SIZER_CALLR_CALLARMR_CALLARM64R_CALLINDR_CALLPOWERR_CALLMIPSR_CONSTR_PCRELR_TLS_LER_TLS_IER_GOTOFFR_PLT0R_PLT1R_PLT2R_USEFIELDR_USETYPER_USEIFACER_USEIFACEMETHODR_USENAMEDMETHODR_METHODOFFR_KEEPR_POWER_TOCR_GOTPCRELR_JMPMIPSR_DWARFSECREFR_DWARFFILEREFR_ARM64_TLS_LER_ARM64_TLS_IER_ARM64_GOTPCRELR_ARM64_GOTR_ARM64_PCRELR_ARM64_PCREL_LDST8R_ARM64_PCREL_LDST16R_ARM64_PCREL_LDST32R_ARM64_PCREL_LDST64R_ARM64_LDST8R_ARM64_LDST16R_ARM64_LDST32R_ARM64_LDST64R_ARM64_LDST128R_POWER_TLS_LER_POWER_TLS_IER_POWER_TLSR_POWER_TLS_IE_PCREL34R_POWER_TLS_LE_TPREL34R_ADDRPOWER_DSR_ADDRPOWER_GOTR_ADDRPOWER_GOT_PCREL34R_ADDRPOWER_PCRELR_ADDRPOWER_TOCRELR_ADDRPOWER_TOCREL_DSR_ADDRPOWER_D34R_ADDRPOWER_PCREL34R_RISCV_JALR_RISCV_JAL_TRAMPR_RISCV_CALLR_RISCV_PCREL_ITYPER_RISCV_PCREL_STYPER_RISCV_TLS_IER_RISCV_TLS_LER_RISCV_GOT_HI20R_RISCV_PCREL_HI20R_RISCV_PCREL_LO12_IR_RISCV_PCREL_LO12_SR_RISCV_BRANCHR_RISCV_RVC_BRANCHR_RISCV_RVC_JUMPR_PCRELDBLR_LOONG64_ADDR_HIR_LOONG64_ADDR_LOR_LOONG64_TLS_LE_HIR_LOONG64_TLS_LE_LOR_CALLLOONG64R_LOONG64_TLS_IE_HIR_LOONG64_TLS_IE_LOR_LOONG64_GOT_HIR_LOONG64_GOT_LOR_JMPLOONG64R_ADDRMIPSUR_ADDRMIPSTLSR_ADDRCUOFFR_WASMIMPORTR_XCOFFREFR_PEIMAGEOFFR_INITORDER"
|
||||
|
||||
var _RelocType_index = [...]uint16{0, 6, 17, 28, 38, 47, 53, 59, 68, 79, 88, 99, 109, 116, 123, 131, 139, 147, 153, 159, 165, 175, 184, 194, 210, 226, 237, 243, 254, 264, 273, 286, 300, 314, 328, 344, 355, 368, 387, 407, 427, 447, 460, 474, 488, 502, 517, 531, 545, 556, 578, 600, 614, 629, 652, 669, 687, 708, 723, 742, 753, 770, 782, 801, 820, 834, 848, 864, 882, 902, 922, 936, 954, 970, 980, 993, 1007, 1023, 1040, 1053, 1078, 1097, 1113, 1129, 1141, 1152, 1165, 1176, 1188, 1198, 1210, 1221}
|
||||
var _RelocType_index = [...]uint16{0, 6, 17, 28, 38, 47, 53, 59, 68, 79, 88, 99, 109, 116, 123, 131, 139, 147, 153, 159, 165, 175, 184, 194, 210, 226, 237, 243, 254, 264, 273, 286, 300, 314, 328, 344, 355, 368, 387, 407, 427, 447, 460, 474, 488, 502, 517, 531, 545, 556, 578, 600, 614, 629, 652, 669, 687, 708, 723, 742, 753, 770, 782, 801, 820, 834, 848, 864, 882, 902, 922, 936, 954, 970, 980, 997, 1014, 1033, 1052, 1065, 1084, 1103, 1119, 1135, 1147, 1158, 1171, 1182, 1194, 1204, 1216, 1227}
|
||||
|
||||
func (i RelocType) String() string {
|
||||
i -= 1
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ func gentext(ctxt *ld.Link, ldr *loader.Loader) {
|
|||
// 0: 1a000004 pcalau12i $a0, 0
|
||||
// 0: R_LARCH_PCALA_HI20 local.moduledata
|
||||
o(0x1a000004)
|
||||
rel, _ := initfunc.AddRel(objabi.R_ADDRLOONG64U)
|
||||
rel, _ := initfunc.AddRel(objabi.R_LOONG64_ADDR_HI)
|
||||
rel.SetOff(0)
|
||||
rel.SetSiz(4)
|
||||
rel.SetSym(ctxt.Moduledata)
|
||||
|
|
@ -42,7 +42,7 @@ func gentext(ctxt *ld.Link, ldr *loader.Loader) {
|
|||
// 4: 02c00084 addi.d $a0, $a0, 0
|
||||
// 4: R_LARCH_PCALA_LO12 local.moduledata
|
||||
o(0x02c00084)
|
||||
rel2, _ := initfunc.AddRel(objabi.R_ADDRLOONG64)
|
||||
rel2, _ := initfunc.AddRel(objabi.R_LOONG64_ADDR_LO)
|
||||
rel2.SetOff(4)
|
||||
rel2.SetSiz(4)
|
||||
rel2.SetSym(ctxt.Moduledata)
|
||||
|
|
@ -84,12 +84,12 @@ func elfreloc1(ctxt *ld.Link, out *ld.OutBuf, ldr *loader.Loader, s loader.Sym,
|
|||
default:
|
||||
return false
|
||||
}
|
||||
case objabi.R_ADDRLOONG64TLS:
|
||||
case objabi.R_LOONG64_TLS_LE_LO:
|
||||
out.Write64(uint64(sectoff))
|
||||
out.Write64(uint64(elf.R_LARCH_TLS_LE_LO12) | uint64(elfsym)<<32)
|
||||
out.Write64(uint64(r.Xadd))
|
||||
|
||||
case objabi.R_ADDRLOONG64TLSU:
|
||||
case objabi.R_LOONG64_TLS_LE_HI:
|
||||
out.Write64(uint64(sectoff))
|
||||
out.Write64(uint64(elf.R_LARCH_TLS_LE_HI20) | uint64(elfsym)<<32)
|
||||
out.Write64(uint64(r.Xadd))
|
||||
|
|
@ -99,7 +99,7 @@ func elfreloc1(ctxt *ld.Link, out *ld.OutBuf, ldr *loader.Loader, s loader.Sym,
|
|||
out.Write64(uint64(elf.R_LARCH_B26) | uint64(elfsym)<<32)
|
||||
out.Write64(uint64(r.Xadd))
|
||||
|
||||
case objabi.R_LOONG64_TLS_IE_PCREL_HI:
|
||||
case objabi.R_LOONG64_TLS_IE_HI:
|
||||
out.Write64(uint64(sectoff))
|
||||
out.Write64(uint64(elf.R_LARCH_TLS_IE_PC_HI20) | uint64(elfsym)<<32)
|
||||
out.Write64(uint64(0x0))
|
||||
|
|
@ -109,12 +109,12 @@ func elfreloc1(ctxt *ld.Link, out *ld.OutBuf, ldr *loader.Loader, s loader.Sym,
|
|||
out.Write64(uint64(elf.R_LARCH_TLS_IE_PC_LO12) | uint64(elfsym)<<32)
|
||||
out.Write64(uint64(0x0))
|
||||
|
||||
case objabi.R_ADDRLOONG64:
|
||||
case objabi.R_LOONG64_ADDR_LO:
|
||||
out.Write64(uint64(sectoff))
|
||||
out.Write64(uint64(elf.R_LARCH_PCALA_LO12) | uint64(elfsym)<<32)
|
||||
out.Write64(uint64(r.Xadd))
|
||||
|
||||
case objabi.R_ADDRLOONG64U:
|
||||
case objabi.R_LOONG64_ADDR_HI:
|
||||
out.Write64(uint64(sectoff))
|
||||
out.Write64(uint64(elf.R_LARCH_PCALA_HI20) | uint64(elfsym)<<32)
|
||||
out.Write64(uint64(r.Xadd))
|
||||
|
|
@ -147,8 +147,8 @@ func archreloc(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, r loade
|
|||
switch r.Type() {
|
||||
default:
|
||||
return val, 0, false
|
||||
case objabi.R_ADDRLOONG64,
|
||||
objabi.R_ADDRLOONG64U:
|
||||
case objabi.R_LOONG64_ADDR_HI,
|
||||
objabi.R_LOONG64_ADDR_LO:
|
||||
// set up addend for eventual relocation via outer symbol.
|
||||
rs, _ := ld.FoldSubSymbolOffset(ldr, rs)
|
||||
rst := ldr.SymType(rs)
|
||||
|
|
@ -156,11 +156,11 @@ func archreloc(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, r loade
|
|||
ldr.Errorf(s, "missing section for %s", ldr.SymName(rs))
|
||||
}
|
||||
return val, 1, true
|
||||
case objabi.R_ADDRLOONG64TLS,
|
||||
objabi.R_ADDRLOONG64TLSU,
|
||||
case objabi.R_LOONG64_TLS_LE_HI,
|
||||
objabi.R_LOONG64_TLS_LE_LO,
|
||||
objabi.R_CALLLOONG64,
|
||||
objabi.R_JMPLOONG64,
|
||||
objabi.R_LOONG64_TLS_IE_PCREL_HI,
|
||||
objabi.R_LOONG64_TLS_IE_HI,
|
||||
objabi.R_LOONG64_TLS_IE_LO,
|
||||
objabi.R_LOONG64_GOT_HI,
|
||||
objabi.R_LOONG64_GOT_LO:
|
||||
|
|
@ -176,18 +176,18 @@ func archreloc(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, r loade
|
|||
return r.Add(), noExtReloc, isOk
|
||||
case objabi.R_GOTOFF:
|
||||
return ldr.SymValue(r.Sym()) + r.Add() - ldr.SymValue(syms.GOT), noExtReloc, isOk
|
||||
case objabi.R_ADDRLOONG64,
|
||||
objabi.R_ADDRLOONG64U:
|
||||
case objabi.R_LOONG64_ADDR_HI,
|
||||
objabi.R_LOONG64_ADDR_LO:
|
||||
pc := ldr.SymValue(s) + int64(r.Off())
|
||||
t := calculatePCAlignedReloc(r.Type(), ldr.SymAddr(rs)+r.Add(), pc)
|
||||
if r.Type() == objabi.R_ADDRLOONG64 {
|
||||
if r.Type() == objabi.R_LOONG64_ADDR_LO {
|
||||
return int64(val&0xffc003ff | (t << 10)), noExtReloc, isOk
|
||||
}
|
||||
return int64(val&0xfe00001f | (t << 5)), noExtReloc, isOk
|
||||
case objabi.R_ADDRLOONG64TLS,
|
||||
objabi.R_ADDRLOONG64TLSU:
|
||||
case objabi.R_LOONG64_TLS_LE_HI,
|
||||
objabi.R_LOONG64_TLS_LE_LO:
|
||||
t := ldr.SymAddr(rs) + r.Add()
|
||||
if r.Type() == objabi.R_ADDRLOONG64TLS {
|
||||
if r.Type() == objabi.R_LOONG64_TLS_LE_LO {
|
||||
return int64(val&0xffc003ff | ((t & 0xfff) << 10)), noExtReloc, isOk
|
||||
}
|
||||
return int64(val&0xfe00001f | (((t) >> 12 << 5) & 0x1ffffe0)), noExtReloc, isOk
|
||||
|
|
@ -207,20 +207,19 @@ func archrelocvariant(*ld.Target, *loader.Loader, loader.Reloc, sym.RelocVariant
|
|||
|
||||
func extreloc(target *ld.Target, ldr *loader.Loader, r loader.Reloc, s loader.Sym) (loader.ExtReloc, bool) {
|
||||
switch r.Type() {
|
||||
case objabi.R_ADDRLOONG64,
|
||||
objabi.R_ADDRLOONG64U,
|
||||
case objabi.R_LOONG64_ADDR_HI,
|
||||
objabi.R_LOONG64_ADDR_LO,
|
||||
objabi.R_LOONG64_GOT_HI,
|
||||
objabi.R_LOONG64_GOT_LO:
|
||||
|
||||
return ld.ExtrelocViaOuterSym(ldr, r, s), true
|
||||
|
||||
case objabi.R_ADDRLOONG64TLS,
|
||||
objabi.R_ADDRLOONG64TLSU,
|
||||
case objabi.R_LOONG64_TLS_LE_HI,
|
||||
objabi.R_LOONG64_TLS_LE_LO,
|
||||
objabi.R_CONST,
|
||||
objabi.R_GOTOFF,
|
||||
objabi.R_CALLLOONG64,
|
||||
objabi.R_JMPLOONG64,
|
||||
objabi.R_LOONG64_TLS_IE_PCREL_HI,
|
||||
objabi.R_LOONG64_TLS_IE_HI,
|
||||
objabi.R_LOONG64_TLS_IE_LO:
|
||||
return ld.ExtrelocSimple(ldr, r), true
|
||||
}
|
||||
|
|
@ -229,7 +228,7 @@ func extreloc(target *ld.Target, ldr *loader.Loader, r loader.Reloc, s loader.Sy
|
|||
|
||||
func isRequestingLowPageBits(t objabi.RelocType) bool {
|
||||
switch t {
|
||||
case objabi.R_ADDRLOONG64:
|
||||
case objabi.R_LOONG64_ADDR_LO:
|
||||
return true
|
||||
}
|
||||
return false
|
||||
|
|
|
|||
Loading…
Reference in New Issue