mirror of
https://github.com/golang/go
synced 2024-11-18 15:54:42 -07:00
[dev.link] cmd/link: add loader.ExtReloc to Archreloc2
Non functional, but required by the majority of the architectures. Change-Id: I57601016c28ce665a9d434e283a1db8bded9b133 Reviewed-on: https://go-review.googlesource.com/c/go/+/230858 Run-TryBot: Jeremy Faller <jeremy@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com>
This commit is contained in:
parent
f886ff7b41
commit
65c1805e77
@ -253,7 +253,10 @@ func relocsym(target *Target, ldr *loader.Loader, err *ErrorReporter, syms *Arch
|
|||||||
case 8:
|
case 8:
|
||||||
o = int64(target.Arch.ByteOrder.Uint64(P[off:]))
|
o = int64(target.Arch.ByteOrder.Uint64(P[off:]))
|
||||||
}
|
}
|
||||||
if out, ok := thearch.Archreloc2(target, ldr, syms, &r, s, o); ok {
|
var out int64
|
||||||
|
var ok bool
|
||||||
|
out, needExtReloc, ok = thearch.Archreloc2(target, ldr, syms, &r, &rr, s, o)
|
||||||
|
if ok {
|
||||||
o = out
|
o = out
|
||||||
} else {
|
} else {
|
||||||
err.Errorf(s, "unknown reloc to %v: %d (%s)", ldr.SymName(rs), rt, sym.RelocName(target.Arch, rt))
|
err.Errorf(s, "unknown reloc to %v: %d (%s)", ldr.SymName(rs), rt, sym.RelocName(target.Arch, rt))
|
||||||
|
@ -235,18 +235,18 @@ type Arch struct {
|
|||||||
Adddynrel func(*Target, *loader.Loader, *ArchSyms, *sym.Symbol, *sym.Reloc) bool
|
Adddynrel func(*Target, *loader.Loader, *ArchSyms, *sym.Symbol, *sym.Reloc) bool
|
||||||
Adddynrel2 func(*Target, *loader.Loader, *ArchSyms, loader.Sym, *loader.Reloc2, int) bool
|
Adddynrel2 func(*Target, *loader.Loader, *ArchSyms, loader.Sym, *loader.Reloc2, int) bool
|
||||||
Archinit func(*Link)
|
Archinit func(*Link)
|
||||||
// Archreloc is an arch-specific hook that assists in
|
// Archreloc is an arch-specific hook that assists in relocation processing
|
||||||
// relocation processing (invoked by 'relocsym'); it handles
|
// (invoked by 'relocsym'); it handles target-specific relocation tasks.
|
||||||
// target-specific relocation tasks. Here "rel" is the current
|
// Here "rel" is the current relocation being examined, "sym" is the symbol
|
||||||
// relocation being examined, "sym" is the symbol containing the
|
// containing the chunk of data to which the relocation applies, and "off"
|
||||||
// chunk of data to which the relocation applies, and "off" is the
|
// is the contents of the to-be-relocated data item (from sym.P). Return
|
||||||
// contents of the to-be-relocated data item (from sym.P). Return
|
// value is the appropriately relocated value (to be written back to the
|
||||||
// value is the appropriately relocated value (to be written back
|
// same spot in sym.P), a boolean indicating if the external relocations'
|
||||||
// to the same spot in sym.P) and a boolean indicating
|
// been used, and a boolean indicating success/failure (a failing value
|
||||||
// success/failure (a failing value indicates a fatal error).
|
// indicates a fatal error).
|
||||||
Archreloc func(target *Target, syms *ArchSyms, rel *sym.Reloc, sym *sym.Symbol,
|
Archreloc func(target *Target, syms *ArchSyms, rel *sym.Reloc, sym *sym.Symbol,
|
||||||
offset int64) (relocatedOffset int64, success bool)
|
offset int64) (relocatedOffset int64, success bool)
|
||||||
Archreloc2 func(*Target, *loader.Loader, *ArchSyms, *loader.Reloc2, loader.Sym, int64) (int64, bool)
|
Archreloc2 func(*Target, *loader.Loader, *ArchSyms, *loader.Reloc2, *loader.ExtReloc, loader.Sym, int64) (int64, bool, bool)
|
||||||
// Archrelocvariant is a second arch-specific hook used for
|
// Archrelocvariant is a second arch-specific hook used for
|
||||||
// relocation processing; it handles relocations where r.Type is
|
// relocation processing; it handles relocations where r.Type is
|
||||||
// insufficient to describe the relocation (r.Variant !=
|
// insufficient to describe the relocation (r.Variant !=
|
||||||
|
@ -435,8 +435,8 @@ func pereloc1(arch *sys.Arch, out *ld.OutBuf, s *sym.Symbol, r *sym.Reloc, secto
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
func archreloc2(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, r *loader.Reloc2, sym loader.Sym, val int64) (int64, bool) {
|
func archreloc2(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, r *loader.Reloc2, rr *loader.ExtReloc, sym loader.Sym, val int64) (int64, bool, bool) {
|
||||||
return val, false
|
return val, false, false
|
||||||
}
|
}
|
||||||
|
|
||||||
func archrelocvariant(target *ld.Target, syms *ld.ArchSyms, r *sym.Reloc, s *sym.Symbol, t int64) int64 {
|
func archrelocvariant(target *ld.Target, syms *ld.ArchSyms, r *sym.Reloc, s *sym.Symbol, t int64) int64 {
|
||||||
|
Loading…
Reference in New Issue
Block a user