blob: 9cdab4c47ab9de02fcd3c0fa6086adfed88d3ea3 [file] [log] [blame]
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