Index: CMakeLists.txt =================================================================== --- CMakeLists.txt +++ CMakeLists.txt @@ -31,6 +31,9 @@ option(COMPILER_RT_BUILD_XRAY "Build xray" ON) mark_as_advanced(COMPILER_RT_BUILD_XRAY) +set(COMPILER_RT_BAREMETAL_BUILD OFF CACHE BOOLEAN + "Build for a bare-metal target.") + if (COMPILER_RT_STANDALONE_BUILD) load_llvm_config() Index: lib/builtins/CMakeLists.txt =================================================================== --- lib/builtins/CMakeLists.txt +++ lib/builtins/CMakeLists.txt @@ -66,7 +66,6 @@ divti3.c divtf3.c divxc3.c - enable_execute_stack.c eprintf.c extendsfdf2.c extendhfsf2.c @@ -191,6 +190,16 @@ "Skip the atomic builtin (this may be needed if system headers are unavailable)" Off) +if(COMPILER_RT_BAREMETAL_BUILD) + set(GENERIC_SOURCES + ${GENERIC_SOURCES} + enable_execute_stack_empty.c) +else() + set(GENERIC_SOURCES + ${GENERIC_SOURCES} + enable_execute_stack.c) +endif() + if(COMPILER_RT_HAS_ATOMIC_KEYWORD AND NOT COMPILER_RT_EXCLUDE_ATOMIC_BUILTIN) set(GENERIC_SOURCES ${GENERIC_SOURCES} Index: lib/builtins/README.txt =================================================================== --- lib/builtins/README.txt +++ lib/builtins/README.txt @@ -204,7 +204,8 @@ // __enable_execute_stack() is used with nested functions when a trampoline // function is written onto the stack and that page range needs to be made -// executable. +// executable. A dummy version is provided for baremetal targets that do +// not have support for mprotect. void __enable_execute_stack(void* addr); // __gcc_personality_v0() is normally only called by the system unwinder.