mirror of
https://github.com/golang/go
synced 2024-11-05 15:26:15 -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:
|
||||
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
|
||||
} else {
|
||||
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
|
||||
Adddynrel2 func(*Target, *loader.Loader, *ArchSyms, loader.Sym, *loader.Reloc2, int) bool
|
||||
Archinit func(*Link)
|
||||
// Archreloc is an arch-specific hook that assists in
|
||||
// relocation processing (invoked by 'relocsym'); it handles
|
||||
// target-specific relocation tasks. Here "rel" is the current
|
||||
// relocation being examined, "sym" is the symbol containing the
|
||||
// chunk of data to which the relocation applies, and "off" is the
|
||||
// contents of the to-be-relocated data item (from sym.P). Return
|
||||
// value is the appropriately relocated value (to be written back
|
||||
// to the same spot in sym.P) and a boolean indicating
|
||||
// success/failure (a failing value indicates a fatal error).
|
||||
// Archreloc is an arch-specific hook that assists in relocation processing
|
||||
// (invoked by 'relocsym'); it handles target-specific relocation tasks.
|
||||
// Here "rel" is the current relocation being examined, "sym" is the symbol
|
||||
// containing the chunk of data to which the relocation applies, and "off"
|
||||
// is the contents of the to-be-relocated data item (from sym.P). Return
|
||||
// value is the appropriately relocated value (to be written back to the
|
||||
// same spot in sym.P), a boolean indicating if the external relocations'
|
||||
// been used, and a boolean indicating success/failure (a failing value
|
||||
// indicates a fatal error).
|
||||
Archreloc func(target *Target, syms *ArchSyms, rel *sym.Reloc, sym *sym.Symbol,
|
||||
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
|
||||
// relocation processing; it handles relocations where r.Type is
|
||||
// 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
|
||||
}
|
||||
|
||||
func archreloc2(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, r *loader.Reloc2, sym loader.Sym, val int64) (int64, bool) {
|
||||
return val, false
|
||||
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, false
|
||||
}
|
||||
|
||||
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