From 95364bf1abb28af777d6dafd2eebfc3c0b0e6dd2 Mon Sep 17 00:00:00 2001 From: caiwei Date: Sat, 22 Jun 2024 20:34:14 +0800 Subject: [PATCH 1/9] Add the code adapted to OHOS on LoongArch Signed-off-by: caiwei --- clang/lib/Basic/Targets.cpp | 18 ++- clang/lib/Driver/ToolChains/Gnu.cpp | 2 +- clang/lib/Driver/ToolChains/OHOS.cpp | 18 ++- clang/test/Preprocessor/ohos.c | 2 + compiler-rt/cmake/config-ix.cmake | 3 + compiler-rt/lib/crt/CMakeLists.txt | 5 + .../lib/sanitizer_common/sanitizer_linux.cpp | 4 +- llvm-build/build.py | 20 ++- llvm-build/build_musl.sh | 5 +- llvm-build/ohos_toolchain_builder.py | 1 + .../LoongArch/LoongArchISelLowering.cpp | 6 +- llvm/test/CodeGen/LoongArch/emutls.ll | 147 ++++++++++++++++++ .../ExecutionEngine/OrcLazy/emulated-tls.ll | 7 +- 13 files changed, 224 insertions(+), 14 deletions(-) create mode 100644 llvm/test/CodeGen/LoongArch/emutls.ll diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index 963d03eb796f..01c4029c6fed 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -704,14 +704,28 @@ TargetInfo *AllocateTarget(const llvm::Triple &Triple, case llvm::Triple::loongarch32: switch (os) { case llvm::Triple::Linux: - return new LinuxTargetInfo(Triple, Opts); + // OHOS_LOCAL begin + switch (Triple.getEnvironment()) { + default: + return new LinuxTargetInfo(Triple, Opts); + case llvm::Triple::OpenHOS: + return new OHOSTargetInfo(Triple, Opts); + } + // OHOS_LOCAL end default: return new LoongArch32TargetInfo(Triple, Opts); } case llvm::Triple::loongarch64: switch (os) { case llvm::Triple::Linux: - return new LinuxTargetInfo(Triple, Opts); + // OHOS_LOCAL begin + switch (Triple.getEnvironment()) { + default: + return new LinuxTargetInfo(Triple, Opts); + case llvm::Triple::OpenHOS: + return new OHOSTargetInfo(Triple, Opts); + } + // OHOS_LOCAL end default: return new LoongArch64TargetInfo(Triple, Opts); } diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp index 0c57b4187f00..8cb25334a22b 100644 --- a/clang/lib/Driver/ToolChains/Gnu.cpp +++ b/clang/lib/Driver/ToolChains/Gnu.cpp @@ -2236,7 +2236,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes( static const char *const LoongArch64LibDirs[] = {"/lib64", "/lib"}; static const char *const LoongArch64Triples[] = { "loongarch64-linux-gnu", "loongarch64-unknown-linux-gnu", - "loongarch64-linux-ohos"}; + "loongarch64-linux-ohos"}; // OHOS_LOCAL static const char *const M68kLibDirs[] = {"/lib"}; static const char *const M68kTriples[] = { diff --git a/clang/lib/Driver/ToolChains/OHOS.cpp b/clang/lib/Driver/ToolChains/OHOS.cpp index 1bbe09030f3c..f821bd4be47c 100644 --- a/clang/lib/Driver/ToolChains/OHOS.cpp +++ b/clang/lib/Driver/ToolChains/OHOS.cpp @@ -122,6 +122,10 @@ std::string OHOS::getMultiarchTriple(const llvm::Triple &T) const { return "x86_64-linux-ohos"; case llvm::Triple::aarch64: return "aarch64-linux-ohos"; + // OHOS_LOCAL begin + case llvm::Triple::loongarch64: + return "loongarch64-linux-ohos"; + // OHOS_LOCAL end } return T.str(); } @@ -389,7 +393,14 @@ void OHOS::addExtraOpts(llvm::opt::ArgStringList &CmdArgs) const { CmdArgs.push_back("-z"); CmdArgs.push_back("relro"); CmdArgs.push_back("-z"); - CmdArgs.push_back("max-page-size=4096"); + // OHOS_LOCAL begin + //LoongArch need page size 16K + if (getArch() == llvm::Triple::loongarch64) { + CmdArgs.push_back("max-page-size=16384"); + } else { + CmdArgs.push_back("max-page-size=4096"); + } + // OHOS_LOCAL end // .gnu.hash section is not compatible with the MIPS target if (getArch() != llvm::Triple::mipsel) { CmdArgs.push_back("--hash-style=gnu"); @@ -405,6 +416,8 @@ void OHOS::addExtraOpts(llvm::opt::ArgStringList &CmdArgs) const { SanitizerMask OHOS::getSupportedSanitizers() const { const bool IsX86_64 = getTriple().getArch() == llvm::Triple::x86_64; const bool IsAArch64 = getTriple().getArch() == llvm::Triple::aarch64; + // OHOS_LOCAL + const bool IsLoongArch64 = getTriple().getArch() == llvm::Triple::loongarch64; SanitizerMask Res = ToolChain::getSupportedSanitizers(); Res |= SanitizerKind::Address; Res |= SanitizerKind::PointerCompare; @@ -420,7 +433,8 @@ SanitizerMask OHOS::getSupportedSanitizers() const { // OHOS_LOCAL Res |= SanitizerKind::HWAddress; // TODO: Support TSAN and HWASAN and update mask. - if (IsAArch64 || IsX86_64) + // OHOS_LOCAL + if (IsAArch64 || IsX86_64 || IsLoongArch64) Res |= SanitizerKind::Thread; return Res; } diff --git a/clang/test/Preprocessor/ohos.c b/clang/test/Preprocessor/ohos.c index 0c435c7ed5ab..7017c9847cca 100644 --- a/clang/test/Preprocessor/ohos.c +++ b/clang/test/Preprocessor/ohos.c @@ -3,6 +3,7 @@ // RUN: %clang_cc1 -x c++ -E -dM -ffreestanding -triple=riscv64-linux-ohos < /dev/null | FileCheck %s -match-full-lines -check-prefix=RISCV64-OHOS-CXX // RUN: %clang_cc1 -x c++ -E -dM -ffreestanding -triple=mipsel-linux-ohos < /dev/null | FileCheck %s -match-full-lines -check-prefix=MIPSEL-OHOS-CXX // RUN: %clang_cc1 -x c++ -E -dM -ffreestanding -triple=x86_64-linux-ohos < /dev/null | FileCheck %s -match-full-lines -check-prefix=X86_64-OHOS-CXX +// RUN: %clang_cc1 -x c++ -E -dM -ffreestanding -triple=loongarch64-linux-ohos < /dev/null | FileCheck %s -match-full-lines -check-prefix=LOONGARCH64-OHOS-CXX // RUN: %clang_cc1 -E -dM -ffreestanding -triple=arm-linux-ohos < /dev/null | FileCheck %s -check-prefix=OHOS-DEFS // ARM-OHOS-CXX: #define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 8U @@ -10,6 +11,7 @@ // RISCV64-OHOS-CXX: #define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16UL // MIPSEL-OHOS-CXX: #define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 8U // X86_64-OHOS-CXX: #define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16UL +// LOONGARCH64-OHOS-CXX: #define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16UL // OHOS-DEFS: __OHOS_FAMILY__ // OHOS-DEFS: __OHOS__ // OHOS-DEFS-NOT: __OHOS__ diff --git a/compiler-rt/cmake/config-ix.cmake b/compiler-rt/cmake/config-ix.cmake index 565ea795ac0e..55bddb938420 100644 --- a/compiler-rt/cmake/config-ix.cmake +++ b/compiler-rt/cmake/config-ix.cmake @@ -71,6 +71,9 @@ check_c_compiler_flag(-ffreestanding COMPILER_RT_HAS_FFREESTANDING_FLAG) check_c_compiler_flag(-fomit-frame-pointer COMPILER_RT_HAS_OMIT_FRAME_POINTER_FLAG) check_c_compiler_flag(-std=c11 COMPILER_RT_HAS_STD_C11_FLAG) check_c_compiler_flag(-fcf-protection=full COMPILER_RT_HAS_FCF_PROTECTION_FLAG) +# OHOS_LOCAL begin +check_c_compiler_flag(-mcmodel=medium COMPILER_RT_HAS_LOONGARCH_MCMODEL_FLAG) +# OHOS_LOCAL end check_cxx_compiler_flag(-fPIC COMPILER_RT_HAS_FPIC_FLAG) check_cxx_compiler_flag(-fPIE COMPILER_RT_HAS_FPIE_FLAG) check_cxx_compiler_flag(-fno-builtin COMPILER_RT_HAS_FNO_BUILTIN_FLAG) diff --git a/compiler-rt/lib/crt/CMakeLists.txt b/compiler-rt/lib/crt/CMakeLists.txt index 60b30566b792..1fafdc9ffaf7 100644 --- a/compiler-rt/lib/crt/CMakeLists.txt +++ b/compiler-rt/lib/crt/CMakeLists.txt @@ -42,6 +42,11 @@ if(COMPILER_RT_HAS_CRT) append_list_if(COMPILER_RT_CRT_USE_EH_FRAME_REGISTRY -DEH_USE_FRAME_REGISTRY CRT_CFLAGS) append_list_if(COMPILER_RT_HAS_FPIC_FLAG -fPIC CRT_CFLAGS) append_list_if(COMPILER_RT_HAS_WNO_PEDANTIC -Wno-pedantic CRT_CFLAGS) +#OHOS_LOCAL begin + if ("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "loongarch64") + append_list_if(COMPILER_RT_HAS_LOONGARCH_MCMODEL_FLAG -mcmodel=medium CRT_CFLAGS) + endif() +#OHOS_LOCAL end if (COMPILER_RT_HAS_FCF_PROTECTION_FLAG) append_list_if(COMPILER_RT_ENABLE_CET -fcf-protection=full CRT_CFLAGS) endif() diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp index e7f5497e8797..81c919d181c0 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp +++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp @@ -69,8 +69,10 @@ #include #endif #include -#include +//OHOS_LOCAL Begin #include +#include +//OHOS_LOCAL end #include #include #include diff --git a/llvm-build/build.py b/llvm-build/build.py index c0a88a1ce3f6..4bd133a61155 100755 --- a/llvm-build/build.py +++ b/llvm-build/build.py @@ -72,6 +72,7 @@ class BuildConfig(): self.no_build_riscv64 = args.skip_build or args.no_build_riscv64 self.no_build_mipsel = args.skip_build or args.no_build_mipsel self.no_build_x86_64 = args.skip_build or args.no_build_x86_64 + self.no_build_loongarch64 = args.skip_build or args.no_build_loongarch64 self.build_ncurses = args.build_ncurses self.build_libedit = args.build_libedit self.build_lldb_static = args.build_lldb_static @@ -86,7 +87,7 @@ class BuildConfig(): self.compression_format = args.compression_format self.enable_check_abi = args.enable_check_abi - self.TARGETS = 'AArch64;ARM;BPF;Mips;RISCV;X86' + self.TARGETS = 'AArch64;ARM;BPF;Mips;RISCV;X86;LoongArch' self.ORIG_ENV = dict(os.environ) self.VERSION = None # autodetected @@ -210,6 +211,12 @@ class BuildConfig(): default=False, help='Omit build os target: x86_64.') + parser.add_argument( + '--no-build-loongarch64', + action='store_true', + default=False, + help='Omit build os target: loongarch64.') + parser.add_argument( '--no-lto', action='store_true', @@ -1318,6 +1325,8 @@ class SysrootComposer(BuildUtils): dir_suffix = 'x86' elif arch == 'mipsel': dir_suffix = 'mips' + elif arch == 'loongarch64': + dir_suffix = 'loongarch' linux_kernel_dir = os.path.join('kernel', 'linux', 'patches', 'linux-5.10') linux_kernel_path = os.path.join(self.build_config.OUT_PATH, '..', linux_kernel_dir) ohosmusl_sysroot_dst = self.merge_out_path('sysroot', target, 'usr') @@ -1441,7 +1450,8 @@ class LlvmLibs(BuildUtils): ('riscv64', self.open_ohos_triple('riscv64'), '', ''), ('mipsel', self.open_ohos_triple('mipsel'), '', ''), ('mipsel', self.open_ohos_triple('mipsel'), '-mnan=legacy', 'nanlegacy'), - ('x86_64', self.open_ohos_triple('x86_64'), '', ''),] + ('x86_64', self.open_ohos_triple('x86_64'), '', ''), + ('loongarch64', self.open_ohos_triple('loongarch64'), '', '')] cc = os.path.join(llvm_install, 'bin', 'clang') cxx = os.path.join(llvm_install, 'bin', 'clang++') @@ -1477,7 +1487,8 @@ class LlvmLibs(BuildUtils): llvm_path = self.merge_out_path('llvm_make') arch_list = [self.liteos_triple('arm'), self.open_ohos_triple('arm'), self.open_ohos_triple('aarch64'), self.open_ohos_triple('riscv64'), - self.open_ohos_triple('mipsel'), self.open_ohos_triple('x86_64')] + self.open_ohos_triple('mipsel'), self.open_ohos_triple('x86_64'), + self.open_ohos_triple('loongarch64')] libcxx_ndk_install = self.merge_out_path('libcxx-ndk') self.check_create_dir(libcxx_ndk_install) @@ -2846,6 +2857,9 @@ def main(): if not build_config.no_build_x86_64: configs.append(('x86_64', build_utils.open_ohos_triple('x86_64'))) + if not build_config.no_build_loongarch64: + configs.append(('loongarch64', build_utils.open_ohos_triple('loongarch64'))) + build_config.NCURSES_VERSION = build_utils.get_ncurses_version() if build_config.NCURSES_VERSION is None: raise Exception('NCURSES version information not found, please check if the ncurses.spec file exists') diff --git a/llvm-build/build_musl.sh b/llvm-build/build_musl.sh index 7f7f44c774e2..39a0d23ac893 100755 --- a/llvm-build/build_musl.sh +++ b/llvm-build/build_musl.sh @@ -87,6 +87,9 @@ elif [ $TARGET_TRIPLE == "riscv64-linux-ohos" ]; then elif [ $TARGET_TRIPLE == "x86_64-linux-ohos" ]; then TARGET_USER="linux_user" TARGETS_PREFIX="x86_64" +elif [ $TARGET_TRIPLE == "loongarch64-linux-ohos" ]; then + TARGET_USER="linux_user" + TARGETS_PREFIX="loongarch64" else TARGET_USER="linux_user" TARGETS_PREFIX="aarch64" @@ -109,7 +112,7 @@ make musl_header_install_for_${TARGET_USER} CLANG="${CLANG_BIN_ROOT}/clang" TOPD # build musl_libs if ((make_libs == 1)); then if [ $TARGET_TRIPLE == "aarch64-linux-ohos" ] || [ $TARGET_TRIPLE == "riscv64-linux-ohos" ] || \ - [ $TARGET_TRIPLE == "x86_64-linux-ohos" ]; then + [ $TARGET_TRIPLE == "x86_64-linux-ohos" ] || [ $TARGET_TRIPLE == "loongarch64-linux-ohos" ]; then make CLANG="${CLANG_BIN_ROOT}/clang" TOPDIR=${TOPDIR} SYSROOTDIR=${OUT}/sysroot MUSLCOPYDIR=${OUT}/musl_build \ TARGETS=${TARGET_USER} TARGET=${TARGET_TRIPLE} ARCH=${TARGETS_PREFIX} -f Makefile else diff --git a/llvm-build/ohos_toolchain_builder.py b/llvm-build/ohos_toolchain_builder.py index b0e5476fc154..2a1ca0bda39b 100644 --- a/llvm-build/ohos_toolchain_builder.py +++ b/llvm-build/ohos_toolchain_builder.py @@ -229,6 +229,7 @@ class OHOSToolchainBuilder: self._build_utils.open_ohos_triple("arm"), self._build_utils.open_ohos_triple("aarch64"), self._build_utils.open_ohos_triple("riscv64"), + self._build_utils.open_ohos_triple("loongarch64"), self._build_utils.open_ohos_triple("mipsel"), self._build_utils.open_ohos_triple("x86_64"), ] diff --git a/llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp b/llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp index 2999da74a972..78248e0a88eb 100644 --- a/llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp +++ b/llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp @@ -556,7 +556,11 @@ LoongArchTargetLowering::lowerGlobalTLSAddress(SDValue Op, GlobalAddressSDNode *N = cast(Op); assert(N->getOffset() == 0 && "unexpected offset in global node"); - + // OHOS_LOCAL begin + // Enable Loongarch support emulated-tls + if (DAG.getTarget().useEmulatedTLS()) + return LowerToTLSEmulatedModel(N, DAG); + // OHOS_LOCAL end SDValue Addr; switch (getTargetMachine().getTLSModel(N->getGlobal())) { case TLSModel::GeneralDynamic: diff --git a/llvm/test/CodeGen/LoongArch/emutls.ll b/llvm/test/CodeGen/LoongArch/emutls.ll new file mode 100644 index 000000000000..6489acd51edc --- /dev/null +++ b/llvm/test/CodeGen/LoongArch/emutls.ll @@ -0,0 +1,147 @@ +;; OHOS_LOCAL begin +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4 +; RUN: llc --mtriple=loongarch32 --emulated-tls --relocation-model=pic < %s \ +; RUN: | FileCheck --check-prefix=LA32 %s +; RUN: llc --mtriple=loongarch64 --emulated-tls --relocation-model=pic < %s \ +; RUN: | FileCheck --check-prefix=LA64 %s + +@external_x = external thread_local global i32, align 8 +@y = thread_local global i8 7, align 2 +@internal_z = internal thread_local global i64 9, align 16 + +define ptr @get_external_x() nounwind { +; LA32-LABEL: get_external_x: +; LA32: # %bb.0: # %entry +; LA32-NEXT: addi.w $sp, $sp, -16 +; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill +; LA32-NEXT: pcalau12i $a0, %got_pc_hi20(__emutls_v.external_x) +; LA32-NEXT: ld.w $a0, $a0, %got_pc_lo12(__emutls_v.external_x) +; LA32-NEXT: bl %plt(__emutls_get_address) +; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload +; LA32-NEXT: addi.w $sp, $sp, 16 +; LA32-NEXT: ret +; +; LA64-LABEL: get_external_x: +; LA64: # %bb.0: # %entry +; LA64-NEXT: addi.d $sp, $sp, -16 +; LA64-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill +; LA64-NEXT: pcalau12i $a0, %got_pc_hi20(__emutls_v.external_x) +; LA64-NEXT: ld.d $a0, $a0, %got_pc_lo12(__emutls_v.external_x) +; LA64-NEXT: bl %plt(__emutls_get_address) +; LA64-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload +; LA64-NEXT: addi.d $sp, $sp, 16 +; LA64-NEXT: ret +entry: + ret ptr @external_x +} + +define ptr @get_y() nounwind { +; LA32-LABEL: get_y: +; LA32: # %bb.0: # %entry +; LA32-NEXT: addi.w $sp, $sp, -16 +; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill +; LA32-NEXT: pcalau12i $a0, %got_pc_hi20(__emutls_v.y) +; LA32-NEXT: ld.w $a0, $a0, %got_pc_lo12(__emutls_v.y) +; LA32-NEXT: bl %plt(__emutls_get_address) +; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload +; LA32-NEXT: addi.w $sp, $sp, 16 +; LA32-NEXT: ret +; +; LA64-LABEL: get_y: +; LA64: # %bb.0: # %entry +; LA64-NEXT: addi.d $sp, $sp, -16 +; LA64-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill +; LA64-NEXT: pcalau12i $a0, %got_pc_hi20(__emutls_v.y) +; LA64-NEXT: ld.d $a0, $a0, %got_pc_lo12(__emutls_v.y) +; LA64-NEXT: bl %plt(__emutls_get_address) +; LA64-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload +; LA64-NEXT: addi.d $sp, $sp, 16 +; LA64-NEXT: ret +entry: + ret ptr @y +} + +define ptr @get_internal_z() nounwind { +; LA32-LABEL: get_internal_z: +; LA32: # %bb.0: # %entry +; LA32-NEXT: addi.w $sp, $sp, -16 +; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill +; LA32-NEXT: pcalau12i $a0, %pc_hi20(__emutls_v.internal_z) +; LA32-NEXT: addi.w $a0, $a0, %pc_lo12(__emutls_v.internal_z) +; LA32-NEXT: bl %plt(__emutls_get_address) +; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload +; LA32-NEXT: addi.w $sp, $sp, 16 +; LA32-NEXT: ret +; +; LA64-LABEL: get_internal_z: +; LA64: # %bb.0: # %entry +; LA64-NEXT: addi.d $sp, $sp, -16 +; LA64-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill +; LA64-NEXT: pcalau12i $a0, %pc_hi20(__emutls_v.internal_z) +; LA64-NEXT: addi.d $a0, $a0, %pc_lo12(__emutls_v.internal_z) +; LA64-NEXT: bl %plt(__emutls_get_address) +; LA64-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload +; LA64-NEXT: addi.d $sp, $sp, 16 +; LA64-NEXT: ret +entry: + ret ptr @internal_z +} + +; UTC_ARGS: --disable + +; LA32: .data +; LA32-NEXT: .globl __emutls_v.y +; LA32-NEXT: .p2align 2 +; LA32-NEXT: __emutls_v.y: +; LA32-NEXT: .word 1 +; LA32-NEXT: .word 2 +; LA32-NEXT: .word 0 +; LA32-NEXT: .word __emutls_t.y + +; LA32: .section .rodata, +; LA32-NEXT: .globl __emutls_t.y +; LA32-NEXT: .p2align 1 +; LA32-NEXT: __emutls_t.y: +; LA32-NEXT: .byte 7 + +; LA32: .data +; LA32-NEXT: .p2align 2 +; LA32-NEXT: __emutls_v.internal_z: +; LA32-NEXT: .word 8 +; LA32-NEXT: .word 16 +; LA32-NEXT: .word 0 +; LA32-NEXT: .word __emutls_t.internal_z + +; LA32: .section .rodata, +; LA32-NEXT: .p2align 4 +; LA32-NEXT: __emutls_t.internal_z: +; LA32-NEXT: .dword 9 + +; LA64: .data +; LA64-NEXT: .globl __emutls_v.y +; LA64-NEXT: .p2align 3 +; LA64-NEXT: __emutls_v.y: +; LA64-NEXT: .dword 1 +; LA64-NEXT: .dword 2 +; LA64-NEXT: .dword 0 +; LA64-NEXT: .dword __emutls_t.y + +; LA64: .section .rodata, +; LA64-NEXT: .globl __emutls_t.y +; LA64-NEXT: .p2align 1 +; LA64-NEXT: __emutls_t.y: +; LA64-NEXT: .byte 7 + +; LA64: .data +; LA64-NEXT: .p2align 3 +; LA64-NEXT: __emutls_v.internal_z: +; LA64-NEXT: .dword 8 +; LA64-NEXT: .dword 16 +; LA64-NEXT: .dword 0 +; LA64-NEXT: .dword __emutls_t.internal_z + +; LA64: .section .rodata, +; LA64-NEXT: .p2align 4 +; LA64-NEXT: __emutls_t.internal_z: +; LA64-NEXT: .dword 9 +;; OHOS_LOCAL end diff --git a/llvm/test/ExecutionEngine/OrcLazy/emulated-tls.ll b/llvm/test/ExecutionEngine/OrcLazy/emulated-tls.ll index e0243829f50c..804a3d81d23e 100644 --- a/llvm/test/ExecutionEngine/OrcLazy/emulated-tls.ll +++ b/llvm/test/ExecutionEngine/OrcLazy/emulated-tls.ll @@ -1,6 +1,7 @@ -; LoongArch does not support emulated tls. -; UNSUPPORTED: loongarch - +;; OHOS_LOCAL begin +;; LoongArch does not support emulated tls. +;; UNSUPPORTED: loongarch +;; OHOS_LOCAL end ; RUN: not lli -no-process-syms -emulated-tls -jit-kind=orc-lazy %s 2>&1 \ ; RUN: | FileCheck %s ; -- Gitee From 0969f59921ba07a47acda08089d94890ccbc3e9b Mon Sep 17 00:00:00 2001 From: caiwei Date: Tue, 2 Jul 2024 12:07:07 +0000 Subject: [PATCH 2/9] update compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp. Signed-off-by: caiwei --- compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp index 81c919d181c0..a348b19b355a 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp +++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp @@ -87,6 +87,7 @@ #endif #if SANITIZER_LINUX && defined(__loongarch__) +# include // OHOS_LOCAL # include #endif -- Gitee From dca6aee0c007820045edb9c61168ffd079a8cc92 Mon Sep 17 00:00:00 2001 From: caiwei Date: Wed, 3 Jul 2024 02:11:49 +0000 Subject: [PATCH 3/9] update clang/lib/Driver/ToolChains/Gnu.cpp. Signed-off-by: caiwei --- clang/lib/Driver/ToolChains/Gnu.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp index 8cb25334a22b..a1f74db8bc50 100644 --- a/clang/lib/Driver/ToolChains/Gnu.cpp +++ b/clang/lib/Driver/ToolChains/Gnu.cpp @@ -2236,7 +2236,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes( static const char *const LoongArch64LibDirs[] = {"/lib64", "/lib"}; static const char *const LoongArch64Triples[] = { "loongarch64-linux-gnu", "loongarch64-unknown-linux-gnu", - "loongarch64-linux-ohos"}; // OHOS_LOCAL + "loongarch64-linux-ohos"}; // OHOS_LOCAL static const char *const M68kLibDirs[] = {"/lib"}; static const char *const M68kTriples[] = { -- Gitee From e1c27be4dff79f7499f8f3138adde0c7a653cfa0 Mon Sep 17 00:00:00 2001 From: caiwei Date: Wed, 3 Jul 2024 02:13:26 +0000 Subject: [PATCH 4/9] update compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp. Signed-off-by: caiwei --- compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp index a348b19b355a..49a3c3dfc17c 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp +++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp @@ -69,10 +69,8 @@ #include #endif #include -//OHOS_LOCAL Begin -#include #include -//OHOS_LOCAL end +#include #include #include #include -- Gitee From d3990af2e9dde9f0447580aa0cdb13d479a29f35 Mon Sep 17 00:00:00 2001 From: caiwei Date: Thu, 4 Jul 2024 03:51:35 +0000 Subject: [PATCH 5/9] update clang/lib/Basic/Targets.cpp. Signed-off-by: caiwei --- clang/lib/Basic/Targets.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index 01c4029c6fed..a44d829b9143 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -704,28 +704,28 @@ TargetInfo *AllocateTarget(const llvm::Triple &Triple, case llvm::Triple::loongarch32: switch (os) { case llvm::Triple::Linux: - // OHOS_LOCAL begin + // OHOS_LOCAL begin switch (Triple.getEnvironment()) { default: return new LinuxTargetInfo(Triple, Opts); case llvm::Triple::OpenHOS: return new OHOSTargetInfo(Triple, Opts); } - // OHOS_LOCAL end + // OHOS_LOCAL end default: return new LoongArch32TargetInfo(Triple, Opts); } case llvm::Triple::loongarch64: switch (os) { case llvm::Triple::Linux: - // OHOS_LOCAL begin + // OHOS_LOCAL begin switch (Triple.getEnvironment()) { default: return new LinuxTargetInfo(Triple, Opts); case llvm::Triple::OpenHOS: return new OHOSTargetInfo(Triple, Opts); } - // OHOS_LOCAL end + // OHOS_LOCAL end default: return new LoongArch64TargetInfo(Triple, Opts); } -- Gitee From 3b70a6bf2516d8ddcb5586aa3d538f56b51b1860 Mon Sep 17 00:00:00 2001 From: caiwei Date: Mon, 8 Jul 2024 09:49:59 +0000 Subject: [PATCH 6/9] update clang/lib/Basic/Targets.cpp. Signed-off-by: caiwei --- clang/lib/Basic/Targets.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index a44d829b9143..2b99902550cd 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -704,28 +704,28 @@ TargetInfo *AllocateTarget(const llvm::Triple &Triple, case llvm::Triple::loongarch32: switch (os) { case llvm::Triple::Linux: - // OHOS_LOCAL begin +// OHOS_LOCAL begin switch (Triple.getEnvironment()) { default: return new LinuxTargetInfo(Triple, Opts); case llvm::Triple::OpenHOS: return new OHOSTargetInfo(Triple, Opts); } - // OHOS_LOCAL end +// OHOS_LOCAL end default: return new LoongArch32TargetInfo(Triple, Opts); } case llvm::Triple::loongarch64: switch (os) { case llvm::Triple::Linux: - // OHOS_LOCAL begin +// OHOS_LOCAL begin switch (Triple.getEnvironment()) { default: return new LinuxTargetInfo(Triple, Opts); case llvm::Triple::OpenHOS: return new OHOSTargetInfo(Triple, Opts); } - // OHOS_LOCAL end +// OHOS_LOCAL end default: return new LoongArch64TargetInfo(Triple, Opts); } -- Gitee From 57e18f9780260a221bfd852bd2511fce4f68b2dc Mon Sep 17 00:00:00 2001 From: caiwei Date: Mon, 8 Jul 2024 09:52:18 +0000 Subject: [PATCH 7/9] update clang/lib/Driver/ToolChains/OHOS.cpp. Signed-off-by: caiwei --- clang/lib/Driver/ToolChains/OHOS.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/clang/lib/Driver/ToolChains/OHOS.cpp b/clang/lib/Driver/ToolChains/OHOS.cpp index f821bd4be47c..3529a058b5e2 100644 --- a/clang/lib/Driver/ToolChains/OHOS.cpp +++ b/clang/lib/Driver/ToolChains/OHOS.cpp @@ -416,8 +416,7 @@ void OHOS::addExtraOpts(llvm::opt::ArgStringList &CmdArgs) const { SanitizerMask OHOS::getSupportedSanitizers() const { const bool IsX86_64 = getTriple().getArch() == llvm::Triple::x86_64; const bool IsAArch64 = getTriple().getArch() == llvm::Triple::aarch64; - // OHOS_LOCAL - const bool IsLoongArch64 = getTriple().getArch() == llvm::Triple::loongarch64; + const bool IsLoongArch64 = getTriple().getArch() == llvm::Triple::loongarch64; // OHOS_LOCAL SanitizerMask Res = ToolChain::getSupportedSanitizers(); Res |= SanitizerKind::Address; Res |= SanitizerKind::PointerCompare; -- Gitee From 6993beb444f590a05d0199506eb73348f0d5fad1 Mon Sep 17 00:00:00 2001 From: caiwei Date: Mon, 8 Jul 2024 09:54:52 +0000 Subject: [PATCH 8/9] update clang/lib/Basic/Targets.cpp. Signed-off-by: caiwei --- clang/lib/Basic/Targets.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index 2b99902550cd..a44d829b9143 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -704,28 +704,28 @@ TargetInfo *AllocateTarget(const llvm::Triple &Triple, case llvm::Triple::loongarch32: switch (os) { case llvm::Triple::Linux: -// OHOS_LOCAL begin + // OHOS_LOCAL begin switch (Triple.getEnvironment()) { default: return new LinuxTargetInfo(Triple, Opts); case llvm::Triple::OpenHOS: return new OHOSTargetInfo(Triple, Opts); } -// OHOS_LOCAL end + // OHOS_LOCAL end default: return new LoongArch32TargetInfo(Triple, Opts); } case llvm::Triple::loongarch64: switch (os) { case llvm::Triple::Linux: -// OHOS_LOCAL begin + // OHOS_LOCAL begin switch (Triple.getEnvironment()) { default: return new LinuxTargetInfo(Triple, Opts); case llvm::Triple::OpenHOS: return new OHOSTargetInfo(Triple, Opts); } -// OHOS_LOCAL end + // OHOS_LOCAL end default: return new LoongArch64TargetInfo(Triple, Opts); } -- Gitee From 3f2d8b5072bc1fd898126f30ac1c46edde9ca2b9 Mon Sep 17 00:00:00 2001 From: caiwei Date: Mon, 8 Jul 2024 10:05:43 +0000 Subject: [PATCH 9/9] update clang/lib/Driver/ToolChains/OHOS.cpp. Signed-off-by: caiwei --- clang/lib/Driver/ToolChains/OHOS.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/clang/lib/Driver/ToolChains/OHOS.cpp b/clang/lib/Driver/ToolChains/OHOS.cpp index 3529a058b5e2..b1f27a48c860 100644 --- a/clang/lib/Driver/ToolChains/OHOS.cpp +++ b/clang/lib/Driver/ToolChains/OHOS.cpp @@ -432,8 +432,7 @@ SanitizerMask OHOS::getSupportedSanitizers() const { // OHOS_LOCAL Res |= SanitizerKind::HWAddress; // TODO: Support TSAN and HWASAN and update mask. - // OHOS_LOCAL - if (IsAArch64 || IsX86_64 || IsLoongArch64) + if (IsAArch64 || IsX86_64 || IsLoongArch64) // OHOS_LOCAL Res |= SanitizerKind::Thread; return Res; } -- Gitee