aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/internal
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/internal')
-rw-r--r--src/cmd/internal/objfile/disasm.go16
-rw-r--r--src/cmd/internal/objfile/elf.go2
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"