mirror of
https://github.com/Kitware/CMake.git
synced 2026-11-06 05:16:58 +00:00
WINDOWS_EXPORT_ALL_SYMBOLS reads object files with two backends: on Windows hosts CMake walks the COFF symbol table itself, elsewhere (and for LLVM bitcode) it parses `nm` output. Only the walker applied the rules the MSVC ABI needs, so a DLL cross-compiled from Linux or macOS exported a different set of symbols than the same sources built on Windows. Move every rule that depends only on the symbol name into one place used by both backends, and teach the nm backend the rest: skip deleting destructors (`??_G`, `??_E`), export vftables (`??_7`) as code except on ARM64EC where they are DATA, ignore common symbols, and strip i386 decorations. The machine type these need is read from the COFF file header, once per object file. The expected output of the nm symbol-type test changes accordingly. Add a test running `cmake -E __create_def` over checked-in objects for x86_64, i386 and ARM64EC against expected .def files, so one expectation pins both backends. Fixes: #28103
CMake Tests Directory ********************* This directory contains the CMake test suite. See also the `CMake Testing Guide`_ and the `CMake Source Code Guide`_. .. _`CMake Testing Guide`: ../Help/dev/testing.rst .. _`CMake Source Code Guide`: ../Help/dev/source.rst Many tests exist as immediate subdirectories, but some tests are organized as follows. * ``CMakeLib/``: Source code, used for tests, that links to the ``CMakeLib`` library defined over in ``Source/``. * ``CMakeOnly/``: Deprecated. Tests that run CMake to generate a project but not build it. Superseded by ``Tests/RunCMake/``. * ``Find*/``: Tests for specific find modules that can only be run on machines with the corresponding packages installed. They are enabled in ``CMakeLists.txt`` by undocumented options used on CI builds. * ``Module/``: Tests for specific CMake modules. * ``RunCMake/``: Tests that run CMake and/or other tools while precisely checking their return code and stdout/stderr content. Useful for testing error cases and diagnostic output. See `RunCMake/README.rst`_. * ``Fuzzing/``: Fuzz testing targets using libFuzzer, integrated with OSS-Fuzz. See `Fuzzing/README.rst`_. .. _`RunCMake/README.rst`: RunCMake/README.rst .. _`Fuzzing/README.rst`: Fuzzing/README.rst