diff --git a/arm-software/embedded/arm-multilib/json/variants/aarch64a_exn_rtti.json b/arm-software/embedded/arm-multilib/json/variants/aarch64a_exn_rtti.json index 6ba709ad5c15..90b1d9c66fe9 100644 --- a/arm-software/embedded/arm-multilib/json/variants/aarch64a_exn_rtti.json +++ b/arm-software/embedded/arm-multilib/json/variants/aarch64a_exn_rtti.json @@ -10,12 +10,12 @@ "FVP_MODEL": "aem-a", "FVP_CONFIG": "v8a-aarch64", "BOOT_FLASH_ADDRESS": "0x80000000", - "BOOT_FLASH_SIZE": "0x1000", - "FLASH_ADDRESS": "0x80001000", - "FLASH_SIZE": "0xfff000", + "BOOT_FLASH_SIZE": "0x4000", + "FLASH_ADDRESS": "0x80004000", + "FLASH_SIZE": "0xffc000", "RAM_ADDRESS": "0x81000000", "RAM_SIZE": "0x1000000", - "STACK_SIZE": "8K", + "STACK_SIZE": "128K", "LIBRARY_BUILD_TYPE": "release" }, "picolibc": { @@ -34,7 +34,7 @@ "ENABLE_CXX_LIBS": "ON", "ENABLE_LIBC_TESTS": "ON", "ENABLE_COMPILER_RT_TESTS": "OFF", - "ENABLE_LIBCXX_TESTS": "OFF" + "ENABLE_LIBCXX_TESTS": "ON" } } } diff --git a/arm-software/embedded/arm-multilib/json/variants/armv7m_hard_fpv4_sp_d16_exn_rtti_size.json b/arm-software/embedded/arm-multilib/json/variants/armv7m_hard_fpv4_sp_d16_exn_rtti_size.json index 80851c841385..a8fa18d9f9c7 100644 --- a/arm-software/embedded/arm-multilib/json/variants/armv7m_hard_fpv4_sp_d16_exn_rtti_size.json +++ b/arm-software/embedded/arm-multilib/json/variants/armv7m_hard_fpv4_sp_d16_exn_rtti_size.json @@ -15,7 +15,7 @@ "FLASH_SIZE": "0x600000", "RAM_ADDRESS": "0x21600000", "RAM_SIZE": "0xa00000", - "STACK_SIZE": "4K", + "STACK_SIZE": "128K", "LIBRARY_BUILD_TYPE": "minsizerelease" }, "picolibc": { @@ -34,7 +34,7 @@ "ENABLE_CXX_LIBS": "ON", "ENABLE_LIBC_TESTS": "ON", "ENABLE_COMPILER_RT_TESTS": "OFF", - "ENABLE_LIBCXX_TESTS": "OFF" + "ENABLE_LIBCXX_TESTS": "ON" } } } diff --git a/arm-software/embedded/arm-multilib/json/variants/armv7m_soft_nofp_exn_rtti_size.json b/arm-software/embedded/arm-multilib/json/variants/armv7m_soft_nofp_exn_rtti_size.json index cdfb15c8c292..9e61b353f24a 100644 --- a/arm-software/embedded/arm-multilib/json/variants/armv7m_soft_nofp_exn_rtti_size.json +++ b/arm-software/embedded/arm-multilib/json/variants/armv7m_soft_nofp_exn_rtti_size.json @@ -15,7 +15,7 @@ "FLASH_SIZE": "0x600000", "RAM_ADDRESS": "0x21600000", "RAM_SIZE": "0xa00000", - "STACK_SIZE": "4K", + "STACK_SIZE": "128K", "LIBRARY_BUILD_TYPE": "minsizerelease" }, "picolibc": { @@ -34,7 +34,7 @@ "ENABLE_CXX_LIBS": "ON", "ENABLE_LIBC_TESTS": "ON", "ENABLE_COMPILER_RT_TESTS": "OFF", - "ENABLE_LIBCXX_TESTS": "OFF" + "ENABLE_LIBCXX_TESTS": "ON" } } } diff --git a/arm-software/embedded/arm-runtimes/CMakeLists.txt b/arm-software/embedded/arm-runtimes/CMakeLists.txt index d61a1f38e157..e19c43fe39d9 100644 --- a/arm-software/embedded/arm-runtimes/CMakeLists.txt +++ b/arm-software/embedded/arm-runtimes/CMakeLists.txt @@ -1058,6 +1058,7 @@ if(ENABLE_CXX_LIBS) -DLIBCXX_ENABLE_FILESYSTEM=OFF -DLIBCXX_ENABLE_LOCALIZATION=ON -DLIBCXX_ENABLE_UNICODE=OFF + -DLIBCXX_HAS_RT_LIB=OFF -DLIBUNWIND_ENABLE_THREADS=OFF -DLIBCXXABI_ENABLE_EXCEPTIONS=${ENABLE_EXCEPTIONS} -DLIBCXXABI_ENABLE_STATIC_UNWINDER=${ENABLE_EXCEPTIONS} @@ -1106,6 +1107,7 @@ if(ENABLE_CXX_LIBS) -DLIBUNWIND_TEST_CONFIG=${CMAKE_CURRENT_SOURCE_DIR}/test-support/llvm-libunwind-embedded.cfg.in -DLIBUNWIND_TEST_PARAMS=executor=${lit_test_executor} -DRUNTIME_TEST_ARCH_FLAGS=${compile_arch_flags} + -DRUNTIME_LIBC=${C_LIBRARY} -DRUNTIME_TEST_LINK_FLAGS=${runtime_test_link_flags} -DRUNTIME_TEST_EXTRA_COMPILE_FLAGS=${runtime_test_extra_compile_flags} -DLLVM_LIT_ARGS=${libcxx_lit_args} diff --git a/arm-software/embedded/arm-runtimes/test-support/lit-exec-fvp.py b/arm-software/embedded/arm-runtimes/test-support/lit-exec-fvp.py index b252007a9ba2..7b4762f84105 100755 --- a/arm-software/embedded/arm-runtimes/test-support/lit-exec-fvp.py +++ b/arm-software/embedded/arm-runtimes/test-support/lit-exec-fvp.py @@ -81,7 +81,7 @@ def main(): args.fvp_model, args.fvp_config, args.image, - [args.image] + args.arguments, + [pathlib.Path(args.image).name] + args.arguments, args.timeout, args.execdir, args.verbose, diff --git a/arm-software/embedded/arm-runtimes/test-support/lit-exec-qemu.py b/arm-software/embedded/arm-runtimes/test-support/lit-exec-qemu.py index b8f8a5b9d21b..511585615eae 100755 --- a/arm-software/embedded/arm-runtimes/test-support/lit-exec-qemu.py +++ b/arm-software/embedded/arm-runtimes/test-support/lit-exec-qemu.py @@ -77,7 +77,7 @@ def main(): args.qemu_cpu, args.qemu_params.split(":") if args.qemu_params else [], args.image, - [args.image] + args.arguments, + [pathlib.Path(args.image).name] + args.arguments, args.timeout, args.execdir, args.verbose, diff --git a/arm-software/embedded/arm-runtimes/test-support/llvm-libc++-embedded.cfg.in b/arm-software/embedded/arm-runtimes/test-support/llvm-libc++-embedded.cfg.in index 4d2e44294b0f..e93f900d633b 100644 --- a/arm-software/embedded/arm-runtimes/test-support/llvm-libc++-embedded.cfg.in +++ b/arm-software/embedded/arm-runtimes/test-support/llvm-libc++-embedded.cfg.in @@ -3,6 +3,8 @@ config.name = 'libc++-@RUNTIME_VARIANT_NAME@' +config.available_features.add('libc=@RUNTIME_LIBC@') + config.substitutions.append(('%{libc-include}', '@CMAKE_INSTALL_PREFIX@/include')) config.substitutions.append(('%{libc-lib}', '@CMAKE_INSTALL_PREFIX@/lib')) config.substitutions.append(('%{libc-extra-link-flags}', '@RUNTIME_TEST_LINK_FLAGS@')) diff --git a/arm-software/embedded/arm-runtimes/test-support/run_fvp.py b/arm-software/embedded/arm-runtimes/test-support/run_fvp.py index 2487051ba8f7..ea7e1cac824b 100644 --- a/arm-software/embedded/arm-runtimes/test-support/run_fvp.py +++ b/arm-software/embedded/arm-runtimes/test-support/run_fvp.py @@ -18,6 +18,7 @@ class FVP: tarmac_plugin: str crypto_plugin: str cmdline_param: str + stderr_param: str | None = None MODELS = { @@ -41,12 +42,14 @@ class FVP: "FVP_Base_RevC_AEMvA_11.31_28/plugins/TarmacTrace.so", "FastModels_11.31_28/plugins/Linux64_GCC-12.3/Crypto.so", "cluster0.cpu0.semihosting-cmd_line", + "cluster0.cpu0.semihosting-use_stderr", ), "aarch64": FVP( "FVP_Base_RevC_AEMvA_11.31_28/bin/FVP_Base_RevC-2xAEMvA", "FVP_Base_RevC_AEMvA_11.31_28/plugins/TarmacTrace.so", "FastModels_11.31_28/plugins/Linux64_armv8l_GCC-12.3/Crypto.so", "cluster0.cpu0.semihosting-cmd_line", + "cluster0.cpu0.semihosting-use_stderr", ), }, "aem-r": { @@ -55,12 +58,14 @@ class FVP: "FVP_Base_AEMv8R_11.31_28/plugins/TarmacTrace.so", "FastModels_11.31_28/plugins/Linux64_GCC-12.3/Crypto.so", "cluster0.cpu0.semihosting-cmd_line", + "cluster0.cpu0.semihosting-use_stderr", ), "aarch64": FVP( "FVP_Base_AEMv8R_11.31_28/bin/FVP_BaseR_AEMv8R", "FVP_Base_AEMv8R_11.31_28/plugins/TarmacTrace.so", "FastModels_11.31_28/plugins/Linux64_armv8l_GCC-12.3/Crypto.so", "cluster0.cpu0.semihosting-cmd_line", + "cluster0.cpu0.semihosting-use_stderr", ), }, } @@ -129,6 +134,8 @@ def run_fvp( ) command.extend(["--parameter", f"{model.cmdline_param}={shlex.join(arguments)}"]) + if model.stderr_param is not None: + command.extend(["--parameter", f"{model.stderr_param}=1"]) command.extend(["--plugin", path.join(fvp_install_dir, model.crypto_plugin)]) if tarmac_file is not None: command.extend( diff --git a/arm-software/embedded/arm-runtimes/test-support/xfails.py b/arm-software/embedded/arm-runtimes/test-support/xfails.py index dca2979a1014..12eae56b5bdd 100644 --- a/arm-software/embedded/arm-runtimes/test-support/xfails.py +++ b/arm-software/embedded/arm-runtimes/test-support/xfails.py @@ -92,6 +92,12 @@ def check_r52_warning(): p = subprocess.run(test_args, capture_output=True, check=False) return p.returncode != 0 + def check_llvmlibc(): + return args.libc == "llvmlibc" + + def check_not_llvmlibc(): + return args.libc != "llvmlibc" + xfails = [ XFail( name="no frwpi", @@ -241,7 +247,6 @@ def check_r52_warning(): "armv6m_soft_nofp_size", "armebv6m_soft_nofp_exn_rtti_size", "armebv6m_soft_nofp_size", - "armv7m_hard_fpv4_sp_d16_exn_rtti_size", "armv7m_hard_fpv4_sp_d16_exn_rtti_unaligned_size", "armv7m_hard_fpv4_sp_d16_size", "armv7m_hard_fpv4_sp_d16_unaligned_size", @@ -251,7 +256,6 @@ def check_r52_warning(): "armv7m_soft_fpv4_sp_d16_exn_rtti_unaligned_size", "armv7m_soft_fpv4_sp_d16_size", "armv7m_soft_fpv4_sp_d16_unaligned_size", - "armv7m_soft_nofp_exn_rtti_size", "armv7m_soft_nofp_exn_rtti_unaligned_size", "armv7m_soft_nofp_size", "armv7m_soft_nofp_unaligned_size", @@ -522,6 +526,7 @@ def check_r52_warning(): ], result=NewResult.PASSED, project="libcxx", + conditional=check_not_llvmlibc, description="More recent picolibc versions do now support char16_t and char32_t", ), XFail( @@ -604,6 +609,7 @@ def check_r52_warning(): "aarch64r_be_soft_nofp", "aarch64r_be_soft_nofp_exn_rtti", ], + conditional=check_not_llvmlibc, description="Broken conversion between 128-bit types and string.", ), XFail( @@ -635,6 +641,7 @@ def check_r52_warning(): "aarch64r_soft_nofp_exn_rtti", "aarch64r_soft_nofp_exn_rtti_unaligned", ], + conditional=check_not_llvmlibc, description="Broken conversion between 128-bit types and string.", ), XFail( @@ -661,6 +668,7 @@ def check_r52_warning(): "aarch64r_soft_nofp_exn_rtti", "aarch64r_soft_nofp_exn_rtti_unaligned", ], + conditional=check_not_llvmlibc, description="Broken conversion between 128-bit types and string.", ), XFail( @@ -904,6 +912,268 @@ def check_r52_warning(): ], description="The test expects serial port activity to end the test and times out without it.", ), + XFail( + name="llvmlibc missing signal.h", + testnames=[ + "extensions/libcxx/depr/depr.c.headers/extern_c.pass.cpp", + "libcxx/assertions/default_verbose_abort.pass.cpp", + "std/depr/depr.c.headers/signal_h.compile.pass.cpp", + "std/depr/depr.c.headers/stdint_h.pass.cpp", + "std/language.support/cstdint/cstdint.syn/cstdint.pass.cpp", + "std/language.support/support.runtime/csignal.pass.cpp", + ], + result=NewResult.XFAILED, + project="libcxx", + variants=[ + "aarch64a_exn_rtti", + "armv7m_hard_fpv4_sp_d16_exn_rtti_size", + "armv7m_soft_nofp_exn_rtti_size", + ], + conditional=check_llvmlibc, + description="LLVM libc does not provide the signal.h required by these tests.", + ), + XFail( + name="llvmlibc missing uchar conversion support", + testnames=[ + "std/depr/depr.c.headers/uchar_h.compile.pass.cpp", + "std/strings/c.strings/cuchar.compile.pass.cpp", + ], + result=NewResult.XFAILED, + project="libcxx", + variants=[ + "aarch64a_exn_rtti", + "armv7m_hard_fpv4_sp_d16_exn_rtti_size", + "armv7m_soft_nofp_exn_rtti_size", + ], + conditional=check_llvmlibc, + description="LLVM libc does not provide uchar.h conversion functions such as mbrtoc16, c16rtomb, mbrtoc32, and c32rtomb.", + ), + XFail( + name="llvmlibc unsupported math.h/cmath header scope", + testnames=[ + "std/depr/depr.c.headers/math_h.pass.cpp", + "std/numerics/c.math/cmath.pass.cpp", + ], + result=NewResult.XFAILED, + project="libcxx", + variants=[ + "aarch64a_exn_rtti", + "armv7m_hard_fpv4_sp_d16_exn_rtti_size", + "armv7m_soft_nofp_exn_rtti_size", + ], + conditional=check_llvmlibc, + description="LLVM libc does not provide the full math.h/cmath declaration scope expected by these header tests.", + ), + XFail( + name="llvmlibc missing file IO support", + testnames=[ + "libcxx/input.output/file.streams/fstreams/fstream.close.pass.cpp", + "libcxx/input.output/file.streams/fstreams/nodiscard.verify.cpp", + "libcxx/input.output/filesystems/convert_file_time.pass.cpp", + "std/depr/depr.c.headers/stdio_h.compile.pass.cpp", + "std/input.output/file.streams/c.files/cstdio.pass.cpp", + "std/input.output/file.streams/fstreams/filebuf.assign/member_swap.pass.cpp", + "std/input.output/file.streams/fstreams/filebuf.assign/move_assign.pass.cpp", + "std/input.output/file.streams/fstreams/filebuf.assign/nonmember_swap.pass.cpp", + "std/input.output/file.streams/fstreams/filebuf.assign/nonmember_swap_min.pass.cpp", + "std/input.output/file.streams/fstreams/filebuf.cons/default.pass.cpp", + "std/input.output/file.streams/fstreams/filebuf.cons/move.pass.cpp", + "std/input.output/file.streams/fstreams/filebuf.members/close.pass.cpp", + "std/input.output/file.streams/fstreams/filebuf.members/open_path.pass.cpp", + "std/input.output/file.streams/fstreams/filebuf.virtuals/pbackfail.pass.cpp", + "std/input.output/file.streams/fstreams/filebuf.virtuals/seekoff.pass.cpp", + "std/input.output/file.streams/fstreams/filebuf.virtuals/setbuf.pass.cpp", + "std/input.output/file.streams/fstreams/filebuf.virtuals/xsputn.pass.cpp", + "std/input.output/file.streams/fstreams/filebuf/types.pass.cpp", + "std/input.output/file.streams/fstreams/fstream.assign/member_swap.pass.cpp", + "std/input.output/file.streams/fstreams/fstream.assign/move_assign.pass.cpp", + "std/input.output/file.streams/fstreams/fstream.assign/nonmember_swap.pass.cpp", + "std/input.output/file.streams/fstreams/fstream.cons/default.pass.cpp", + "std/input.output/file.streams/fstreams/fstream.cons/move.pass.cpp", + "std/input.output/file.streams/fstreams/fstream.cons/path.pass.cpp", + "std/input.output/file.streams/fstreams/fstream.cons/string.pass.cpp", + "std/input.output/file.streams/fstreams/fstream.members/close.pass.cpp", + "std/input.output/file.streams/fstreams/fstream.members/open_path.pass.cpp", + "std/input.output/file.streams/fstreams/fstream.members/open_string.pass.cpp", + "std/input.output/file.streams/fstreams/fstream.members/rdbuf.pass.cpp", + "std/input.output/file.streams/fstreams/fstream/types.pass.cpp", + "std/input.output/file.streams/fstreams/ifstream.assign/member_swap.pass.cpp", + "std/input.output/file.streams/fstreams/ifstream.assign/move_assign.pass.cpp", + "std/input.output/file.streams/fstreams/ifstream.assign/nonmember_swap.pass.cpp", + "std/input.output/file.streams/fstreams/ifstream.cons/default.pass.cpp", + "std/input.output/file.streams/fstreams/ifstream.cons/move.pass.cpp", + "std/input.output/file.streams/fstreams/ifstream.cons/path.pass.cpp", + "std/input.output/file.streams/fstreams/ifstream.cons/pointer.pass.cpp", + "std/input.output/file.streams/fstreams/ifstream.cons/string.pass.cpp", + "std/input.output/file.streams/fstreams/ifstream.members/buffered_reads.pass.cpp", + "std/input.output/file.streams/fstreams/ifstream.members/close.pass.cpp", + "std/input.output/file.streams/fstreams/ifstream.members/open_path.pass.cpp", + "std/input.output/file.streams/fstreams/ifstream.members/open_pointer.pass.cpp", + "std/input.output/file.streams/fstreams/ifstream.members/open_string.pass.cpp", + "std/input.output/file.streams/fstreams/ifstream.members/rdbuf.pass.cpp", + "std/input.output/file.streams/fstreams/ifstream.members/xsgetn.pass.cpp", + "std/input.output/file.streams/fstreams/ifstream/types.pass.cpp", + "std/input.output/file.streams/fstreams/ofstream.assign/member_swap.pass.cpp", + "std/input.output/file.streams/fstreams/ofstream.assign/move_assign.pass.cpp", + "std/input.output/file.streams/fstreams/ofstream.assign/nonmember_swap.pass.cpp", + "std/input.output/file.streams/fstreams/ofstream.cons/default.pass.cpp", + "std/input.output/file.streams/fstreams/ofstream.cons/move.pass.cpp", + "std/input.output/file.streams/fstreams/ofstream.cons/path.pass.cpp", + "std/input.output/file.streams/fstreams/ofstream.cons/string.pass.cpp", + "std/input.output/file.streams/fstreams/ofstream.members/buffered_writes.pass.cpp", + "std/input.output/file.streams/fstreams/ofstream.members/close.pass.cpp", + "std/input.output/file.streams/fstreams/ofstream.members/open_path.pass.cpp", + "std/input.output/file.streams/fstreams/ofstream.members/open_string.pass.cpp", + "std/input.output/file.streams/fstreams/ofstream.members/rdbuf.pass.cpp", + "std/input.output/file.streams/fstreams/ofstream/types.pass.cpp", + ], + result=NewResult.XFAILED, + project="libcxx", + variants=[ + "aarch64a_exn_rtti", + "armv7m_hard_fpv4_sp_d16_exn_rtti_size", + "armv7m_soft_nofp_exn_rtti_size", + ], + conditional=check_llvmlibc, + description="LLVM libc for bare-metal does not provide FILE and filesystem support required by libc++ file I/O tests.", + ), + XFail( + name="llvmlibc system_error category behavior", + testnames=[ + "std/diagnostics/syserr/syserr.errcat/syserr.errcat.objects/system_category.pass.cpp", + "std/diagnostics/syserr/syserr.syserr/syserr.syserr.members/ctor_error_code.pass.cpp", + "std/diagnostics/syserr/syserr.syserr/syserr.syserr.members/ctor_error_code_const_char_pointer.pass.cpp", + "std/diagnostics/syserr/syserr.syserr/syserr.syserr.members/ctor_error_code_string.pass.cpp", + "std/diagnostics/syserr/syserr.syserr/syserr.syserr.members/ctor_int_error_category.pass.cpp", + "std/diagnostics/syserr/syserr.syserr/syserr.syserr.members/ctor_int_error_category_const_char_pointer.pass.cpp", + "std/diagnostics/syserr/syserr.syserr/syserr.syserr.members/ctor_int_error_category_string.pass.cpp", + ], + result=NewResult.XFAILED, + project="libcxx", + variants=[ + "aarch64a_exn_rtti", + "armv7m_hard_fpv4_sp_d16_exn_rtti_size", + "armv7m_soft_nofp_exn_rtti_size", + ], + conditional=check_llvmlibc, + description="LLVM libc system_error category and strerror text behavior differs from hosted libc++ expectations.", + ), + XFail( + name="llvmlibc embedded executor stdin/runtime failures", + testnames=[ + "std/containers/unord/unord.multiset/local_iterators.pass.cpp", + "std/input.output/iostream.objects/narrow.stream.objects/cin.readmany.sh.cpp", + "std/input.output/iostream.objects/narrow.stream.objects/cin.sh.cpp", + "std/input.output/iostream.objects/narrow.stream.objects/cin.sync_with_stdio.sh.cpp", + ], + result=NewResult.EXCLUDE, + project="libcxx", + variants=[ + "aarch64a_exn_rtti", + "armv7m_hard_fpv4_sp_d16_exn_rtti_size", + "armv7m_soft_nofp_exn_rtti_size", + ], + conditional=check_llvmlibc, + description="Runtime tests depend on stdin/runtime behavior that hangs with semihosting, thus EXCLUDED.", + ), + XFail( + name="llvmlibc missing math functions", + testnames=[ + "libcxx/fuzzing/random.pass.cpp", + "libcxx/numerics/c.math/constexpr-cxx23-clang.pass.cpp", + "std/numerics/c.math/hermite.pass.cpp", + "std/numerics/complex.number/cmplx.over/pow.pass.cpp", + "std/numerics/complex.number/complex.transcendentals/acos.pass.cpp", + "std/numerics/complex.number/complex.transcendentals/acosh.pass.cpp", + "std/numerics/complex.number/complex.transcendentals/asin.pass.cpp", + "std/numerics/complex.number/complex.transcendentals/asinh.pass.cpp", + "std/numerics/complex.number/complex.transcendentals/atan.pass.cpp", + "std/numerics/complex.number/complex.transcendentals/atanh.pass.cpp", + "std/numerics/complex.number/complex.transcendentals/cos.pass.cpp", + "std/numerics/complex.number/complex.transcendentals/cosh.pass.cpp", + "std/numerics/complex.number/complex.transcendentals/exp.pass.cpp", + "std/numerics/complex.number/complex.transcendentals/log.pass.cpp", + "std/numerics/complex.number/complex.transcendentals/log10.pass.cpp", + "std/numerics/complex.number/complex.transcendentals/pow_complex_complex.pass.cpp", + "std/numerics/complex.number/complex.transcendentals/pow_complex_scalar.pass.cpp", + "std/numerics/complex.number/complex.transcendentals/pow_scalar_complex.pass.cpp", + "std/numerics/complex.number/complex.transcendentals/sin.pass.cpp", + "std/numerics/complex.number/complex.transcendentals/sinh.pass.cpp", + "std/numerics/complex.number/complex.transcendentals/sqrt.pass.cpp", + "std/numerics/complex.number/complex.transcendentals/tan.pass.cpp", + "std/numerics/complex.number/complex.transcendentals/tanh.pass.cpp", + "std/numerics/complex.number/complex.value.ops/abs.pass.cpp", + "std/numerics/complex.number/complex.value.ops/polar.pass.cpp", + "std/numerics/numarray/valarray.nonmembers/valarray.transcend/cosh_valarray.pass.cpp", + "std/numerics/numarray/valarray.nonmembers/valarray.transcend/sinh_valarray.pass.cpp", + "std/numerics/numarray/valarray.nonmembers/valarray.transcend/tanh_valarray.pass.cpp", + "std/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.bin/assign.pass.cpp", + "std/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.bin/copy.pass.cpp", + "std/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.bin/ctor_int_double.pass.cpp", + "std/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.bin/ctor_param.pass.cpp", + "std/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.bin/eq.pass.cpp", + "std/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.bin/get_param.pass.cpp", + "std/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.bin/io.pass.cpp", + "std/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.bin/max.pass.cpp", + "std/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.bin/min.pass.cpp", + "std/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.bin/param_assign.pass.cpp", + "std/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.bin/param_copy.pass.cpp", + "std/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.bin/param_ctor.pass.cpp", + "std/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.bin/param_eq.pass.cpp", + "std/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.bin/set_param.pass.cpp", + ], + result=NewResult.XFAILED, + project="libcxx", + variants=[ + "aarch64a_exn_rtti", + "armv7m_hard_fpv4_sp_d16_exn_rtti_size", + "armv7m_soft_nofp_exn_rtti_size", + ], + conditional=check_llvmlibc, + description="LLVM libc is missing math/libm functions resulting in link errors.", + ), + XFail( + name="llvmlibc aarch64 missing long double atan2", + testnames=[ + "std/numerics/complex.number/cmplx.over/arg.pass.cpp", + "std/numerics/complex.number/complex.value.ops/arg.pass.cpp", + ], + result=NewResult.XFAILED, + project="libcxx", + variants=[ + "aarch64a_exn_rtti", + ], + conditional=check_llvmlibc, + description="AArch64 LLVM libc uses long double for these complex arg tests and is missing atan2l.", + ), + XFail( + name="llvmlibc aarch64 coroutine runtime behavior", + testnames=[ + "std/language.support/support.coroutines/end.to.end/expected.pass.cpp", + ], + result=NewResult.XFAILED, + project="libcxx", + variants=[ + "aarch64a_exn_rtti", + ], + conditional=check_llvmlibc, + description="AArch64 LLVM libc/FVP run fails this coroutine end-to-end test at runtime; c1.value() remains the default value instead of the co_return value.", + ), + XFail( + name="llvmlibc disabled scanf floating point support", + testnames=[ + "std/localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_long_double_overlong.pass.cpp", + ], + result=NewResult.XFAILED, + project="libcxx", + variants=[ + "aarch64a_exn_rtti", + "armv7m_hard_fpv4_sp_d16_exn_rtti_size", + "armv7m_soft_nofp_exn_rtti_size", + ], + conditional=check_llvmlibc, + description="LLVM libc bare-metal disables scanf floating-point conversions with LIBC_CONF_SCANF_DISABLE_FLOAT, but libc++ money_get uses it.", + ), XFail( name="variadic vector type arguments", testnames=[ diff --git a/arm-software/embedded/llvmlibc-support/semihost/semihost.cpp b/arm-software/embedded/llvmlibc-support/semihost/semihost.cpp index db0781dfefa4..31e2e323ab33 100644 --- a/arm-software/embedded/llvmlibc-support/semihost/semihost.cpp +++ b/arm-software/embedded/llvmlibc-support/semihost/semihost.cpp @@ -116,7 +116,7 @@ bool __llvm_libc_timespec_get_utc(struct timespec *ts) { void _platform_init(void) { stdio_open(&__llvm_libc_stdin_cookie, OPENMODE_R); stdio_open(&__llvm_libc_stdout_cookie, OPENMODE_W); - stdio_open(&__llvm_libc_stderr_cookie, OPENMODE_W); + stdio_open(&__llvm_libc_stderr_cookie, OPENMODE_A); } // Debug output