2017-08-22 14:40:01 +00:00
|
|
|
package dwarfbuilder
|
|
|
|
|
|
|
|
import (
|
|
|
|
"bytes"
|
|
|
|
|
2019-01-04 18:39:25 +00:00
|
|
|
"github.com/go-delve/delve/pkg/dwarf/op"
|
|
|
|
"github.com/go-delve/delve/pkg/dwarf/util"
|
2017-08-22 14:40:01 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
// LocEntry represents one entry of debug_loc.
|
|
|
|
type LocEntry struct {
|
|
|
|
Lowpc uint64
|
|
|
|
Highpc uint64
|
|
|
|
Loc []byte
|
|
|
|
}
|
|
|
|
|
|
|
|
// LocationBlock returns a DWARF expression corresponding to the list of
|
|
|
|
// arguments.
|
|
|
|
func LocationBlock(args ...interface{}) []byte {
|
|
|
|
var buf bytes.Buffer
|
|
|
|
for _, arg := range args {
|
|
|
|
switch x := arg.(type) {
|
|
|
|
case op.Opcode:
|
|
|
|
buf.WriteByte(byte(x))
|
|
|
|
case int:
|
|
|
|
util.EncodeSLEB128(&buf, int64(x))
|
|
|
|
case uint:
|
|
|
|
util.EncodeULEB128(&buf, uint64(x))
|
|
|
|
default:
|
|
|
|
panic("unsupported value type")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return buf.Bytes()
|
|
|
|
}
|