diff options
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" |
