123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- From 7eacb2ab839e74cb07038398def5e3cc198448d4 Mon Sep 17 00:00:00 2001
- From: Wenyong Huang <wenyong.huang@intel.com>
- Date: Tue, 23 Jan 2024 12:21:20 +0800
- Subject: [PATCH] Enhance setting write gs base with cmake variable (#3066)
- In linux x86-64, developer can use cmake variable to configure whether
- to enable writing linear memory base address to x86 GS register or not:
- - `cmake -DWAMR_DISABLE_WRITE_GS_BASE=1`: disabled it
- - `cmake -DWAMR_DISABLE_WRITE_GS_BASE=0`: enabled it
- - `cmake` without `-DWAMR_DISABLE_WRITE_GS_BASE=1/0`:
- auto-detected by the compiler
- Upstream: https://github.com/bytecodealliance/wasm-micro-runtime/pull/3066
- Signed-off-by: Thomas Devoogdt <thomas@devoogdt.com>
- ---
- .../build-scripts/config_common.cmake | 65 ++++++++++++-------
- 1 file changed, 41 insertions(+), 24 deletions(-)
- diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/build-scripts/config_common.cmake b/lib/wasm-micro-runtime-WAMR-1.3.0/build-scripts/config_common.cmake
- index e73ebc85f..a61a522f3 100644
- --- a/lib/wasm-micro-runtime-WAMR-1.3.0/build-scripts/config_common.cmake
- +++ b/lib/wasm-micro-runtime-WAMR-1.3.0/build-scripts/config_common.cmake
- @@ -408,32 +408,49 @@ if (WAMR_BUILD_STATIC_PGO EQUAL 1)
- add_definitions (-DWASM_ENABLE_STATIC_PGO=1)
- message (" AOT static PGO enabled")
- endif ()
- -if (WAMR_DISABLE_WRITE_GS_BASE EQUAL 1)
- - add_definitions (-DWASM_DISABLE_WRITE_GS_BASE=1)
- - message (" Write linear memory base addr to x86 GS register disabled")
- -elseif (WAMR_BUILD_TARGET STREQUAL "X86_64"
- - AND WAMR_BUILD_PLATFORM STREQUAL "linux")
- - set (TEST_WRGSBASE_SOURCE "${CMAKE_BINARY_DIR}/test_wrgsbase.c")
- - file (WRITE "${TEST_WRGSBASE_SOURCE}" "
- - #include <stdio.h>
- - #include <stdint.h>
- - int main() {
- - uint64_t value;
- - asm volatile (\"wrgsbase %0\" : : \"r\"(value));
- - printf(\"WRGSBASE instruction is available.\\n\");
- - return 0;
- - }")
- - # Try to compile and run the test program
- - try_run (TEST_WRGSBASE_RESULT
- - TEST_WRGSBASE_COMPILED
- - ${CMAKE_BINARY_DIR}/test_wrgsbase
- - SOURCES ${TEST_WRGSBASE_SOURCE}
- - CMAKE_FLAGS -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
- - )
- - #message("${TEST_WRGSBASE_COMPILED}, ${TEST_WRGSBASE_RESULT}")
- - if (NOT TEST_WRGSBASE_RESULT EQUAL 0)
- +if (WAMR_BUILD_TARGET STREQUAL "X86_64"
- + AND WAMR_BUILD_PLATFORM STREQUAL "linux")
- + if (WAMR_DISABLE_WRITE_GS_BASE EQUAL 1)
- + # disabled by user
- + set (DISABLE_WRITE_GS_BASE 1)
- + elseif (WAMR_DISABLE_WRITE_GS_BASE EQUAL 0)
- + # enabled by user
- + set (DISABLE_WRITE_GS_BASE 0)
- + elseif (CMAKE_CROSSCOMPILING)
- + # disabled in cross compilation environment
- + set (DISABLE_WRITE_GS_BASE 1)
- + else ()
- + # auto-detected by the compiler
- + set (TEST_WRGSBASE_SOURCE "${CMAKE_BINARY_DIR}/test_wrgsbase.c")
- + file (WRITE "${TEST_WRGSBASE_SOURCE}" "
- + #include <stdio.h>
- + #include <stdint.h>
- + int main() {
- + uint64_t value;
- + asm volatile (\"wrgsbase %0\" : : \"r\"(value));
- + printf(\"WRGSBASE instruction is available.\\n\");
- + return 0;
- + }")
- + # Try to compile and run the test program
- + try_run (TEST_WRGSBASE_RESULT
- + TEST_WRGSBASE_COMPILED
- + ${CMAKE_BINARY_DIR}/test_wrgsbase
- + SOURCES ${TEST_WRGSBASE_SOURCE}
- + CMAKE_FLAGS -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
- + )
- + #message("${TEST_WRGSBASE_COMPILED}, ${TEST_WRGSBASE_RESULT}")
- + if (TEST_WRGSBASE_RESULT EQUAL 0)
- + set (DISABLE_WRITE_GS_BASE 0)
- + else ()
- + set (DISABLE_WRITE_GS_BASE 1)
- + endif ()
- + endif ()
- + if (DISABLE_WRITE_GS_BASE EQUAL 1)
- add_definitions (-DWASM_DISABLE_WRITE_GS_BASE=1)
- message (" Write linear memory base addr to x86 GS register disabled")
- + else ()
- + add_definitions (-DWASM_DISABLE_WRITE_GS_BASE=0)
- + message (" Write linear memory base addr to x86 GS register enabled")
- endif ()
- endif ()
- if (WAMR_CONFIGUABLE_BOUNDS_CHECKS EQUAL 1)
- --
- 2.34.1
|