diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index 963d03eb796f2df66e075e5a8d380e4c8cf2d018..a44d829b914354ab2cb01e37a14b0f0704db235d 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 0c57b4187f00fc1d314019a5a62da141c98dd347..a1f74db8bc5051672999b0d8b811996e9fc4a4ad 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 1bbe09030f3c38c7f1a29a5a72ea77e06132d44b..b1f27a48c860c551e1c99f06c7fe4f205741e5fb 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,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; + const bool IsLoongArch64 = getTriple().getArch() == llvm::Triple::loongarch64; // OHOS_LOCAL SanitizerMask Res = ToolChain::getSupportedSanitizers(); Res |= SanitizerKind::Address; Res |= SanitizerKind::PointerCompare; @@ -420,7 +432,7 @@ SanitizerMask OHOS::getSupportedSanitizers() const { // OHOS_LOCAL Res |= SanitizerKind::HWAddress; // TODO: Support TSAN and HWASAN and update mask. - if (IsAArch64 || IsX86_64) + if (IsAArch64 || IsX86_64 || IsLoongArch64) // OHOS_LOCAL Res |= SanitizerKind::Thread; return Res; } diff --git a/clang/test/Preprocessor/ohos.c b/clang/test/Preprocessor/ohos.c index 0c435c7ed5ab471e97d2358640d8ef838cd47955..7017c9847ccaed938cb4af7bd4dda45b397e5390 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 565ea795ac0e940da16a2fdc31a23e3490016b36..55bddb93842009af5d0b156bd43895bb68cdbe87 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 60b30566b7925a381ff33e3512e8152c6670b829..1fafdc9ffaf768519966c7fdcc9a391f4b318080 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 e7f5497e8797dd3cf2e8eb901e454007d3d07ff5..49a3c3dfc17ca49fc3f1a4a0975f2b4503361376 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp +++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp @@ -85,6 +85,7 @@ #endif #if SANITIZER_LINUX && defined(__loongarch__) +# include // OHOS_LOCAL # include #endif diff --git a/llvm-build/build.py b/llvm-build/build.py index c0a88a1ce3f6640c79895d063a3e87486e8c2191..4bd133a61155e4e33a36adb033f8e6c7d35c6ca2 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 7f7f44c774e2cb65e738a34608d8acec63f90bc3..39a0d23ac89363cfec0565bc91b237dc8e22311f 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 b0e5476fc15486c94f7a80b96d5fae817a065c01..2a1ca0bda39bf6b0ca9aa75776cfe1680e13b919 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 2999da74a9720b24dfc8e41134ccfff4a7403e95..78248e0a88ebe284aa75eaaac2cea576cd451e00 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 0000000000000000000000000000000000000000..6489acd51edc6b6388e8aaf61dae017f9ec6aa81 --- /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 e0243829f50c40dade51f3a16ee4492adf7070db..804a3d81d23eb0eca8ddd5527596173189b76a75 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 ;