diff options
| author | Guoqi Chen <chenguoqi@loongson.cn> | 2024-08-28 17:01:15 +0800 |
|---|---|---|
| committer | abner chenc <chenguoqi@loongson.cn> | 2024-09-19 00:40:50 +0000 |
| commit | 165bf241f2f7c72cffd83e278d674ae3ddbd72a1 (patch) | |
| tree | 9d97d45a9ae2b245e3ec419e9cbf55c6cb8f6900 /src/cmd/internal/objfile | |
| parent | 7ba074fe43a3c1e9a35cd579520d7184d3a20d36 (diff) | |
| download | go-165bf241f2f7c72cffd83e278d674ae3ddbd72a1.tar.xz | |
cmd/objdump: add loong64 disassembler support
This CL provides vendor support for loong64 disassembler gnu and plan9 syntax.
cd $GOROOT/src/cmd
go get golang.org/x/arch@master
go mod tidy
go mod vendor
Change-Id: Ic8b888de0aa11cba58cbf559f8f69337d1d69309
Reviewed-on: https://go-review.googlesource.com/c/go/+/609015
Reviewed-by: Meidan Li <limeidan@loongson.cn>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: David Chase <drchase@google.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-by: sophie zhao <zhaoxiaolin@loongson.cn>
Diffstat (limited to 'src/cmd/internal/objfile')
| -rw-r--r-- | src/cmd/internal/objfile/disasm.go | 16 | ||||
| -rw-r--r-- | src/cmd/internal/objfile/elf.go | 2 |
2 files changed, 18 insertions, 0 deletions
diff --git a/src/cmd/internal/objfile/disasm.go b/src/cmd/internal/objfile/disasm.go index 960778e8a6..77bc1221e9 100644 --- a/src/cmd/internal/objfile/disasm.go +++ b/src/cmd/internal/objfile/disasm.go @@ -23,6 +23,7 @@ import ( "golang.org/x/arch/arm/armasm" "golang.org/x/arch/arm64/arm64asm" + "golang.org/x/arch/loong64/loong64asm" "golang.org/x/arch/ppc64/ppc64asm" "golang.org/x/arch/s390x/s390xasm" "golang.org/x/arch/x86/x86asm" @@ -367,6 +368,19 @@ func disasm_arm64(code []byte, pc uint64, lookup lookupFunc, byteOrder binary.By return text, 4 } +func disasm_loong64(code []byte, pc uint64, lookup lookupFunc, byteOrder binary.ByteOrder, gnuAsm bool) (string, int) { + inst, err := loong64asm.Decode(code) + var text string + if err != nil || inst.Op == 0 { + text = "?" + } else if gnuAsm { + text = fmt.Sprintf("%-36s // %s", loong64asm.GoSyntax(inst, pc, lookup), loong64asm.GNUSyntax(inst)) + } else { + text = loong64asm.GoSyntax(inst, pc, lookup) + } + return text, 4 +} + func disasm_ppc64(code []byte, pc uint64, lookup lookupFunc, byteOrder binary.ByteOrder, gnuAsm bool) (string, int) { inst, err := ppc64asm.Decode(code, byteOrder) var text string @@ -406,6 +420,7 @@ var disasms = map[string]disasmFunc{ "amd64": disasm_amd64, "arm": disasm_arm, "arm64": disasm_arm64, + "loong64": disasm_loong64, "ppc64": disasm_ppc64, "ppc64le": disasm_ppc64, "s390x": disasm_s390x, @@ -416,6 +431,7 @@ var byteOrders = map[string]binary.ByteOrder{ "amd64": binary.LittleEndian, "arm": binary.LittleEndian, "arm64": binary.LittleEndian, + "loong64": binary.LittleEndian, "ppc64": binary.BigEndian, "ppc64le": binary.LittleEndian, "s390x": binary.BigEndian, diff --git a/src/cmd/internal/objfile/elf.go b/src/cmd/internal/objfile/elf.go index f25e4a65d6..9048be7d73 100644 --- a/src/cmd/internal/objfile/elf.go +++ b/src/cmd/internal/objfile/elf.go @@ -120,6 +120,8 @@ func (f *elfFile) goarch() string { return "arm" case elf.EM_AARCH64: return "arm64" + case elf.EM_LOONGARCH: + return "loong64" case elf.EM_PPC64: if f.elf.ByteOrder == binary.LittleEndian { return "ppc64le" |
