Commit 2fa5ebe3 authored by Huacai Chen's avatar Huacai Chen
Browse files

tools/perf: Add basic support for LoongArch



Add basic support for LoongArch, which is very similar to the MIPS
version.

Signed-off-by: default avatarMing Wang <wangming01@loongson.cn>
Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
parent 22f367a6
Loading
Loading
Loading
Loading
+40 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
#ifndef _ASM_LOONGARCH_PERF_REGS_H
#define _ASM_LOONGARCH_PERF_REGS_H

enum perf_event_loongarch_regs {
	PERF_REG_LOONGARCH_PC,
	PERF_REG_LOONGARCH_R1,
	PERF_REG_LOONGARCH_R2,
	PERF_REG_LOONGARCH_R3,
	PERF_REG_LOONGARCH_R4,
	PERF_REG_LOONGARCH_R5,
	PERF_REG_LOONGARCH_R6,
	PERF_REG_LOONGARCH_R7,
	PERF_REG_LOONGARCH_R8,
	PERF_REG_LOONGARCH_R9,
	PERF_REG_LOONGARCH_R10,
	PERF_REG_LOONGARCH_R11,
	PERF_REG_LOONGARCH_R12,
	PERF_REG_LOONGARCH_R13,
	PERF_REG_LOONGARCH_R14,
	PERF_REG_LOONGARCH_R15,
	PERF_REG_LOONGARCH_R16,
	PERF_REG_LOONGARCH_R17,
	PERF_REG_LOONGARCH_R18,
	PERF_REG_LOONGARCH_R19,
	PERF_REG_LOONGARCH_R20,
	PERF_REG_LOONGARCH_R21,
	PERF_REG_LOONGARCH_R22,
	PERF_REG_LOONGARCH_R23,
	PERF_REG_LOONGARCH_R24,
	PERF_REG_LOONGARCH_R25,
	PERF_REG_LOONGARCH_R26,
	PERF_REG_LOONGARCH_R27,
	PERF_REG_LOONGARCH_R28,
	PERF_REG_LOONGARCH_R29,
	PERF_REG_LOONGARCH_R30,
	PERF_REG_LOONGARCH_R31,
	PERF_REG_LOONGARCH_MAX,
};
#endif /* _ASM_LOONGARCH_PERF_REGS_H */
+9 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
/*
 * Copyright (C) 2020-2023 Loongson Technology Corporation Limited
 */

#define __ARCH_WANT_SYS_CLONE
#define __ARCH_WANT_SYS_CLONE3

#include <asm-generic/unistd.h>
+9 −3
Original line number Diff line number Diff line
@@ -38,7 +38,7 @@ ifneq ($(NO_SYSCALL_TABLE),1)
      NO_SYSCALL_TABLE := 0
    endif
  else
    ifeq ($(SRCARCH),$(filter $(SRCARCH),powerpc arm64 s390 mips))
    ifeq ($(SRCARCH),$(filter $(SRCARCH),powerpc arm64 s390 mips loongarch))
      NO_SYSCALL_TABLE := 0
    endif
  endif
@@ -80,6 +80,12 @@ ifeq ($(SRCARCH),arm64)
  LIBUNWIND_LIBS = -lunwind -lunwind-aarch64
endif

ifeq ($(SRCARCH),loongarch)
  NO_PERF_REGS := 0
  CFLAGS += -I$(OUTPUT)arch/loongarch/include/generated
  LIBUNWIND_LIBS = -lunwind -lunwind-loongarch64
endif

ifeq ($(SRCARCH),riscv)
  NO_PERF_REGS := 0
endif
@@ -107,7 +113,7 @@ endif
# Disable it on all other architectures in case libdw unwind
# support is detected in system. Add supported architectures
# to the check.
ifneq ($(SRCARCH),$(filter $(SRCARCH),x86 arm arm64 powerpc s390 csky riscv))
ifneq ($(SRCARCH),$(filter $(SRCARCH),x86 arm arm64 powerpc s390 csky riscv loongarch))
  NO_LIBDW_DWARF_UNWIND := 1
endif

@@ -129,7 +135,7 @@ endef
ifdef LIBUNWIND_DIR
  LIBUNWIND_CFLAGS  = -I$(LIBUNWIND_DIR)/include
  LIBUNWIND_LDFLAGS = -L$(LIBUNWIND_DIR)/lib
  LIBUNWIND_ARCHS = x86 x86_64 arm aarch64 debug-frame-arm debug-frame-aarch64
  LIBUNWIND_ARCHS = x86 x86_64 arm aarch64 debug-frame-arm debug-frame-aarch64 loongarch
  $(foreach libunwind_arch,$(LIBUNWIND_ARCHS),$(call libunwind_arch_set_flags,$(libunwind_arch)))
endif

+1 −0
Original line number Diff line number Diff line
perf-y += util/
+28 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: GPL-2.0
ifndef NO_DWARF
PERF_HAVE_DWARF_REGS := 1
endif
PERF_HAVE_ARCH_REGS_QUERY_REGISTER_OFFSET := 1
PERF_HAVE_JITDUMP := 1

#
# Syscall table generation for perf
#

out    := $(OUTPUT)arch/loongarch/include/generated/asm
header := $(out)/syscalls.c
incpath := $(srctree)/tools
sysdef := $(srctree)/tools/arch/loongarch/include/uapi/asm/unistd.h
sysprf := $(srctree)/tools/perf/arch/loongarch/entry/syscalls/
systbl := $(sysprf)/mksyscalltbl

# Create output directory if not already present
_dummy := $(shell [ -d '$(out)' ] || mkdir -p '$(out)')

$(header): $(sysdef) $(systbl)
	$(Q)$(SHELL) '$(systbl)' '$(CC)' '$(HOSTCC)' $(incpath) $(sysdef) > $@

clean::
	$(call QUIET_CLEAN, loongarch) $(RM) $(header)

archheaders: $(header)
Loading