-
Notifications
You must be signed in to change notification settings - Fork 11
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
bundle boost.context asm file. drop boost deps
- Loading branch information
Showing
67 changed files
with
7,805 additions
and
19 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,167 @@ | ||
|
||
## Binary format | ||
|
||
if(WIN32) | ||
set(_default_binfmt pe) | ||
elseif(APPLE) | ||
set(_default_binfmt mach-o) | ||
else() | ||
set(_default_binfmt elf) | ||
endif() | ||
|
||
set(BOOST_CONTEXT_BINARY_FORMAT "${_default_binfmt}" CACHE STRING "Boost.Context binary format (elf, mach-o, pe, xcoff)") | ||
set_property(CACHE BOOST_CONTEXT_BINARY_FORMAT PROPERTY STRINGS elf mach-o pe xcoff) | ||
|
||
unset(_default_binfmt) | ||
|
||
## ABI | ||
|
||
math(EXPR _bits "${CMAKE_SIZEOF_VOID_P}*8") | ||
|
||
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^[Aa][Rr][Mm]" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64") | ||
set(_default_abi aapcs) | ||
elseif(WIN32) | ||
set(_default_abi ms) | ||
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^mips") | ||
if(_bits EQUAL 32) | ||
set(_default_abi o32) | ||
else() | ||
set(_default_abi n64) | ||
endif() | ||
else() | ||
set(_default_abi sysv) | ||
endif() | ||
|
||
set(BOOST_CONTEXT_ABI "${_default_abi}" CACHE STRING "Boost.Context ABI (aapcs, eabi, ms, n32, n64, o32, o64, sysv, x32)") | ||
set_property(CACHE BOOST_CONTEXT_ABI PROPERTY STRINGS aapcs eabi ms n32 n64 o32 o64 sysv x32) | ||
|
||
unset(_default_abi) | ||
|
||
## Arch-and-model | ||
|
||
set(_all_archs arm arm64 loongarch64 mips32 mips64 power riscv64 s390x i386 x86_64 combined) | ||
|
||
# Try at start to auto determine arch from CMake. | ||
if(CMAKE_SYSTEM_PROCESSOR IN_LIST _all_archs) | ||
set(_default_arch ${CMAKE_SYSTEM_PROCESSOR}) | ||
elseif(_bits EQUAL 32) | ||
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^[Aa][Rr][Mm]") | ||
set(_default_arch arm) | ||
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^mips") | ||
set(_default_arch mips32) | ||
else() | ||
set(_default_arch i386) | ||
endif() | ||
else() | ||
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64" OR | ||
CMAKE_SYSTEM_PROCESSOR MATCHES "^[Aa][Rr][Mm]") # armv8 | ||
set(_default_arch arm64) | ||
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^mips") | ||
set(_default_arch mips64) | ||
else() | ||
set(_default_arch x86_64) | ||
endif() | ||
endif() | ||
|
||
set(BOOST_CONTEXT_ARCHITECTURE "${_default_arch}" CACHE STRING "Boost.Context architecture (arm, arm64, loongarch64, mips32, mips64, power, riscv64, s390x, i386, x86_64, combined)") | ||
set_property(CACHE BOOST_CONTEXT_ARCHITECTURE PROPERTY STRINGS ${_all_archs}) | ||
|
||
unset(_all_archs) | ||
unset(_bits) | ||
unset(_default_arch) | ||
|
||
## Assembler type | ||
|
||
if(MSVC) | ||
if(BOOST_CONTEXT_ARCHITECTURE STREQUAL arm64 OR BOOST_CONTEXT_ARCHITECTURE STREQUAL arm) | ||
set(_default_asm armasm) | ||
else() | ||
set(_default_asm masm) | ||
endif() | ||
else() | ||
set(_default_asm gas) | ||
endif() | ||
|
||
set(BOOST_CONTEXT_ASSEMBLER "${_default_asm}" CACHE STRING "Boost.Context assembler (masm, gas, armasm)") | ||
set_property(CACHE BOOST_CONTEXT_ASSEMBLER PROPERTY STRINGS masm gas armasm) | ||
|
||
unset(_default_asm) | ||
|
||
## Assembler source suffix | ||
|
||
if(BOOST_CONTEXT_BINARY_FORMAT STREQUAL pe) | ||
set(_default_ext .asm) | ||
elseif(BOOST_CONTEXT_ASSEMBLER STREQUAL gas) | ||
set(_default_ext .S) | ||
else() | ||
set(_default_ext .asm) | ||
endif() | ||
|
||
set(BOOST_CONTEXT_ASM_SUFFIX "${_default_ext}" CACHE STRING "Boost.Context assembler source suffix (.asm, .S)") | ||
set_property(CACHE BOOST_CONTEXT_ASM_SUFFIX PROPERTY STRINGS .asm .S) | ||
|
||
unset(_default_ext) | ||
|
||
## Implementation | ||
|
||
set(_default_impl fcontext) | ||
|
||
set(BOOST_CONTEXT_IMPLEMENTATION "${_default_impl}" CACHE STRING "Boost.Context implementation (fcontext, ucontext, winfib)") | ||
set_property(CACHE BOOST_CONTEXT_IMPLEMENTATION PROPERTY STRINGS fcontext ucontext winfib) | ||
|
||
unset(_default_impl) | ||
|
||
# | ||
|
||
message(STATUS "Boost.Context: " | ||
"architecture ${BOOST_CONTEXT_ARCHITECTURE}, " | ||
"binary format ${BOOST_CONTEXT_BINARY_FORMAT}, " | ||
"ABI ${BOOST_CONTEXT_ABI}, " | ||
"assembler ${BOOST_CONTEXT_ASSEMBLER}, " | ||
"suffix ${BOOST_CONTEXT_ASM_SUFFIX}, " | ||
"implementation ${BOOST_CONTEXT_IMPLEMENTATION}") | ||
|
||
# Enable the right assembler | ||
|
||
if(BOOST_CONTEXT_ASSEMBLER STREQUAL gas) | ||
if(CMAKE_CXX_PLATFORM_ID MATCHES "Cygwin") | ||
enable_language(ASM-ATT) | ||
else() | ||
enable_language(ASM) | ||
endif() | ||
elseif(BOOST_CONTEXT_ASSEMBLER STREQUAL armasm) | ||
enable_language(ASM_ARMASM) | ||
else() | ||
enable_language(ASM_MASM) | ||
endif() | ||
|
||
# Choose .asm sources | ||
|
||
if(BOOST_CONTEXT_BINARY_FORMAT STREQUAL mach-o) | ||
set(BOOST_CONTEXT_BINARY_FORMAT macho) | ||
endif() | ||
|
||
set(_asm_suffix ${BOOST_CONTEXT_ARCHITECTURE}_${BOOST_CONTEXT_ABI}_${BOOST_CONTEXT_BINARY_FORMAT}_${BOOST_CONTEXT_ASSEMBLER}${BOOST_CONTEXT_ASM_SUFFIX}) | ||
|
||
set(ASM_SOURCES | ||
make_${_asm_suffix} | ||
jump_${_asm_suffix} | ||
) | ||
|
||
unset(_asm_suffix) | ||
|
||
# | ||
if(BOOST_CONTEXT_ASSEMBLER STREQUAL masm) | ||
set(CMAKE_ASM_MASM_CREATE_STATIC_LIBRARY "<CMAKE_AR> /OUT:<TARGET> <LINK_FLAGS> <OBJECTS>") | ||
endif() | ||
|
||
if(BOOST_CONTEXT_ASSEMBLER STREQUAL masm AND BOOST_CONTEXT_ARCHITECTURE STREQUAL i386) | ||
set_source_files_properties(${ASM_SOURCES} PROPERTIES COMPILE_FLAGS "/safeseh") | ||
endif() | ||
|
||
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") | ||
set_property(SOURCE ${ASM_SOURCES} APPEND PROPERTY COMPILE_OPTIONS "-x" "assembler-with-cpp") | ||
endif() | ||
|
||
|
||
add_library(fcontext ${ASM_SOURCES}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,115 @@ | ||
/* | ||
Copyright Edward Nevill + Oliver Kowalke 2015 | ||
Distributed under the Boost Software License, Version 1.0. | ||
(See accompanying file LICENSE_1_0.txt or copy at | ||
http://www.boost.org/LICENSE_1_0.txt) | ||
*/ | ||
/******************************************************* | ||
* * | ||
* ------------------------------------------------- * | ||
* | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * | ||
* ------------------------------------------------- * | ||
* | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| * | ||
* ------------------------------------------------- * | ||
* | d8 | d9 | d10 | d11 | * | ||
* ------------------------------------------------- * | ||
* ------------------------------------------------- * | ||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * | ||
* ------------------------------------------------- * | ||
* | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| * | ||
* ------------------------------------------------- * | ||
* | d12 | d13 | d14 | d15 | * | ||
* ------------------------------------------------- * | ||
* ------------------------------------------------- * | ||
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | * | ||
* ------------------------------------------------- * | ||
* | 0x40| 0x44| 0x48| 0x4c| 0x50| 0x54| 0x58| 0x5c| * | ||
* ------------------------------------------------- * | ||
* | x19 | x20 | x21 | x22 | * | ||
* ------------------------------------------------- * | ||
* ------------------------------------------------- * | ||
* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | * | ||
* ------------------------------------------------- * | ||
* | 0x60| 0x64| 0x68| 0x6c| 0x70| 0x74| 0x78| 0x7c| * | ||
* ------------------------------------------------- * | ||
* | x23 | x24 | x25 | x26 | * | ||
* ------------------------------------------------- * | ||
* ------------------------------------------------- * | ||
* | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | * | ||
* ------------------------------------------------- * | ||
* | 0x80| 0x84| 0x88| 0x8c| 0x90| 0x94| 0x98| 0x9c| * | ||
* ------------------------------------------------- * | ||
* | x27 | x28 | FP | LR | * | ||
* ------------------------------------------------- * | ||
* ------------------------------------------------- * | ||
* | 40 | 41 | 42 | 43 | | | * | ||
* ------------------------------------------------- * | ||
* | 0xa0| 0xa4| 0xa8| 0xac| | | * | ||
* ------------------------------------------------- * | ||
* | PC | align | | | * | ||
* ------------------------------------------------- * | ||
* * | ||
*******************************************************/ | ||
|
||
.file "jump_arm64_aapcs_elf_gas.S" | ||
.text | ||
.align 2 | ||
.global jump_fcontext | ||
.hidden jump_fcontext | ||
.type jump_fcontext, %function | ||
jump_fcontext: | ||
# prepare stack for GP + FPU | ||
sub sp, sp, #0xb0 | ||
|
||
# save d8 - d15 | ||
stp d8, d9, [sp, #0x00] | ||
stp d10, d11, [sp, #0x10] | ||
stp d12, d13, [sp, #0x20] | ||
stp d14, d15, [sp, #0x30] | ||
|
||
# save x19-x30 | ||
stp x19, x20, [sp, #0x40] | ||
stp x21, x22, [sp, #0x50] | ||
stp x23, x24, [sp, #0x60] | ||
stp x25, x26, [sp, #0x70] | ||
stp x27, x28, [sp, #0x80] | ||
stp x29, x30, [sp, #0x90] | ||
|
||
# save LR as PC | ||
str x30, [sp, #0xa0] | ||
|
||
# store RSP (pointing to context-data) in X0 | ||
mov x4, sp | ||
|
||
# restore RSP (pointing to context-data) from X1 | ||
mov sp, x0 | ||
|
||
# load d8 - d15 | ||
ldp d8, d9, [sp, #0x00] | ||
ldp d10, d11, [sp, #0x10] | ||
ldp d12, d13, [sp, #0x20] | ||
ldp d14, d15, [sp, #0x30] | ||
|
||
# load x19-x30 | ||
ldp x19, x20, [sp, #0x40] | ||
ldp x21, x22, [sp, #0x50] | ||
ldp x23, x24, [sp, #0x60] | ||
ldp x25, x26, [sp, #0x70] | ||
ldp x27, x28, [sp, #0x80] | ||
ldp x29, x30, [sp, #0x90] | ||
|
||
# return transfer_t from jump | ||
# pass transfer_t as first arg in context function | ||
# X0 == FCTX, X1 == DATA | ||
mov x0, x4 | ||
|
||
# load pc | ||
ldr x4, [sp, #0xa0] | ||
|
||
# restore stack from GP + FPU | ||
add sp, sp, #0xb0 | ||
|
||
ret x4 | ||
.size jump_fcontext,.-jump_fcontext | ||
# Mark that we don't need executable stack. | ||
.section .note.GNU-stack,"",%progbits |
Oops, something went wrong.