Commit 4bbf9182 authored by clabby's avatar clabby

Add all sources in the `mipsevm` source map tracer

parent bf6a9ceb
...@@ -19,6 +19,7 @@ import ( ...@@ -19,6 +19,7 @@ import (
"github.com/ethereum/go-ethereum/eth/tracers/logger" "github.com/ethereum/go-ethereum/eth/tracers/logger"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"github.com/ethereum-optimism/optimism/op-bindings/bindings"
"github.com/ethereum-optimism/optimism/op-chain-ops/srcmap" "github.com/ethereum-optimism/optimism/op-chain-ops/srcmap"
) )
...@@ -37,9 +38,18 @@ func testContractsSetup(t require.TestingT) (*Contracts, *Addresses) { ...@@ -37,9 +38,18 @@ func testContractsSetup(t require.TestingT) (*Contracts, *Addresses) {
} }
func SourceMapTracer(t *testing.T, contracts *Contracts, addrs *Addresses) vm.EVMLogger { func SourceMapTracer(t *testing.T, contracts *Contracts, addrs *Addresses) vm.EVMLogger {
mipsSrcMap, err := contracts.MIPS.SourceMap([]string{"../../packages/contracts-bedrock/contracts/cannon/MIPS.sol"}) sources := bindings.Sources
for i, source := range sources {
// Add relative path to contracts directory if the source is not
// already relativized.
if !strings.HasPrefix(source, "..") {
sources[i] = path.Join("../../packages/contracts-bedrock", source)
}
}
mipsSrcMap, err := contracts.MIPS.SourceMap(append([]string{"contracts/cannon/MIPS.sol"}, sources...))
require.NoError(t, err) require.NoError(t, err)
oracleSrcMap, err := contracts.Oracle.SourceMap([]string{"../../packages/contracts-bedrock/contracts/cannon/PreimageOracle.sol"}) oracleSrcMap, err := contracts.Oracle.SourceMap(append([]string{"contracts/cannon/PreimageOracle.sol"}, sources...))
require.NoError(t, err) require.NoError(t, err)
return srcmap.NewSourceMapTracer(map[common.Address]*srcmap.SourceMap{addrs.MIPS: mipsSrcMap, addrs.Oracle: oracleSrcMap}, os.Stdout) return srcmap.NewSourceMapTracer(map[common.Address]*srcmap.SourceMap{addrs.MIPS: mipsSrcMap, addrs.Oracle: oracleSrcMap}, os.Stdout)
......
...@@ -84,6 +84,10 @@ func (s *SourceMap) Info(pc uint64) (source string, line uint32, col uint32) { ...@@ -84,6 +84,10 @@ func (s *SourceMap) Info(pc uint64) (source string, line uint32, col uint32) {
if instr.F < 0 { if instr.F < 0 {
return "generated", 0, 0 return "generated", 0, 0
} }
if instr.F >= int32(len(s.Sources)) {
source = "unknown"
return
}
source = s.Sources[instr.F] source = s.Sources[instr.F]
if instr.S < 0 { if instr.S < 0 {
return return
......
...@@ -32,7 +32,7 @@ func TestSourcemap(t *testing.T) { ...@@ -32,7 +32,7 @@ func TestSourcemap(t *testing.T) {
for i := 0; i < len(deployedByteCode); i++ { for i := 0; i < len(deployedByteCode); i++ {
info := srcMap.FormattedInfo(uint64(i)) info := srcMap.FormattedInfo(uint64(i))
if strings.HasPrefix(info, "unexpected") { if strings.HasPrefix(info, "unknown") {
t.Fatalf("unexpected info: %q", info) t.Fatalf("unexpected info: %q", info)
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment