aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2018-02-17 17:17:56 +0100
committerDmitry Vyukov <dvyukov@google.com>2018-02-17 19:02:12 +0100
commita08436c97370fa1df802728683ca2429af93b841 (patch)
tree22de0dbc10c7df2b3a0f820ba902d1d7a94fbbca
parent5204f75a58d52256f7e1a818644faed0f116beb7 (diff)
prog: give special type generators access to target
-rw-r--r--prog/encodingexec.go6
-rw-r--r--prog/target.go4
2 files changed, 7 insertions, 3 deletions
diff --git a/prog/encodingexec.go b/prog/encodingexec.go
index 2a41e4a53..d81873b33 100644
--- a/prog/encodingexec.go
+++ b/prog/encodingexec.go
@@ -108,7 +108,7 @@ func (p *Prog) SerializeForExec(buffer []byte) (int, error) {
foreachArg(c, func(arg, _ Arg, _ *[]Arg) {
if a, ok := arg.(*PointerArg); ok && a.Res != nil {
foreachSubargOffset(a.Res, func(arg1 Arg, offset uint64) {
- addr := p.Target.physicalAddr(arg) + offset
+ addr := p.Target.PhysicalAddr(arg) + offset
if isUsed(arg1) || csumUses[arg1] {
w.args[arg1] = argInfo{Addr: addr}
}
@@ -216,7 +216,7 @@ func (p *Prog) SerializeForExec(buffer []byte) (int, error) {
return len(buffer) - len(w.buf), nil
}
-func (target *Target) physicalAddr(arg Arg) uint64 {
+func (target *Target) PhysicalAddr(arg Arg) uint64 {
a, ok := arg.(*PointerArg)
if !ok {
panic("physicalAddr: bad arg kind")
@@ -279,7 +279,7 @@ func (w *execContext) writeArg(arg Arg) {
w.write(a.OpAdd)
}
case *PointerArg:
- w.writeConstArg(a.Size(), w.target.physicalAddr(arg), 0, 0, 0, false)
+ w.writeConstArg(a.Size(), w.target.PhysicalAddr(arg), 0, 0, 0, false)
case *DataArg:
data := a.Data()
w.write(execArgData)
diff --git a/prog/target.go b/prog/target.go
index b08236c6d..eb238981e 100644
--- a/prog/target.go
+++ b/prog/target.go
@@ -162,6 +162,10 @@ type Gen struct {
s *state
}
+func (g *Gen) Target() *Target {
+ return g.r.target
+}
+
func (g *Gen) Rand() *rand.Rand {
return g.r.Rand
}