From 2161365f4f50fe3a12fe69787847e58797f26f6f Mon Sep 17 00:00:00 2001 From: Michael Scire Date: Sun, 31 Oct 2021 11:18:17 -0700 Subject: [PATCH] ams: update for awareness of architecture revision --- .gitignore | 3 ++ libraries/config/arch/armv4t/arch.mk | 11 ++++++ libraries/config/arch/armv8a/arch.mk | 11 ++++++ libraries/config/common.mk | 34 +++++++++++++++++-- .../include/vapours/svc/svc_types_common.hpp | 9 +++-- 5 files changed, 64 insertions(+), 4 deletions(-) create mode 100644 libraries/config/arch/armv4t/arch.mk create mode 100644 libraries/config/arch/armv8a/arch.mk diff --git a/.gitignore b/.gitignore index c3a56e220..f9624b592 100644 --- a/.gitignore +++ b/.gitignore @@ -91,7 +91,10 @@ dkms.conf **/out **/build **/build_nintendo_nx_arm64 +**/build_nintendo_nx_arm64_armv8a **/build_nintendo_nx_arm +**/build_nintendo_nx_arm_armv7a +**/build_nintendo_nx_arm_armv4t **/build_nintendo_nx_x64 **/build_nintendo_nx_x86 diff --git a/libraries/config/arch/armv4t/arch.mk b/libraries/config/arch/armv4t/arch.mk new file mode 100644 index 000000000..d9a14fb8c --- /dev/null +++ b/libraries/config/arch/armv4t/arch.mk @@ -0,0 +1,11 @@ +ifeq ($(strip $(DEVKITPRO)),) +$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=/devkitpro") +endif + +include $(DEVKITPRO)/devkitARM/base_rules + +export ATMOSPHERE_DEFINES += -DATMOSPHERE_ARCH_ARM_V4T +export ATMOSPHERE_SETTINGS += +export ATMOSPHERE_CFLAGS += +export ATMOSPHERE_CXXFLAGS += +export ATMOSPHERE_ASFLAGS += diff --git a/libraries/config/arch/armv8a/arch.mk b/libraries/config/arch/armv8a/arch.mk new file mode 100644 index 000000000..f8e56dafb --- /dev/null +++ b/libraries/config/arch/armv8a/arch.mk @@ -0,0 +1,11 @@ +ifeq ($(strip $(DEVKITPRO)),) +$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=/devkitpro") +endif + +include $(DEVKITPRO)/devkitA64/base_rules + +export ATMOSPHERE_DEFINES += -DATMOSPHERE_ARCH_ARM_V8A +export ATMOSPHERE_SETTINGS += +export ATMOSPHERE_CFLAGS += +export ATMOSPHERE_CXXFLAGS += +export ATMOSPHERE_ASFLAGS += diff --git a/libraries/config/common.mk b/libraries/config/common.mk index 460f7d9ea..632deb565 100644 --- a/libraries/config/common.mk +++ b/libraries/config/common.mk @@ -39,6 +39,9 @@ export ATMOSPHERE_ARCH_NAME := arm64 export ATMOSPHERE_BOARD_NAME := nintendo_nx export ATMOSPHERE_OS_NAME := horizon +export ATMOSPHERE_SUB_ARCH_DIR = armv8a +export ATMOSPHERE_SUB_ARCH_NAME = armv8a + export ATMOSPHERE_CPU_EXTENSIONS := arm_crypto_extension aarch64_crypto_extension else ifeq ($(ATMOSPHERE_CPU),arm7tdmi) export ATMOSPHERE_ARCH_DIR := arm @@ -49,6 +52,9 @@ export ATMOSPHERE_ARCH_NAME := arm export ATMOSPHERE_BOARD_NAME := nintendo_nx export ATMOSPHERE_OS_NAME := horizon +export ATMOSPHERE_SUB_ARCH_DIR = armv4t +export ATMOSPHERE_SUB_ARCH_NAME = armv4t + export ATMOSPHERE_CPU_EXTENSIONS := endif @@ -64,6 +70,9 @@ export ATMOSPHERE_ARCH_NAME := arm64 export ATMOSPHERE_BOARD_NAME := qemu_virt export ATMOSPHERE_OS_NAME := horizon +export ATMOSPHERE_SUB_ARCH_DIR = armv8a +export ATMOSPHERE_SUB_ARCH_NAME = armv8a + export ATMOSPHERE_CPU_EXTENSIONS := arm_crypto_extension aarch64_crypto_extension endif @@ -85,14 +94,27 @@ export ATMOSPHERE_BOARD_MAKE_DIR := $(ATMOSPHERE_CONFIG_MAKE_DIR)/board/$(ATMOSP export ATMOSPHERE_OS_MAKE_DIR := $(ATMOSPHERE_CONFIG_MAKE_DIR)/os/$(ATMOSPHERE_OS_DIR) export ATMOSPHERE_CPU_MAKE_DIR := $(ATMOSPHERE_ARCH_MAKE_DIR)/cpu/$(ATMOSPHERE_CPU_DIR) +ifneq ($(strip $(ATMOSPHERE_SUB_ARCH_NAME)),) +export ATMOSPHERE_LIBRARY_DIR := lib_$(ATMOSPHERE_BOARD_NAME)_$(ATMOSPHERE_ARCH_NAME)_$(ATMOSPHERE_SUB_ARCH_NAME) +export ATMOSPHERE_BUILD_DIR := build_$(ATMOSPHERE_BOARD_NAME)_$(ATMOSPHERE_ARCH_NAME)_$(ATMOSPHERE_SUB_ARCH_NAME) +else export ATMOSPHERE_LIBRARY_DIR := lib_$(ATMOSPHERE_BOARD_NAME)_$(ATMOSPHERE_ARCH_NAME) export ATMOSPHERE_BUILD_DIR := build_$(ATMOSPHERE_BOARD_NAME)_$(ATMOSPHERE_ARCH_NAME) +endif include $(ATMOSPHERE_ARCH_MAKE_DIR)/arch.mk include $(ATMOSPHERE_BOARD_MAKE_DIR)/board.mk include $(ATMOSPHERE_OS_MAKE_DIR)/os.mk include $(ATMOSPHERE_CPU_MAKE_DIR)/cpu.mk + +ifneq ($(strip $(ATMOSPHERE_SUB_ARCH_NAME)),) +export ATMOSPHERE_SUB_ARCH_MAKE_DIR := $(ATMOSPHERE_CONFIG_MAKE_DIR)/arch/$(ATMOSPHERE_SUB_ARCH_DIR) + +include $(ATMOSPHERE_SUB_ARCH_MAKE_DIR)/arch.mk +endif + + #--------------------------------------------------------------------------------- # get atmosphere git revision information #--------------------------------------------------------------------------------- @@ -125,12 +147,20 @@ DATA := data INCLUDES := include GENERAL_SOURCE_DIRS=$1 $(foreach d,$(filter-out $1/arch $1/board $1/os $1/cpu $1,$(wildcard $1/*)),$(if $(wildcard $d/.),$(filter-out $d,$(call GENERAL_SOURCE_DIRS,$d)) $d,)) + SPECIFIC_SOURCE_DIRS=$(if $(wildcard $1/$2/$3/.*),$1/$2/$3 $(call DIR_WILDCARD,$1/$2/$3),$(if $(wildcard $1/$2/generic/.*), $1/$2/generic $(call DIR_WILDCARD,$1/$2/generic),)) + +ifneq ($(strip $(ATMOSPHERE_SUB_ARCH_NAME)),) +SPECIFIC_SOURCE_DIRS_ARCH=$(if $(wildcard $1/$2/$3/.*),$1/$2/$3 $(call DIR_WILDCARD,$1/$2/$3),$(if $(wildcard $1/$2/$4/.*),$1/$2/$4 $(call DIR_WILDCARD,$1/$2/$4),$(if $(wildcard $1/$2/generic/.*), $1/$2/generic $(call DIR_WILDCARD,$1/$2/generic),))) +else +SPECIFIC_SOURCE_DIRS_ARCH=$(if $(wildcard $1/$2/$3/.*),$1/$2/$3 $(call DIR_WILDCARD,$1/$2/$3),$(if $(wildcard $1/$2/generic/.*), $1/$2/generic $(call DIR_WILDCARD,$1/$2/generic),)) +endif + UNFILTERED_SOURCE_DIRS=$1 $(foreach d,$(wildcard $1/*),$(if $(wildcard $d/.),$(call DIR_WILDCARD,$d) $d,)) ALL_SOURCE_DIRS=$(foreach d,$(call GENERAL_SOURCE_DIRS,$1), \ $d \ - $(call SPECIFIC_SOURCE_DIRS,$d,arch,$(ATMOSPHERE_ARCH_DIR)) \ + $(call SPECIFIC_SOURCE_DIRS_ARCH,$d,arch,$(ATMOSPHERE_ARCH_DIR),$(ATMOSPHERE_SUB_ARCH_DIR)) \ $(call SPECIFIC_SOURCE_DIRS,$d,board,$(ATMOSPHERE_BOARD_DIR)) \ $(call SPECIFIC_SOURCE_DIRS,$d,os,$(ATMOSPHERE_OS_DIR)) \ $(call SPECIFIC_SOURCE_DIRS,$d,cpu,$(ATMOSPHERE_ARCH_DIR)/$(ATMOSPHERE_CPU_DIR)) \ @@ -147,7 +177,7 @@ FIND_SOURCE_FILES=$(foreach dir,$1,$(filter-out $(notdir $(wildcard $(dir)/*.arc $(notdir $(wildcard $(dir)/*.os.*.$2)) \ $(notdir $(wildcard $(dir)/.cpu.*.$2)), \ $(notdir $(wildcard $(dir)/*.$2)))) \ - $(foreach dir,$1,$(call FIND_SPECIFIC_SOURCE_FILES,$(dir),arch,$(ATMOSPHERE_ARCH_NAME),$2)) \ + $(foreach dir,$1,$(call FIND_SPECIFIC_SOURCE_FILES_EX,$(dir),arch,$(ATMOSPHERE_ARCH_NAME) $(ATMOSPHERE_SUB_ARCH_NAME),$2)) \ $(foreach dir,$1,$(call FIND_SPECIFIC_SOURCE_FILES,$(dir),board,$(ATMOSPHERE_BOARD_NAME),$2)) \ $(foreach dir,$1,$(call FIND_SPECIFIC_SOURCE_FILES,$(dir),os,$(ATMOSPHERE_OS_NAME),$2)) \ $(foreach dir,$1,$(call FIND_SPECIFIC_SOURCE_FILES_EX,$(dir),cpu,$(ATMOSPHERE_CPU_NAME) $(ATMOSPHERE_CPU_EXTENSIONS),$2)) diff --git a/libraries/libvapours/include/vapours/svc/svc_types_common.hpp b/libraries/libvapours/include/vapours/svc/svc_types_common.hpp index 6b85c1452..7692b7ebb 100644 --- a/libraries/libvapours/include/vapours/svc/svc_types_common.hpp +++ b/libraries/libvapours/include/vapours/svc/svc_types_common.hpp @@ -251,7 +251,7 @@ namespace ams::svc { /* Thread types. */ using ThreadFunc = ams::svc::Address; -#if defined(ATMOSPHERE_ARCH_ARM64) +#if defined(ATMOSPHERE_ARCH_ARM_V8A) struct ThreadContext { u64 r[29]; @@ -268,7 +268,7 @@ namespace ams::svc { }; static_assert(sizeof(ThreadContext) == 0x320); -#elif defined(ATMOSPHERE_ARCH_ARM) +#elif defined(ATMOSPHERE_ARCH_ARM_V7A) struct ThreadContext { u32 r[13]; @@ -282,9 +282,14 @@ namespace ams::svc { u32 fpexc; u32 tpidr; }; + static_assert(sizeof(ThreadContext) == 0x158); #else + + #if !defined(ATMOSPHERE_IS_EXOSPHERE) #error "Unknown Architecture for ams::svc::ThreadContext" + #endif + #endif enum ThreadSuspend : u32 {