Merge pull request 'feat/support_fiber' (#2) from feat/support_fiber into master
All checks were successful
linux-aarch64-cpu-gcc / linux-gcc-aarch64 (Debug) (push) Successful in 1m23s
linux-aarch64-cpu-gcc / linux-gcc-aarch64 (Release) (push) Successful in 1m45s
linux-arm-gcc / linux-gcc-arm (Debug) (push) Successful in 1m35s
linux-arm-gcc / linux-gcc-arm (Release) (push) Successful in 1m35s
linux-arm-gcc / linux-gcc-armhf (Debug) (push) Successful in 1m51s
linux-arm-gcc / linux-gcc-armhf (Release) (push) Successful in 1m49s
linux-mips-gcc / linux-gcc-mipsel (Debug) (push) Successful in 1m25s
linux-mips-gcc / linux-gcc-mipsel (Release) (push) Successful in 2m6s
linux-mips64-gcc / linux-gcc-mips64el (Debug) (push) Successful in 1m25s
linux-mips64-gcc / linux-gcc-mips64el (Release) (push) Successful in 1m39s
linux-riscv64-gcc / linux-gcc-riscv64 (Debug) (push) Successful in 3m5s
linux-riscv64-gcc / linux-gcc-riscv64 (Release) (push) Successful in 1m50s
linux-x64-gcc / linux-gcc (Debug) (push) Successful in 2m6s
linux-x64-gcc / linux-gcc (Release) (push) Successful in 2m30s
linux-x86-gcc / linux-gcc (Debug) (push) Successful in 2m24s
linux-x86-gcc / linux-gcc (Release) (push) Successful in 2m28s
All checks were successful
linux-aarch64-cpu-gcc / linux-gcc-aarch64 (Debug) (push) Successful in 1m23s
linux-aarch64-cpu-gcc / linux-gcc-aarch64 (Release) (push) Successful in 1m45s
linux-arm-gcc / linux-gcc-arm (Debug) (push) Successful in 1m35s
linux-arm-gcc / linux-gcc-arm (Release) (push) Successful in 1m35s
linux-arm-gcc / linux-gcc-armhf (Debug) (push) Successful in 1m51s
linux-arm-gcc / linux-gcc-armhf (Release) (push) Successful in 1m49s
linux-mips-gcc / linux-gcc-mipsel (Debug) (push) Successful in 1m25s
linux-mips-gcc / linux-gcc-mipsel (Release) (push) Successful in 2m6s
linux-mips64-gcc / linux-gcc-mips64el (Debug) (push) Successful in 1m25s
linux-mips64-gcc / linux-gcc-mips64el (Release) (push) Successful in 1m39s
linux-riscv64-gcc / linux-gcc-riscv64 (Debug) (push) Successful in 3m5s
linux-riscv64-gcc / linux-gcc-riscv64 (Release) (push) Successful in 1m50s
linux-x64-gcc / linux-gcc (Debug) (push) Successful in 2m6s
linux-x64-gcc / linux-gcc (Release) (push) Successful in 2m30s
linux-x86-gcc / linux-gcc (Debug) (push) Successful in 2m24s
linux-x86-gcc / linux-gcc (Release) (push) Successful in 2m28s
Reviewed-on: #2
This commit is contained in:
commit
e20809aacc
@ -38,20 +38,21 @@ jobs:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: install-tools
|
||||
run: |
|
||||
echo "H4sIANpBXGYCA72SX0vCUByG7/0UB7x2u+/bzG3lyP3h/Am608zU0rbAxEiopEQSZlDI3JK+zM7ZzlVfoQMjL4IgV3Z3OBx+z+95z1sEPBqm/j17nvLWaRyesNBLbuv8ckQbbhw9MNfjsyFQHAyIoylYB7x2Q8PJ+2uXTo7YqMNHtXRSp+48bT2md13qDtiinU0raHoZVDB20I4smwaENkQSJpYiYWRYexWiSLpGJNWSSZlYmMhg11aVKjAVwwJQRxgaKtY1QCzjQIdIByap4uxYKAIxvISgui1Avt1LWUho6w4bgXK6lBV137Eh/gebzVCCJaoZB2fU79DmlF2/sMFTuprH0ULUl3ab1JuJKlN/yAZLcRMH51mhk9kVb/aSlf9dfeM3n/WXWX1pu8V643V4QgjpKoEGPpSy5SXVNr94fL7IkdjfzxcAPj6m7gUNGut0hHkc9GgUpr5PvXnSn2Z75Pk1B9qOjQT9Z7a/ashGrMIHpPjh/tcEAAA=" | base64 -d | gzip -d | sudo tee /etc/apt/sources.list
|
||||
sudo apt-get remove --purge man-db
|
||||
sudo apt-get update -y
|
||||
sudo apt-get install -y g++-aarch64-linux-gnu qemu-user-binfmt
|
||||
- name: build
|
||||
# - name: install-tools
|
||||
# run: |
|
||||
# sudo apt-get update -y
|
||||
# sudo apt-get install -y g++-aarch64-linux-gnu qemu-user-binfmt
|
||||
- name: configure
|
||||
run: |
|
||||
mkdir build && cd build
|
||||
cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/aarch64-linux-gnu.toolchain.cmake -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DTILE_BUILD_TESTS=ON -DTILE_BUILD_BENCHMARKS=ON ..
|
||||
- name: build
|
||||
run: |
|
||||
cd build
|
||||
cmake --build . -j $(nproc)
|
||||
- name: test
|
||||
run: |-
|
||||
cd build
|
||||
sudo ln -sf /usr/aarch64-linux-gnu/lib/ld-linux-aarch64.so.1 /lib/ld-linux-aarch64.so.1
|
||||
export LD_LIBRARY_PATH=/usr/aarch64-linux-gnu/lib
|
||||
ctest --output-on-failure -j$(nproc) --timeout 180
|
||||
# sudo ln -sf /usr/aarch64-linux-gnu/lib/ld-linux-aarch64.so.1 /lib/ld-linux-aarch64.so.1
|
||||
# export LD_LIBRARY_PATH=/usr/aarch64-linux-gnu/lib
|
||||
ctest --output-on-failure -j $(nproc)
|
||||
|
@ -36,23 +36,24 @@ jobs:
|
||||
build_type: ["Debug", "Release"]
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: install-tools
|
||||
run: |
|
||||
echo "H4sIANpBXGYCA72SX0vCUByG7/0UB7x2u+/bzG3lyP3h/Am608zU0rbAxEiopEQSZlDI3JK+zM7ZzlVfoQMjL4IgV3Z3OBx+z+95z1sEPBqm/j17nvLWaRyesNBLbuv8ckQbbhw9MNfjsyFQHAyIoylYB7x2Q8PJ+2uXTo7YqMNHtXRSp+48bT2md13qDtiinU0raHoZVDB20I4smwaENkQSJpYiYWRYexWiSLpGJNWSSZlYmMhg11aVKjAVwwJQRxgaKtY1QCzjQIdIByap4uxYKAIxvISgui1Avt1LWUho6w4bgXK6lBV137Eh/gebzVCCJaoZB2fU79DmlF2/sMFTuprH0ULUl3ab1JuJKlN/yAZLcRMH51mhk9kVb/aSlf9dfeM3n/WXWX1pu8V643V4QgjpKoEGPpSy5SXVNr94fL7IkdjfzxcAPj6m7gUNGut0hHkc9GgUpr5PvXnSn2Z75Pk1B9qOjQT9Z7a/ashGrMIHpPjh/tcEAAA=" | base64 -d | gzip -d | sudo tee /etc/apt/sources.list
|
||||
sudo apt-get remove --purge man-db
|
||||
sudo apt-get update -y
|
||||
sudo apt-get install -y g++-arm-linux-gnueabi qemu-user-binfmt
|
||||
- name: build
|
||||
# - name: install-tools
|
||||
# run: |
|
||||
# sudo apt-get update -y
|
||||
# sudo apt-get install -y g++-arm-linux-gnueabi qemu-user-binfmt
|
||||
- name: configure
|
||||
run: |
|
||||
mkdir build && cd build
|
||||
cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/arm-linux-gnueabi.toolchain.cmake -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DTILE_BUILD_TESTS=ON -DTILE_BUILD_TESTS=ON ..
|
||||
- name: build
|
||||
run: |
|
||||
cd build
|
||||
cmake --build . -j $(nproc)
|
||||
- name: test
|
||||
run: |
|
||||
cd build
|
||||
sudo ln -sf /usr/arm-linux-gnueabi/lib/ld-linux.so.3 /lib/ld-linux.so.3
|
||||
export LD_LIBRARY_PATH=/usr/arm-linux-gnueabi/lib
|
||||
ctest --output-on-failure -j$(nproc)
|
||||
#sudo ln -sf /usr/arm-linux-gnueabi/lib/ld-linux.so.3 /lib/ld-linux.so.3
|
||||
#export LD_LIBRARY_PATH=/usr/arm-linux-gnueabi/lib
|
||||
ctest --output-on-failure -j $(nproc)
|
||||
|
||||
linux-gcc-armhf:
|
||||
runs-on: ubuntu-20.04
|
||||
@ -67,14 +68,17 @@ jobs:
|
||||
run: |
|
||||
sudo apt-get update -y
|
||||
sudo apt-get install -y cmake make g++-arm-linux-gnueabihf qemu-user-binfmt
|
||||
- name: build
|
||||
- name: configure
|
||||
run: |
|
||||
mkdir build && cd build
|
||||
cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/arm-linux-gnueabihf.toolchain.cmake -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DTILE_BUILD_TESTS=ON -DTILE_BUILD_BENCHMARKS=ON ..
|
||||
- name: build
|
||||
run: |
|
||||
cd build
|
||||
cmake --build . -j $(nproc)
|
||||
- name: test
|
||||
run: |-
|
||||
cd build
|
||||
sudo ln -sf /usr/arm-linux-gnueabihf/lib/ld-linux-armhf.so.3 /lib/ld-linux-armhf.so.3
|
||||
export LD_LIBRARY_PATH=/usr/arm-linux-gnueabihf/lib/
|
||||
ctest --output-on-failure -j$(nproc) --timeout 180
|
||||
# sudo ln -sf /usr/arm-linux-gnueabihf/lib/ld-linux-armhf.so.3 /lib/ld-linux-armhf.so.3
|
||||
#export LD_LIBRARY_PATH=/usr/arm-linux-gnueabihf/lib/
|
||||
ctest --output-on-failure -j $(nproc)
|
||||
|
@ -35,21 +35,19 @@ jobs:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: install-tools
|
||||
run: |
|
||||
echo "H4sIANpBXGYCA72SX0vCUByG7/0UB7x2u+/bzG3lyP3h/Am608zU0rbAxEiopEQSZlDI3JK+zM7ZzlVfoQMjL4IgV3Z3OBx+z+95z1sEPBqm/j17nvLWaRyesNBLbuv8ckQbbhw9MNfjsyFQHAyIoylYB7x2Q8PJ+2uXTo7YqMNHtXRSp+48bT2md13qDtiinU0raHoZVDB20I4smwaENkQSJpYiYWRYexWiSLpGJNWSSZlYmMhg11aVKjAVwwJQRxgaKtY1QCzjQIdIByap4uxYKAIxvISgui1Avt1LWUho6w4bgXK6lBV137Eh/gebzVCCJaoZB2fU79DmlF2/sMFTuprH0ULUl3ab1JuJKlN/yAZLcRMH51mhk9kVb/aSlf9dfeM3n/WXWX1pu8V643V4QgjpKoEGPpSy5SXVNr94fL7IkdjfzxcAPj6m7gUNGut0hHkc9GgUpr5PvXnSn2Z75Pk1B9qOjQT9Z7a/ashGrMIHpPjh/tcEAAA=" | base64 -d | gzip -d | sudo tee /etc/apt/sources.list
|
||||
sudo apt-get remove --purge man-db
|
||||
sudo apt-get update -y
|
||||
sudo apt-get install -y g++-mipsel-linux-gnu qemu-user-binfmt
|
||||
# - name: install-tools
|
||||
# run: |
|
||||
# sudo apt-get update -y
|
||||
# sudo apt-get install -y g++-mipsel-linux-gnu qemu-user-binfmt
|
||||
- name: configure
|
||||
run: |
|
||||
mkdir build && cd build
|
||||
cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/mips-linux-gnu.toolchain.cmake -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DTILE_BUILD_TESTS=ON -DTILE_BUILD_BENCHMARKS=ON ..
|
||||
- name: build
|
||||
run: cmake --build build --target all -j `nproc`
|
||||
run: cmake --build build --target all -j $(nproc)
|
||||
- name: test
|
||||
run: |-
|
||||
cd build
|
||||
sudo ln -sf /usr/mipsel-linux-gnu/lib/ld.so.1 /lib/ld.so.1
|
||||
export LD_LIBRARY_PATH=/usr/mipsel-linux-gnu/lib/
|
||||
ctest --output-on-failure -j$(nproc) --timeout 180
|
||||
# sudo ln -sf /usr/mipsel-linux-gnu/lib/ld.so.1 /lib/ld.so.1
|
||||
# export LD_LIBRARY_PATH=/usr/mipsel-linux-gnu/lib/
|
||||
ctest --output-on-failure -j $(nproc)
|
||||
|
@ -36,21 +36,19 @@ jobs:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: install-tools
|
||||
run: |
|
||||
echo "H4sIANpBXGYCA72SX0vCUByG7/0UB7x2u+/bzG3lyP3h/Am608zU0rbAxEiopEQSZlDI3JK+zM7ZzlVfoQMjL4IgV3Z3OBx+z+95z1sEPBqm/j17nvLWaRyesNBLbuv8ckQbbhw9MNfjsyFQHAyIoylYB7x2Q8PJ+2uXTo7YqMNHtXRSp+48bT2md13qDtiinU0raHoZVDB20I4smwaENkQSJpYiYWRYexWiSLpGJNWSSZlYmMhg11aVKjAVwwJQRxgaKtY1QCzjQIdIByap4uxYKAIxvISgui1Avt1LWUho6w4bgXK6lBV137Eh/gebzVCCJaoZB2fU79DmlF2/sMFTuprH0ULUl3ab1JuJKlN/yAZLcRMH51mhk9kVb/aSlf9dfeM3n/WXWX1pu8V643V4QgjpKoEGPpSy5SXVNr94fL7IkdjfzxcAPj6m7gUNGut0hHkc9GgUpr5PvXnSn2Z75Pk1B9qOjQT9Z7a/ashGrMIHpPjh/tcEAAA=" | base64 -d | gzip -d | sudo tee /etc/apt/sources.list
|
||||
sudo apt-get remove --purge man-db
|
||||
sudo apt-get update -y
|
||||
sudo apt-get install -y g++-mips64el-linux-gnuabi64 qemu-user-binfmt
|
||||
# - name: install-tools
|
||||
# run: |
|
||||
# sudo apt-get update -y
|
||||
# sudo apt-get install -y g++-mips64el-linux-gnuabi64 qemu-user-binfmt
|
||||
- name: configure
|
||||
run: |
|
||||
mkdir build && cd build
|
||||
cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/mips64el-linux-gnuabi64.toolchain.cmake -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DTILE_BUILD_TESTS=ON -DTILE_BUILD_BENCHMARKS=ON ..
|
||||
- name: build
|
||||
run: cmake --build build --target all -j `nproc`
|
||||
run: cmake --build build --target all -j $(nproc)
|
||||
- name: test
|
||||
run: |-
|
||||
cd build
|
||||
sudo ln -sf /usr/mips64el-linux-gnuabi64/lib64/ld.so.1 /lib64/ld.so.1
|
||||
export LD_LIBRARY_PATH=/usr/mips64el-linux-gnuabi64/lib
|
||||
ctest --output-on-failure -j$(nproc) --timeout 180
|
||||
# sudo ln -sf /usr/mips64el-linux-gnuabi64/lib64/ld.so.1 /lib64/ld.so.1
|
||||
# export LD_LIBRARY_PATH=/usr/mips64el-linux-gnuabi64/lib
|
||||
ctest --output-on-failure -j $(nproc)
|
||||
|
@ -37,21 +37,19 @@ jobs:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: install-tools
|
||||
run: |
|
||||
echo "H4sIANpBXGYCA72SX0vCUByG7/0UB7x2u+/bzG3lyP3h/Am608zU0rbAxEiopEQSZlDI3JK+zM7ZzlVfoQMjL4IgV3Z3OBx+z+95z1sEPBqm/j17nvLWaRyesNBLbuv8ckQbbhw9MNfjsyFQHAyIoylYB7x2Q8PJ+2uXTo7YqMNHtXRSp+48bT2md13qDtiinU0raHoZVDB20I4smwaENkQSJpYiYWRYexWiSLpGJNWSSZlYmMhg11aVKjAVwwJQRxgaKtY1QCzjQIdIByap4uxYKAIxvISgui1Avt1LWUho6w4bgXK6lBV137Eh/gebzVCCJaoZB2fU79DmlF2/sMFTuprH0ULUl3ab1JuJKlN/yAZLcRMH51mhk9kVb/aSlf9dfeM3n/WXWX1pu8V643V4QgjpKoEGPpSy5SXVNr94fL7IkdjfzxcAPj6m7gUNGut0hHkc9GgUpr5PvXnSn2Z75Pk1B9qOjQT9Z7a/ashGrMIHpPjh/tcEAAA=" | base64 -d | gzip -d | sudo tee /etc/apt/sources.list
|
||||
sudo apt-get remove --purge man-db
|
||||
sudo apt-get update -y
|
||||
sudo apt-get install -y g++-riscv64-linux-gnu qemu-user-binfmt
|
||||
# - name: install-tools
|
||||
# run: |
|
||||
# sudo apt-get update -y
|
||||
# sudo apt-get install -y g++-riscv64-linux-gnu qemu-user-binfmt
|
||||
- name: configure
|
||||
run: |
|
||||
mkdir build && cd build
|
||||
cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/riscv64-linux-gnu.toolchain.cmake -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DTILE_BUILD_TESTS=ON -DTILE_BUILD_BENCHMARKS=ON ..
|
||||
- name: build
|
||||
run: cmake --build build --target all -j `nproc`
|
||||
run: cmake --build build --target all -j $(nproc)
|
||||
- name: test
|
||||
run: |-
|
||||
cd build
|
||||
sudo ln -sf /usr/riscv64-linux-gnu/lib/ld-linux-riscv64-lp64d.so.1 /lib/ld-linux-riscv64-lp64d.so.1
|
||||
export LD_LIBRARY_PATH=/usr/riscv64-linux-gnu/lib
|
||||
ctest --output-on-failure -j$(nproc)
|
||||
# sudo ln -sf /usr/riscv64-linux-gnu/lib/ld-linux-riscv64-lp64d.so.1 /lib/ld-linux-riscv64-lp64d.so.1
|
||||
# export LD_LIBRARY_PATH=/usr/riscv64-linux-gnu/lib
|
||||
ctest --output-on-failure -j $(nproc)
|
||||
|
@ -42,11 +42,11 @@ jobs:
|
||||
cmake -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DTILE_BUILD_BENCHMARKS=ON -DTILE_BUILD_TESTS=ON ..
|
||||
- name: build
|
||||
run: |
|
||||
cmake --build build -j `nproc`
|
||||
cmake --build build -j $(nproc)
|
||||
- name: test
|
||||
run: |
|
||||
cd build
|
||||
ctest --output-on-failure -j$(nproc)
|
||||
ctest --output-on-failure
|
||||
# - name: benchmark
|
||||
# run: |
|
||||
# ./build/sled_benchmark
|
||||
|
@ -43,11 +43,11 @@ jobs:
|
||||
cmake -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DTILE_BUILD_BENCHMARKS=ON -DTILE_BUILD_TESTS=ON ..
|
||||
- name: build
|
||||
run: |
|
||||
cmake --build build -j `nproc`
|
||||
cmake --build build -j $(nproc)
|
||||
- name: test
|
||||
run: |
|
||||
cd build
|
||||
ctest --output-on-failure -j$(nproc)
|
||||
# - name: benchmark
|
||||
# run: |
|
||||
# ./build/sled_benchmark
|
||||
ctest --output-on-failure -j $(nproc)
|
||||
- name: benchmark
|
||||
run: |
|
||||
./build/bin/tile_bm_all
|
||||
|
@ -45,11 +45,11 @@ jobs:
|
||||
cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/host.gcc-m32.toolchain.cmake -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DTILE_BUILD_BENCHMARKS=ON -DTILE_BUILD_TESTS=ON ..
|
||||
- name: build
|
||||
run: |
|
||||
cmake --build build -j `nproc`
|
||||
cmake --build build -j $(nproc)
|
||||
- name: test
|
||||
run: |
|
||||
cd build
|
||||
ctest --output-on-failure -j$(nproc)
|
||||
# - name: benchmark
|
||||
# run: |
|
||||
# ./build/sled_benchmark
|
||||
ctest --output-on-failure -j $(nproc)
|
||||
- name: benchmark
|
||||
run: |
|
||||
./build/bin/tile_bm_all
|
||||
|
@ -1,4 +1,4 @@
|
||||
cmake_minimum_required(VERSION 3.12)
|
||||
cmake_minimum_required(VERSION 3.5)
|
||||
|
||||
set(tile_VERSION_MAJOR 0)
|
||||
set(tile_VERSION_MINOR 1)
|
||||
@ -7,7 +7,7 @@ set(tile_VERSION_PATCH 0)
|
||||
project(
|
||||
tile
|
||||
VERSION ${tile_VERSION_MAJOR}.${tile_VERSION_MINOR}.${tile_VERSION_PATCH}
|
||||
LANGUAGES C CXX ASM)
|
||||
LANGUAGES C CXX)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
@ -21,32 +21,47 @@ option(TILE_WITH_OPENSSL "Build with openssl" OFF)
|
||||
option(TILE_BUILD_SHARED "Build shared library" ON)
|
||||
option(TILE_BUILD_STATIC "Build static library" ON)
|
||||
|
||||
# set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "time")
|
||||
# set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK "time")
|
||||
|
||||
if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
|
||||
set(TILE_BUILD_TESTS ON)
|
||||
set(TILE_BUILD_BENCHMARKS ON)
|
||||
endif()
|
||||
|
||||
if(NOT CMAKE_BUILD_TYPE)
|
||||
set(CMAKE_BUILD_TYPE "Debug")
|
||||
endif()
|
||||
|
||||
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
||||
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -gz")
|
||||
# set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -gz")
|
||||
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static") set(CMAKE_C_FLAGS
|
||||
# "${CMAKE_CXX_FLAGS} -static")
|
||||
# "${CMAKE_CXX_FLAGS} -static") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}
|
||||
# -fsanitize=address ") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address
|
||||
# ")
|
||||
|
||||
set(WHOLE_ARCHIVE_PREFIX "-Wl,-force_load")
|
||||
# set(NO_WHOLE_ARCHIVE_PREFIX "")
|
||||
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
|
||||
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -gz")
|
||||
# set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -gz")
|
||||
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static") set(CMAKE_C_FLAGS
|
||||
# "${CMAKE_CXX_FLAGS} -static")
|
||||
|
||||
set(WHOLE_ARCHIVE_PREFIX "-Wl,-force_load,")
|
||||
# set(NO_WHOLE_ARCHIVE_PREFIX "")
|
||||
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libgcc -static-libstdc++")
|
||||
set(CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS} -static-libgcc -static-libstdc++")
|
||||
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -gz")
|
||||
# set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -gz")
|
||||
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libgcc -static-libstdc++")
|
||||
# set(CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS} -static-libgcc -static-libstdc++")
|
||||
|
||||
set(STATIC_BINARY_FLAGS "-static-libgcc -static-libstdc++")
|
||||
set(WHOLE_ARCHIVE_PREFIX "-Wl,--whole-archive")
|
||||
set(WHOLE_ARCHIVE_SUFFIX "-Wl,--no-whole-archive")
|
||||
endif()
|
||||
|
||||
find_package(Threads REQUIRED)
|
||||
|
||||
# extern int getifaddrs(struct ifaddrs **ifap); extern void freeifaddrs(struct
|
||||
# ifaddrs *ifa);
|
||||
include(CheckSymbolExists)
|
||||
@ -55,22 +70,31 @@ include(cmake/BuildInfo.cmake)
|
||||
check_symbol_exists("getifaddrs" "ifaddrs.h" TILE_HAVE_GETIFADDRS)
|
||||
check_symbol_exists("freeifaddrs" "ifaddrs.h" TILE_HAVE_FREEIFADDRS)
|
||||
|
||||
find_package(Git REQUIRED)
|
||||
|
||||
get_git_commit_hash(GIT_COMMIT_HASH)
|
||||
get_git_commit_date(GIT_COMMIT_DATE)
|
||||
get_git_commit_subject(GIT_COMMIT_SUBJECT)
|
||||
|
||||
include_directories("third_party/json" "third_party/inja" "third_party/sigslot")
|
||||
|
||||
include_directories("${CMAKE_CURRENT_BINARY_DIR}/third_party/gflags/include")
|
||||
set(THIRD_PARTY_INCLUDE_DIRS
|
||||
# "third_party/json" "third_party/inja"
|
||||
"third_party/sigslot"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/third_party/gflags/include")
|
||||
include_directories(${THIRD_PARTY_INCLUDE_DIRS})
|
||||
add_subdirectory("third_party/zlib")
|
||||
add_subdirectory("third_party/jsoncpp")
|
||||
add_subdirectory("third_party/fmt")
|
||||
add_subdirectory("third_party/googletest")
|
||||
add_subdirectory("third_party/gflags")
|
||||
set(GFLAGS_USE_TARGET_NAMESPACE ON)
|
||||
set(gflags_DIR "${CMAKE_CURRENT_BINARY_DIR}/third_party/gflags")
|
||||
add_subdirectory("third_party/glog")
|
||||
add_subdirectory("third_party/context")
|
||||
|
||||
set(CURL_DISABLE_TESTS ON)
|
||||
set(CURL_CA_PATH
|
||||
"none"
|
||||
CACHE STRING "" FORCE)
|
||||
set(CURL_ENABLE_SSL
|
||||
OFF
|
||||
CACHE BOOL "" FORCE)
|
||||
@ -160,12 +184,7 @@ set(TILE_SRCS
|
||||
"tile/base/thread/rw_mutex.cc"
|
||||
"tile/base/thread/scoped_lock.cc"
|
||||
"tile/base/thread/spinlock.cc"
|
||||
"tile/fiber/fiber.cc"
|
||||
"tile/fiber/detail/os_fiber.cc"
|
||||
"tile/fiber/detail/mutex.cc"
|
||||
"tile/fiber/detail/ucontext.c"
|
||||
"tile/fiber/detail/posix_os_fiber.cc"
|
||||
"tile/fiber/scheduler.cc"
|
||||
"tile/fiber/detail/fiber.cc"
|
||||
"tile/io/detail/eintr_safe.cc"
|
||||
"tile/io/native/acceptor.cc"
|
||||
"tile/io/descriptor.cc"
|
||||
@ -187,24 +206,15 @@ set(TILE_SRCS
|
||||
# "tile/rpc/server.cc"
|
||||
)
|
||||
|
||||
list(
|
||||
APPEND
|
||||
ASM_SRCS
|
||||
"tile/fiber/detail/asm/ucontext_aarch64.S"
|
||||
"tile/fiber/detail/asm/ucontext_arm.S"
|
||||
"tile/fiber/detail/asm/ucontext_riscv64.S"
|
||||
"tile/fiber/detail/asm/ucontext_mips64.S"
|
||||
"tile/fiber/detail/asm/ucontext_mips32.S"
|
||||
"tile/fiber/detail/asm/ucontext_x64.S"
|
||||
"tile/fiber/detail/asm/ucontext_x86.S")
|
||||
set_source_files_properties(${ASM_SRCS} PROPERTIES LANGUAGE C)
|
||||
|
||||
if((NOT TILE_HAVE_GETIFADDRS) OR (NOT TILE_HAVE_FREEIFADDRS))
|
||||
list(APPEND TILE_SRCS "tile/base/net/detail/android/ifaddrs.c")
|
||||
endif()
|
||||
|
||||
add_library(tile OBJECT ${TILE_SRCS} ${ASM_SRCS})
|
||||
add_library(tile OBJECT ${TILE_SRCS})
|
||||
set_target_properties(tile PROPERTIES VERSION ${PROJECT_VERSION}
|
||||
target_precompile_headers(tile PUBLIC inja/inja.h)
|
||||
target_precompile_headers(tile PUBLIC inja/string_view.h)
|
||||
target_precompile_headers(tile PUBLIC json/nlohann/json.hpp)
|
||||
SOVERSION "${tile_VERSION_MAJRO}")
|
||||
# target_sources(tile PRIVATE ${TILE_SRCS})
|
||||
target_include_directories(
|
||||
@ -214,15 +224,17 @@ target_include_directories(
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/third_party/glog"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/third_party/glog/src"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
${THIRD_PARTY_INCLUDE_DIRS}
|
||||
RPIVATE
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/third_party/gflags/include")
|
||||
|
||||
target_link_libraries(
|
||||
tile
|
||||
PUBLIC # -Wl,--start-group
|
||||
zlib gflags::gflags glog::glog
|
||||
nova_context zlib gflags::gflags glog::glog
|
||||
jsoncpp_static
|
||||
# -Wl,--end-group
|
||||
libcurl fmt Threads::Threads)
|
||||
libcurl fmt)
|
||||
if((CMAKE_SYSTEM_PROCESSOR MATCHES "riscv64") OR (CMAKE_SYSTEM_PROCESSOR MATCHES
|
||||
"mips*"))
|
||||
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||
@ -267,10 +279,7 @@ if(TILE_BUILD_TESTS)
|
||||
target_sources(${PROJECT_NAME}_test_all PRIVATE ${test_file})
|
||||
endmacro()
|
||||
|
||||
# -> fiber
|
||||
tile_add_test(fiber_detail_posix_os_fiber_test
|
||||
"tile/fiber/detail/posix_os_fiber_test.cc")
|
||||
|
||||
tile_add_test(fiber_detail_scheduler_test "tile/fiber/detail/scheduler_test.cc")
|
||||
tile_add_test(base_internal_meta_test "tile/base/internal/meta_test.cc")
|
||||
# tile_add_test(net_internal_http_engine_test
|
||||
# "tile/net/internal/http_engine_test.cc")
|
||||
@ -358,6 +367,7 @@ if(TILE_BUILD_BENCHMARKS)
|
||||
target_sources(tile_bm_all PRIVATE ${benchmark_file})
|
||||
endmacro()
|
||||
|
||||
tile_add_bm(fiber_detail_fiber_benchmark "tile/fiber/detail/fiber_benchmark.cc")
|
||||
tile_add_bm(base_casting_benchmark "tile/base/casting_benchmark.cc")
|
||||
tile_add_bm(base_thread_mutex_benchmark "tile/base/thread/mutex_benchmark.cc")
|
||||
tile_add_bm(base_encoding_benchmark "tile/base/encoding_benchmark.cc")
|
||||
|
@ -1,5 +1,3 @@
|
||||
find_package(Git REQUIRED)
|
||||
|
||||
macro(get_git_commit_hash output)
|
||||
# full commit hash
|
||||
execute_process(
|
||||
|
@ -3,12 +3,11 @@ custom_data_source: {
|
||||
base_data_source: "compileunits"
|
||||
|
||||
rewrite: {
|
||||
pattern: "^(.*/tile/)(third_party/\\w+)"
|
||||
pattern: "^(.*/)(third_party/\\w+)"
|
||||
replacement: "\\2"
|
||||
}
|
||||
|
||||
rewrite: {
|
||||
pattern: "^(.*/tile/)((\\w+/)+)"
|
||||
pattern: "^(.*/)(3party/\\w+)"
|
||||
replacement: "\\2"
|
||||
}
|
||||
}
|
||||
|
8
docker-compose.yml
Normal file
8
docker-compose.yml
Normal file
@ -0,0 +1,8 @@
|
||||
services:
|
||||
build-env:
|
||||
image: ubuntu:16.04
|
||||
restart: always
|
||||
container_name: "env"
|
||||
command: ["/bin/bash", "-c", "sleep 36000"]
|
||||
volumes:
|
||||
- ./:/workspace
|
59
third_party/context/.gitignore
vendored
Normal file
59
third_party/context/.gitignore
vendored
Normal file
@ -0,0 +1,59 @@
|
||||
# .gitignore - The Nova Project
|
||||
|
||||
# Prerequisites
|
||||
*.d
|
||||
|
||||
# Object files
|
||||
*.o
|
||||
*.ko
|
||||
*.obj
|
||||
*.elf
|
||||
|
||||
# Linker output
|
||||
*.ilk
|
||||
*.map
|
||||
*.exp
|
||||
|
||||
# Precompiled Headers
|
||||
*.gch
|
||||
*.pch
|
||||
|
||||
# Libraries
|
||||
*.lib
|
||||
*.a
|
||||
*.la
|
||||
*.lo
|
||||
|
||||
# Shared objects (inc. Windows DLLs)
|
||||
*.dll
|
||||
*.so
|
||||
*.so.*
|
||||
*.dylib
|
||||
|
||||
# Executables
|
||||
*.exe
|
||||
*.out
|
||||
*.app
|
||||
*.i*86
|
||||
*.x86_64
|
||||
*.hex
|
||||
|
||||
# Debug files
|
||||
*.dSYM/
|
||||
*.su
|
||||
*.idb
|
||||
*.pdb
|
||||
|
||||
# CMake
|
||||
build/
|
||||
cmake-build/
|
||||
CMakeLists.txt.user
|
||||
CMakeCache.txt
|
||||
CMakeFiles
|
||||
CMakeScripts
|
||||
Makefile
|
||||
cmake_install.cmake
|
||||
install_manifest.txt
|
||||
compile_commands.json
|
||||
CTestTestfile.cmake
|
||||
_deps
|
278
third_party/context/CMakeLists.txt
vendored
Normal file
278
third_party/context/CMakeLists.txt
vendored
Normal file
@ -0,0 +1,278 @@
|
||||
# Nova-Context This file is part of the Nova-Context library source code.
|
||||
# Copyright (c) 2023 - The Nova Project
|
||||
#
|
||||
# Parts of this build configuration have been brazenly stolen from the
|
||||
# boost.context foundational library: https://github.com/boostorg/context
|
||||
# Copyright (c) 2009 - Oliver Kowalke, licensed under the Boost Software License
|
||||
# 1.0: http://www.boost.org/LICENSE_1_0.txt
|
||||
|
||||
cmake_minimum_required(VERSION 3.5...3.16)
|
||||
project(
|
||||
nova_context
|
||||
VERSION 0.1.0
|
||||
LANGUAGES C CXX ASM)
|
||||
|
||||
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
|
||||
|
||||
option(NOVA_CONTEXT_BUILD_STATIC "Build Nova-Context as static library" ON)
|
||||
# option(NOVA_CONTEXT_BUILD_TEST "Nova-Context build test app" OFF)
|
||||
option(NOVA_CONTEXT_PIC
|
||||
"Compile Nova-Context with position independent code (PIC)" ON)
|
||||
option(NOVA_CONTEXT_INSTALL "Generate installation target for Nova-Context" OFF)
|
||||
|
||||
# Binary format
|
||||
if(WIN32)
|
||||
set(_default_binfmt pe)
|
||||
elseif(APPLE)
|
||||
set(_default_binfmt mach-o)
|
||||
else()
|
||||
set(_default_binfmt elf)
|
||||
endif()
|
||||
|
||||
set(NOVA_CONTEXT_BINARY_FORMAT
|
||||
"${_default_binfmt}"
|
||||
CACHE STRING "Nova-Context binary format (elf, mach-o, pe, xcoff)")
|
||||
set_property(CACHE NOVA_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(NOVA_CONTEXT_ABI
|
||||
"${_default_abi}"
|
||||
CACHE STRING
|
||||
"Nova-Context ABI (aapcs, eabi, ms, n32, n64, o32, o64, sysv, x32)")
|
||||
set_property(
|
||||
CACHE NOVA_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
|
||||
ppc32
|
||||
ppc64
|
||||
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 MATCHES "^[Aa][Rr][Mm]" OR CMAKE_SYSTEM_PROCESSOR
|
||||
STREQUAL "aarch64"
|
||||
)# armv8
|
||||
set(_default_arch arm64)
|
||||
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^mips")
|
||||
set(_default_arch mips64)
|
||||
else()
|
||||
set(_default_arch x86_64)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(NOVA_CONTEXT_ARCHITECTURE
|
||||
"${_default_arch}"
|
||||
CACHE
|
||||
STRING
|
||||
"Nova-Context architecture (arm, arm64, loongarch64, mips32, mips64, ppc32, ppc64, riscv64, s390x, i386, x86_64, combined)"
|
||||
)
|
||||
set_property(CACHE NOVA_CONTEXT_ARCHITECTURE PROPERTY STRINGS ${_all_archs})
|
||||
|
||||
unset(_all_archs)
|
||||
unset(_bits)
|
||||
unset(_default_arch)
|
||||
|
||||
# Assembler type
|
||||
if(MSVC)
|
||||
if(NOVA_CONTEXT_ARCHITECTURE STREQUAL arm64 OR NOVA_CONTEXT_ARCHITECTURE
|
||||
STREQUAL arm)
|
||||
set(_default_asm armasm)
|
||||
else()
|
||||
set(_default_asm masm)
|
||||
endif()
|
||||
else()
|
||||
set(_default_asm gas)
|
||||
endif()
|
||||
|
||||
set(NOVA_CONTEXT_ASSEMBLER
|
||||
"${_default_asm}"
|
||||
CACHE STRING "Nova-Context assembler (masm, gas, armasm)")
|
||||
set_property(CACHE NOVA_CONTEXT_ASSEMBLER PROPERTY STRINGS masm gas armasm)
|
||||
unset(_default_asm)
|
||||
|
||||
# Assembler source suffix
|
||||
if(NOVA_CONTEXT_BINARY_FORMAT STREQUAL pe)
|
||||
set(_default_ext .asm)
|
||||
elseif(NOVA_CONTEXT_ASSEMBLER STREQUAL gas)
|
||||
set(_default_ext .S)
|
||||
else()
|
||||
set(_default_ext .asm)
|
||||
endif()
|
||||
|
||||
set(NOVA_CONTEXT_ASM_SUFFIX
|
||||
"${_default_ext}"
|
||||
CACHE STRING "Nova-Context assembler source suffix (.asm, .S)")
|
||||
set_property(CACHE NOVA_CONTEXT_ASM_SUFFIX PROPERTY STRINGS .asm .S)
|
||||
unset(_default_ext)
|
||||
|
||||
message(
|
||||
STATUS "Nova-Context: "
|
||||
"architecture ${NOVA_CONTEXT_ARCHITECTURE}, "
|
||||
"binary format ${NOVA_CONTEXT_BINARY_FORMAT}, "
|
||||
"ABI ${NOVA_CONTEXT_ABI}, "
|
||||
"assembler ${NOVA_CONTEXT_ASSEMBLER}, "
|
||||
"suffix ${NOVA_CONTEXT_ASM_SUFFIX}")
|
||||
|
||||
# Enable the right assembler
|
||||
if(NOVA_CONTEXT_ASSEMBLER STREQUAL gas)
|
||||
if(CMAKE_CXX_PLATFORM_ID MATCHES "Cygwin")
|
||||
enable_language(CXX ASM-ATT)
|
||||
else()
|
||||
enable_language(CXX ASM)
|
||||
endif()
|
||||
elseif(NOVA_CONTEXT_ASSEMBLER STREQUAL armasm)
|
||||
enable_language(CXX ASM_ARMASM)
|
||||
else()
|
||||
enable_language(CXX ASM_MASM)
|
||||
|
||||
# NOTE(julian): workaround for CMake MSVC ASM_MASM building bug #18889:
|
||||
# https://gitlab.kitware.com/cmake/cmake/-/issues/18889
|
||||
set(CMAKE_ASM_MASM_CREATE_STATIC_LIBRARY
|
||||
"<CMAKE_AR> ${CMAKE_CL_NOLOGO} <LINK_FLAGS> /out:<TARGET> <OBJECTS> ")
|
||||
endif()
|
||||
|
||||
# Choose .asm sources
|
||||
if(NOVA_CONTEXT_BINARY_FORMAT STREQUAL mach-o)
|
||||
set(NOVA_CONTEXT_BINARY_FORMAT macho)
|
||||
endif()
|
||||
|
||||
set(_asm_suffix
|
||||
"${NOVA_CONTEXT_ARCHITECTURE}_${NOVA_CONTEXT_ABI}_${NOVA_CONTEXT_BINARY_FORMAT}_${NOVA_CONTEXT_ASSEMBLER}${NOVA_CONTEXT_ASM_SUFFIX}"
|
||||
)
|
||||
|
||||
set(ASM_SRC
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/asm/make_${_asm_suffix}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/asm/jump_${_asm_suffix}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/asm/ontop_${_asm_suffix})
|
||||
|
||||
unset(_asm_suffix)
|
||||
|
||||
set_source_files_properties(${ASM_SRC} PROPERTIES LINKER_LANGUAGE C)
|
||||
# POWERPC_32/SYSV Special case: https://github.com/boostorg/context/issues/120
|
||||
if((NOVA_CONTEXT_ARCHITECTURE STREQUAL ppc32) AND (NOVA_CONTEXT_ABI STREQUAL
|
||||
sysv))
|
||||
string(APPEND ASM_SRC " ${CMAKE_CURRENT_SOURCE_DIR}/asm/tail_ppc32_sysv.cpp")
|
||||
endif()
|
||||
|
||||
# Assembly source file properties
|
||||
if(NOVA_CONTEXT_ASSEMBLER STREQUAL masm AND NOVA_CONTEXT_ARCHITECTURE STREQUAL
|
||||
i386)
|
||||
set_source_files_properties(${ASM_SRC} PROPERTIES COMPILE_FLAGS "/safeseh")
|
||||
endif()
|
||||
|
||||
if(CMAKE_CXX_COMPILER_ID STREQUAL GNU)
|
||||
# set_source_files_properties(${ASM_SRC} PROPERTIES COMPILE_OPTIONS
|
||||
# "-x assembler-with-cpp")
|
||||
endif()
|
||||
|
||||
# Boost specific definitions
|
||||
if(MSVC)
|
||||
add_definitions(-D_ITERATOR_DEBUG_LEVEL=0)
|
||||
add_definitions(-D_HAS_EXCEPTIONS=0)
|
||||
endif()
|
||||
|
||||
# Find project sources
|
||||
file(GLOB_RECURSE INC ${CMAKE_CURRENT_SOURCE_DIR}/include/*.h)
|
||||
file(GLOB_RECURSE SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/*.c)
|
||||
|
||||
# Create target
|
||||
if(NOVA_CONTEXT_BUILD_STATIC)
|
||||
add_library(nova_context STATIC ${INC} ${SRC} ${ASM_SRC})
|
||||
target_compile_definitions(nova_context PUBLIC NOVA_CONTEXT_STATIC
|
||||
BOOST_CONTEXT_EXPORT=)
|
||||
else()
|
||||
add_library(nova_context SHARED ${INC} ${SRC} ${ASM_SRC})
|
||||
target_compile_definitions(nova_context PUBLIC BOOST_CONTEXT_EXPORT=EXPORT)
|
||||
endif()
|
||||
|
||||
# Link threading system dependencies if(WIN32)
|
||||
# target_link_libraries(nova_context wsock32 ws2_32) endif() if
|
||||
# (CMAKE_SYSTEM_NAME STREQUAL "Linux") target_link_libraries(nova_context
|
||||
# pthread) endif()
|
||||
|
||||
# Position-independent code
|
||||
if(NOVA_CONTEXT_PIC)
|
||||
set_target_properties(nova_context PROPERTIES POSITION_INDEPENDENT_CODE ON)
|
||||
endif()
|
||||
|
||||
# Include directories
|
||||
target_include_directories(
|
||||
nova_context PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||
$<INSTALL_INTERFACE:include>)
|
||||
|
||||
if(NOVA_CONTEXT_BUILD_TEST)
|
||||
# TODO(julian): Build test project
|
||||
endif()
|
||||
|
||||
# Install library
|
||||
if(NOVA_CONTEXT_INSTALL)
|
||||
include(GNUInstallDirs)
|
||||
|
||||
install(
|
||||
DIRECTORY ${PROJECT_SOURCE_DIR}/include/
|
||||
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
|
||||
FILES_MATCHING
|
||||
PATTERN *.h)
|
||||
|
||||
install(
|
||||
TARGETS nova_context
|
||||
EXPORT nova-context-export
|
||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||
|
||||
install(
|
||||
EXPORT nova-context-export
|
||||
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/nova-context
|
||||
FILE nova-context-config.cmake)
|
||||
endif()
|
21
third_party/context/LICENSE
vendored
Normal file
21
third_party/context/LICENSE
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2023 Julian Schönbächler
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
13
third_party/context/cmake/CMakeASM_ARMASMInformation.cmake
vendored
Normal file
13
third_party/context/cmake/CMakeASM_ARMASMInformation.cmake
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
# For the armasm assembler, armasm or armasm64
|
||||
set(ASM_DIALECT "_ARMASM")
|
||||
set(CMAKE_ASM${ASM_DIALECT}_SOURCE_FILE_EXTENSIONS asm)
|
||||
set(CMAKE_ASM${ASM_DIALECT}_COMPILE_OBJECT "<CMAKE_ASM${ASM_DIALECT}_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT> <SOURCE>")
|
||||
|
||||
# The ASM_ARMASM compiler id for this compiler is "MSVC", so fill out the runtime library table.
|
||||
set(CMAKE_ASM${ASM_DIALECT}_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreaded "")
|
||||
set(CMAKE_ASM${ASM_DIALECT}_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDLL "")
|
||||
set(CMAKE_ASM${ASM_DIALECT}_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDebug "")
|
||||
set(CMAKE_ASM${ASM_DIALECT}_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDebugDLL "")
|
||||
|
||||
include(CMakeASMInformation)
|
||||
set(ASM_DIALECT)
|
12
third_party/context/cmake/CMakeDetermineASM_ARMASMCompiler.cmake
vendored
Normal file
12
third_party/context/cmake/CMakeDetermineASM_ARMASMCompiler.cmake
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
# Find the armasm assembler, armasm or armasm64
|
||||
set(ASM_DIALECT "_ARMASM")
|
||||
|
||||
# If we are using the 64bit cl compiler, assume we also want the 64bit assembler
|
||||
if (";${CMAKE_VS_PLATFORM_NAME};${MSVC_C_ARCHITECTURE_ID};${MSVC_CXX_ARCHITECTURE_ID};" MATCHES ";ARM64;")
|
||||
set(CMAKE_ASM${ASM_DIALECT}_COMPILER_INIT armasm64)
|
||||
else ()
|
||||
set(CMAKE_ASM${ASM_DIALECT}_COMPILER_INIT armasm)
|
||||
endif ()
|
||||
|
||||
include(CMakeDetermineASMCompiler)
|
||||
set(ASM_DIALECT)
|
13
third_party/context/cmake/CMakeTestASM_ARMASMCompiler.cmake
vendored
Normal file
13
third_party/context/cmake/CMakeTestASM_ARMASMCompiler.cmake
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
# file Copyright.txt or https://cmake.org/licensing for details.
|
||||
|
||||
|
||||
# This file is used by EnableLanguage in cmGlobalGenerator to
|
||||
# determine that the selected ASM_MASM "compiler" (should be masm or masm64)
|
||||
# works. For assembler this can only check whether the compiler has been found,
|
||||
# because otherwise there would have to be a separate assembler source file
|
||||
# for each assembler on every architecture.
|
||||
|
||||
set(ASM_DIALECT "_ARMASM")
|
||||
include(CMakeTestASMCompiler)
|
||||
set(ASM_DIALECT)
|
26
third_party/context/include/nova/context/asan.h
vendored
Normal file
26
third_party/context/include/nova/context/asan.h
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Nova-Context
|
||||
* This file is part of the Nova-Context library source code.
|
||||
* Copyright (c) 2023 - The Nova Project
|
||||
*/
|
||||
|
||||
#ifndef NOVA_CONTEXT_ASAN_H
|
||||
#define NOVA_CONTEXT_ASAN_H
|
||||
|
||||
#if defined(__SANITIZE_ADDRESS__) || __has_feature(address_sanitizer)
|
||||
#define NOVA_CONTEXT_ASAN
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void __sanitizer_start_switch_fiber(void **fake_stack_save, const void *bottom, size_t size);
|
||||
void __sanitizer_finish_switch_fiber(void *fake_stack_save, const void **bottom_old, size_t *size_old);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#endif //NOVA_CONTEXT_ASAN_H
|
34
third_party/context/include/nova/context/config.h
vendored
Normal file
34
third_party/context/include/nova/context/config.h
vendored
Normal file
@ -0,0 +1,34 @@
|
||||
/*
|
||||
* Nova-Context
|
||||
* This file is part of the Nova-Context library source code.
|
||||
* Copyright (c) 2023 - The Nova Project
|
||||
*/
|
||||
|
||||
#ifndef NOVA_CONTEXT_CONFIG_H
|
||||
#define NOVA_CONTEXT_CONFIG_H
|
||||
|
||||
#ifndef NOVA_CONTEXT_STATIC
|
||||
#ifdef nova_context_EXPORTS
|
||||
#if defined(_MSC_VER) || defined(__MINGW32__)
|
||||
#define NOVA_CONTEXT_API __declspec(dllexport)
|
||||
#else
|
||||
#define NOVA_CONTEXT_API __attribute__((__visibility__("default")))
|
||||
#endif
|
||||
#elif defined(_MSC_VER)
|
||||
#define NOVA_CONTEXT_API __declspec(dllimport)
|
||||
#endif
|
||||
#else
|
||||
#define NOVA_CONTEXT_API
|
||||
#endif
|
||||
|
||||
#if (defined(i386) || defined(__i386__) || defined(__i386) || \
|
||||
defined(__i486__) || defined(__i586__) || defined(__i686__) || \
|
||||
defined(__X86__) || defined(_X86_) || defined(__THW_INTEL__) || \
|
||||
defined(__I86__) || defined(__INTEL__) || defined(__IA32__) || \
|
||||
defined(_M_IX86) || defined(_I86_)) && defined(BOOST_WINDOWS)
|
||||
#define NOVA_CONTEXT_CALLDECL __cdecl
|
||||
#else
|
||||
#define NOVA_CONTEXT_CALLDECL
|
||||
#endif
|
||||
|
||||
#endif //NOVA_CONTEXT_CONFIG_H
|
42
third_party/context/include/nova/context/fcontext.h
vendored
Normal file
42
third_party/context/include/nova/context/fcontext.h
vendored
Normal file
@ -0,0 +1,42 @@
|
||||
/*
|
||||
* Nova-Context
|
||||
* This file is part of the Nova-Context library source code.
|
||||
* Copyright (c) 2023 - The Nova Project
|
||||
*/
|
||||
|
||||
#ifndef NOVA_CONTEXT_FCONTEXT_H
|
||||
#define NOVA_CONTEXT_FCONTEXT_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stddef.h>
|
||||
#include "config.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef void *fcontext_t;
|
||||
|
||||
typedef struct fcontext_transfer
|
||||
{
|
||||
fcontext_t fctx;
|
||||
void *data;
|
||||
} fcontext_transfer_t;
|
||||
|
||||
NOVA_CONTEXT_API
|
||||
fcontext_t NOVA_CONTEXT_CALLDECL
|
||||
make_fcontext(void *sp, size_t size, void (*fn)(fcontext_transfer_t));
|
||||
|
||||
NOVA_CONTEXT_API
|
||||
fcontext_transfer_t NOVA_CONTEXT_CALLDECL
|
||||
jump_fcontext(fcontext_t const to, void *vp);
|
||||
|
||||
NOVA_CONTEXT_API
|
||||
fcontext_transfer_t NOVA_CONTEXT_CALLDECL
|
||||
ontop_fcontext(fcontext_t const to, void *vp, fcontext_transfer_t (*fn)(fcontext_transfer_t));
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif //NOVA_CONTEXT_FCONTEXT_H
|
28
third_party/context/include/nova/context/tsan.h
vendored
Normal file
28
third_party/context/include/nova/context/tsan.h
vendored
Normal file
@ -0,0 +1,28 @@
|
||||
/*
|
||||
* Nova-Context
|
||||
* This file is part of the Nova-Context library source code.
|
||||
* Copyright (c) 2023 - The Nova Project
|
||||
*/
|
||||
|
||||
#ifndef NOVA_CONTEXT_TSAN_H
|
||||
#define NOVA_CONTEXT_TSAN_H
|
||||
|
||||
#if defined(__SANITIZER_THREAD__) || __has_feature(thread_sanitizer)
|
||||
#define NOVA_CONTEXT_TSAN
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void *__tsan_get_current_fiber(void);
|
||||
void *__tsan_create_fiber(unsigned flags);
|
||||
void __tsan_destroy_fiber(void *fiber);
|
||||
void __tsan_switch_to_fiber(void *fiber, unsigned flags);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#endif //NOVA_CONTEXT_TSAN_H
|
114
third_party/context/src/asm/jump_arm64_aapcs_elf_gas.S
vendored
Normal file
114
third_party/context/src/asm/jump_arm64_aapcs_elf_gas.S
vendored
Normal file
@ -0,0 +1,114 @@
|
||||
/*
|
||||
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
|
||||
.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
|
109
third_party/context/src/asm/jump_arm64_aapcs_macho_gas.S
vendored
Normal file
109
third_party/context/src/asm/jump_arm64_aapcs_macho_gas.S
vendored
Normal file
@ -0,0 +1,109 @@
|
||||
/*
|
||||
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 | | | *
|
||||
* ------------------------------------------------- *
|
||||
* *
|
||||
*******************************************************/
|
||||
|
||||
.text
|
||||
.globl _jump_fcontext
|
||||
.balign 16
|
||||
_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 fp, lr, [sp, #0x90]
|
||||
|
||||
; save LR as PC
|
||||
str lr, [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 fp, lr, [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
|
133
third_party/context/src/asm/jump_arm64_aapcs_pe_armasm.asm
vendored
Normal file
133
third_party/context/src/asm/jump_arm64_aapcs_pe_armasm.asm
vendored
Normal file
@ -0,0 +1,133 @@
|
||||
; 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 | 44 | 45 | 46 | 47 | *
|
||||
;* ------------------------------------------------- *
|
||||
;* | 0xa0| 0xa4| 0xa8| 0xac| 0xb0| 0xb4| 0xb8| 0xbc| *
|
||||
;* ------------------------------------------------- *
|
||||
;* | fiber data| base | limit | dealloc | *
|
||||
;* ------------------------------------------------- *
|
||||
;* ------------------------------------------------- *
|
||||
;* | 48 | 49 | 50 | 51 | | | *
|
||||
;* ------------------------------------------------- *
|
||||
;* | 0xc0| 0xc4| 0xc8| 0xcc| | | *
|
||||
;* ------------------------------------------------- *
|
||||
;* | PC | align | | | *
|
||||
;* ------------------------------------------------- *
|
||||
;* *
|
||||
;*******************************************************
|
||||
|
||||
AREA |.text|, CODE, READONLY, ALIGN=4, CODEALIGN
|
||||
EXPORT jump_fcontext
|
||||
|
||||
jump_fcontext proc
|
||||
; prepare stack for GP + FPU
|
||||
sub sp, sp, #0xd0
|
||||
|
||||
; 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, #0xc0]
|
||||
|
||||
; save current stack base and limit
|
||||
ldp x5, x6, [x18, #0x08] ; TeStackBase and TeStackLimit at ksarm64.h
|
||||
stp x5, x6, [sp, #0xa0]
|
||||
; save current fiber data and deallocation stack
|
||||
ldr x5, [x18, #0x1478] ; TeDeallocationStack at ksarm64.h
|
||||
ldr x6, [x18, #0x20] ; TeFiberData at ksarm64.h
|
||||
stp x5, x6, [sp, #0xb0]
|
||||
|
||||
; store RSP (pointing to context-data) in X0
|
||||
mov x4, sp
|
||||
|
||||
; restore RSP (pointing to context-data) from X1
|
||||
mov sp, x0
|
||||
|
||||
; restore stack base and limit
|
||||
ldp x5, x6, [sp, #0xa0]
|
||||
stp x5, x6, [x18, #0x08] ; TeStackBase and TeStackLimit at ksarm64.h
|
||||
; restore fiber data and deallocation stack
|
||||
ldp x5, x6, [sp, #0xb0]
|
||||
str x5, [x18, #0x1478] ; TeDeallocationStack at ksarm64.h
|
||||
str x6, [x18, #0x20] ; TeFiberData at ksarm64.h
|
||||
|
||||
; 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, #0xc0]
|
||||
|
||||
; restore stack from GP + FPU
|
||||
add sp, sp, #0xd0
|
||||
|
||||
ret x4
|
||||
ENDP
|
||||
END
|
88
third_party/context/src/asm/jump_arm_aapcs_elf_gas.S
vendored
Normal file
88
third_party/context/src/asm/jump_arm_aapcs_elf_gas.S
vendored
Normal file
@ -0,0 +1,88 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
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| *
|
||||
* ------------------------------------------------- *
|
||||
* | s16 | s17 | s18 | s19 | s20 | s21 | s22 | s23 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
|
||||
* ------------------------------------------------- *
|
||||
* | s24 | s25 | s26 | s27 | s28 | s29 | s30 | s31 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0x40| 0x44| 0x48| 0x4c| 0x50| 0x54| 0x58| 0x5c| *
|
||||
* ------------------------------------------------- *
|
||||
* |hiddn| v1 | v2 | v3 | v4 | v5 | v6 | v7 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0x60| 0x64| 0x68| 0x6c| 0x70| 0x74| 0x78| 0x7c| *
|
||||
* ------------------------------------------------- *
|
||||
* | v8 | lr | pc | FCTX| DATA| | *
|
||||
* ------------------------------------------------- *
|
||||
* *
|
||||
*******************************************************/
|
||||
|
||||
.file "jump_arm_aapcs_elf_gas.S"
|
||||
.text
|
||||
.globl jump_fcontext
|
||||
.align 2
|
||||
.type jump_fcontext,%function
|
||||
.syntax unified
|
||||
jump_fcontext:
|
||||
@ save LR as PC
|
||||
push {lr}
|
||||
@ save hidden,V1-V8,LR
|
||||
push {a1,v1-v8,lr}
|
||||
|
||||
@ prepare stack for FPU
|
||||
sub sp, sp, #64
|
||||
#if (defined(__VFP_FP__) && !defined(__SOFTFP__))
|
||||
@ save S16-S31
|
||||
vstmia sp, {d8-d15}
|
||||
#endif
|
||||
|
||||
@ store RSP (pointing to context-data) in A1
|
||||
mov a1, sp
|
||||
|
||||
@ restore RSP (pointing to context-data) from A2
|
||||
mov sp, a2
|
||||
|
||||
#if (defined(__VFP_FP__) && !defined(__SOFTFP__))
|
||||
@ restore S16-S31
|
||||
vldmia sp, {d8-d15}
|
||||
#endif
|
||||
@ prepare stack for FPU
|
||||
add sp, sp, #64
|
||||
|
||||
@ restore hidden,V1-V8,LR
|
||||
pop {a4,v1-v8,lr}
|
||||
|
||||
@ return transfer_t from jump
|
||||
str a1, [a4, #0]
|
||||
str a3, [a4, #4]
|
||||
@ pass transfer_t as first arg in context function
|
||||
@ A1 == FCTX, A2 == DATA
|
||||
mov a2, a3
|
||||
|
||||
@ restore PC
|
||||
pop {pc}
|
||||
.size jump_fcontext,.-jump_fcontext
|
||||
|
||||
@ Mark that we don't need executable stack.
|
||||
.section .note.GNU-stack,"",%progbits
|
95
third_party/context/src/asm/jump_arm_aapcs_macho_gas.S
vendored
Normal file
95
third_party/context/src/asm/jump_arm_aapcs_macho_gas.S
vendored
Normal file
@ -0,0 +1,95 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
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| *
|
||||
* ------------------------------------------------- *
|
||||
* | s16 | s17 | s18 | s19 | s20 | s21 | s22 | s23 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
|
||||
* ------------------------------------------------- *
|
||||
* | s24 | s25 | s26 | s27 | s28 | s29 | s30 | s31 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| *
|
||||
* ------------------------------------------------- *
|
||||
* | sjlj|hiddn| v1 | v2 | v3 | v4 | v5 | v6 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
|
||||
* ------------------------------------------------- *
|
||||
* | v7 | v8 | lr | pc | FCTX| DATA| | *
|
||||
* ------------------------------------------------- *
|
||||
* *
|
||||
*******************************************************/
|
||||
|
||||
.text
|
||||
.globl _jump_fcontext
|
||||
.align 2
|
||||
_jump_fcontext:
|
||||
@ save LR as PC
|
||||
push {lr}
|
||||
@ save hidden,V1-V8,LR
|
||||
push {a1,v1-v8,lr}
|
||||
|
||||
@ locate TLS to save/restore SjLj handler
|
||||
mrc p15, 0, v2, c13, c0, #3
|
||||
bic v2, v2, #3
|
||||
|
||||
@ load TLS[__PTK_LIBC_DYLD_Unwind_SjLj_Key]
|
||||
ldr v1, [v2, #72]
|
||||
@ save SjLj handler
|
||||
push {v1}
|
||||
|
||||
@ prepare stack for FPU
|
||||
sub sp, sp, #64
|
||||
#if (defined(__VFP_FP__) && !defined(__SOFTFP__))
|
||||
@ save S16-S31
|
||||
vstmia sp, {d8-d15}
|
||||
#endif
|
||||
|
||||
@ store RSP (pointing to context-data) in A1
|
||||
mov a1, sp
|
||||
|
||||
@ restore RSP (pointing to context-data) from A2
|
||||
mov sp, a2
|
||||
|
||||
#if (defined(__VFP_FP__) && !defined(__SOFTFP__))
|
||||
@ restore S16-S31
|
||||
vldmia sp, {d8-d15}
|
||||
#endif
|
||||
@ prepare stack for FPU
|
||||
add sp, sp, #64
|
||||
|
||||
@ r#estore SjLj handler
|
||||
pop {v1}
|
||||
@ store SjLj handler in TLS
|
||||
str v1, [v2, #72]
|
||||
|
||||
@ restore hidden,V1-V8,LR
|
||||
pop {a4,v1-v8,lr}
|
||||
|
||||
@ return transfer_t from jump
|
||||
str a1, [a4, #0]
|
||||
str a3, [a4, #4]
|
||||
@ pass transfer_t as first arg in context function
|
||||
@ A1 == FCTX, A2 == DATA
|
||||
mov a2, a3
|
||||
|
||||
@ restore PC
|
||||
pop {pc}
|
81
third_party/context/src/asm/jump_arm_aapcs_pe_armasm.asm
vendored
Normal file
81
third_party/context/src/asm/jump_arm_aapcs_pe_armasm.asm
vendored
Normal file
@ -0,0 +1,81 @@
|
||||
;/*
|
||||
; Copyright Oliver Kowalke 2009.
|
||||
; 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| *
|
||||
; * ------------------------------------------------- *
|
||||
; * |deall|limit| base|hiddn| v1 | v2 | v3 | v4 | *
|
||||
; * ------------------------------------------------- *
|
||||
; * ------------------------------------------------- *
|
||||
; * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
; * ------------------------------------------------- *
|
||||
; * | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
|
||||
; * ------------------------------------------------- *
|
||||
; * | v5 | v6 | v7 | v8 | lr | pc | FCTX| DATA| *
|
||||
; * ------------------------------------------------- *
|
||||
; * *
|
||||
; *******************************************************
|
||||
|
||||
AREA |.text|, CODE
|
||||
ALIGN 4
|
||||
EXPORT jump_fcontext
|
||||
|
||||
jump_fcontext PROC
|
||||
; save LR as PC
|
||||
push {lr}
|
||||
; save hidden,V1-V8,LR
|
||||
push {a1,v1-v8,lr}
|
||||
|
||||
; load TIB to save/restore thread size and limit.
|
||||
; we do not need preserve CPU flag and can use it's arg register
|
||||
mrc p15, #0, v1, c13, c0, #2
|
||||
|
||||
; save current stack base
|
||||
ldr a5, [v1, #0x04]
|
||||
push {a5}
|
||||
; save current stack limit
|
||||
ldr a5, [v1, #0x08]
|
||||
push {a5}
|
||||
; save current deallocation stack
|
||||
ldr a5, [v1, #0xe0c]
|
||||
push {a5}
|
||||
|
||||
; store RSP (pointing to context-data) in A1
|
||||
mov a1, sp
|
||||
|
||||
; restore RSP (pointing to context-data) from A2
|
||||
mov sp, a2
|
||||
|
||||
; restore deallocation stack
|
||||
pop {a5}
|
||||
str a5, [v1, #0xe0c]
|
||||
; restore stack limit
|
||||
pop {a5}
|
||||
str a5, [v1, #0x08]
|
||||
; restore stack base
|
||||
pop {a5}
|
||||
str a5, [v1, #0x04]
|
||||
|
||||
; restore hidden,V1-V8,LR
|
||||
pop {a4,v1-v8,lr}
|
||||
|
||||
; return transfer_t from jump
|
||||
str a1, [a4, #0]
|
||||
str a3, [a4, #4]
|
||||
; pass transfer_t as first arg in context function
|
||||
; A1 == FCTX, A2 == DATA
|
||||
mov a2, a3
|
||||
|
||||
; restore PC
|
||||
pop {pc}
|
||||
|
||||
ENDP
|
||||
END
|
24
third_party/context/src/asm/jump_combined_sysv_macho_gas.S
vendored
Normal file
24
third_party/context/src/asm/jump_combined_sysv_macho_gas.S
vendored
Normal file
@ -0,0 +1,24 @@
|
||||
/*
|
||||
Copyright Sergue E. Leontiev 2013.
|
||||
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)
|
||||
*/
|
||||
|
||||
// Stub file for universal binary
|
||||
|
||||
#if defined(__i386__)
|
||||
#include "jump_i386_sysv_macho_gas.S"
|
||||
#elif defined(__x86_64__)
|
||||
#include "jump_x86_64_sysv_macho_gas.S"
|
||||
#elif defined(__ppc__)
|
||||
#include "jump_ppc32_sysv_macho_gas.S"
|
||||
#elif defined(__ppc64__)
|
||||
#include "jump_ppc64_sysv_macho_gas.S"
|
||||
#elif defined(__arm__)
|
||||
#include "jump_arm_aapcs_macho_gas.S"
|
||||
#elif defined(__arm64__)
|
||||
#include "jump_arm64_aapcs_macho_gas.S"
|
||||
#else
|
||||
#error "No arch's"
|
||||
#endif
|
123
third_party/context/src/asm/jump_i386_ms_pe_clang_gas.S
vendored
Normal file
123
third_party/context/src/asm/jump_i386_ms_pe_clang_gas.S
vendored
Normal file
@ -0,0 +1,123 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
Copyright Thomas Sailer 2013.
|
||||
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 | *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
* | 0h | 04h | 08h | 0ch | 010h | 014h | 018h | 01ch | *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
* | fc_mxcsr|fc_x87_cw| fc_strg |fc_deallo| limit | base | fc_seh | EDI | *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
* | 020h | 024h | 028h | 02ch | 030h | 034h | 038h | 03ch | *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
* | ESI | EBX | EBP | EIP | to | data | EH NXT |SEH HNDLR| *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
**************************************************************************************/
|
||||
|
||||
.file "jump_i386_ms_pe_clang_gas.S"
|
||||
.text
|
||||
.p2align 4,,15
|
||||
|
||||
/* mark as using no unregistered SEH handlers */
|
||||
.globl @feat.00
|
||||
.def @feat.00; .scl 3; .type 0; .endef
|
||||
.set @feat.00, 1
|
||||
|
||||
.globl _jump_fcontext
|
||||
.def _jump_fcontext; .scl 2; .type 32; .endef
|
||||
_jump_fcontext:
|
||||
/* prepare stack */
|
||||
leal -0x2c(%esp), %esp
|
||||
|
||||
#if !defined(BOOST_USE_TSX)
|
||||
/* save MMX control- and status-word */
|
||||
stmxcsr (%esp)
|
||||
/* save x87 control-word */
|
||||
fnstcw 0x4(%esp)
|
||||
#endif
|
||||
|
||||
/* load NT_TIB */
|
||||
movl %fs:(0x18), %edx
|
||||
/* load fiber local storage */
|
||||
movl 0x10(%edx), %eax
|
||||
movl %eax, 0x8(%esp)
|
||||
/* load current dealloction stack */
|
||||
movl 0xe0c(%edx), %eax
|
||||
movl %eax, 0xc(%esp)
|
||||
/* load current stack limit */
|
||||
movl 0x8(%edx), %eax
|
||||
movl %eax, 0x10(%esp)
|
||||
/* load current stack base */
|
||||
movl 0x4(%edx), %eax
|
||||
movl %eax, 0x14(%esp)
|
||||
/* load current SEH exception list */
|
||||
movl (%edx), %eax
|
||||
movl %eax, 0x18(%esp)
|
||||
|
||||
movl %edi, 0x1c(%esp) /* save EDI */
|
||||
movl %esi, 0x20(%esp) /* save ESI */
|
||||
movl %ebx, 0x24(%esp) /* save EBX */
|
||||
movl %ebp, 0x28(%esp) /* save EBP */
|
||||
|
||||
/* store ESP (pointing to context-data) in EAX */
|
||||
movl %esp, %eax
|
||||
|
||||
/* firstarg of jump_fcontext() == fcontext to jump to */
|
||||
movl 0x30(%esp), %ecx
|
||||
|
||||
/* restore ESP (pointing to context-data) from ECX */
|
||||
movl %ecx, %esp
|
||||
|
||||
#if !defined(BOOST_USE_TSX)
|
||||
/* restore MMX control- and status-word */
|
||||
ldmxcsr (%esp)
|
||||
/* restore x87 control-word */
|
||||
fldcw 0x4(%esp)
|
||||
#endif
|
||||
|
||||
/* restore NT_TIB into EDX */
|
||||
movl %fs:(0x18), %edx
|
||||
/* restore fiber local storage */
|
||||
movl 0x8(%esp), %ecx
|
||||
movl %ecx, 0x10(%edx)
|
||||
/* restore current deallocation stack */
|
||||
movl 0xc(%esp), %ecx
|
||||
movl %ecx, 0xe0c(%edx)
|
||||
/* restore current stack limit */
|
||||
movl 0x10(%esp), %ecx
|
||||
movl %ecx, 0x8(%edx)
|
||||
/* restore current stack base */
|
||||
movl 0x14(%esp), %ecx
|
||||
movl %ecx, 0x4(%edx)
|
||||
/* restore current SEH exception list */
|
||||
movl 0x18(%esp), %ecx
|
||||
movl %ecx, (%edx)
|
||||
|
||||
movl 0x2c(%esp), %ecx /* restore EIP */
|
||||
|
||||
movl 0x1c(%esp), %edi /* restore EDI */
|
||||
movl 0x20(%esp), %esi /* restore ESI */
|
||||
movl 0x24(%esp), %ebx /* restore EBX */
|
||||
movl 0x28(%esp), %ebp /* restore EBP */
|
||||
|
||||
/* prepare stack */
|
||||
leal 0x30(%esp), %esp
|
||||
|
||||
/* return transfer_t */
|
||||
/* FCTX == EAX, DATA == EDX */
|
||||
movl 0x34(%eax), %edx
|
||||
|
||||
/* jump to context */
|
||||
jmp *%ecx
|
||||
|
||||
.section .drectve
|
||||
.ascii " -export:\"_jump_fcontext\""
|
123
third_party/context/src/asm/jump_i386_ms_pe_gas.asm
vendored
Normal file
123
third_party/context/src/asm/jump_i386_ms_pe_gas.asm
vendored
Normal file
@ -0,0 +1,123 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
Copyright Thomas Sailer 2013.
|
||||
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 | *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
* | 0h | 04h | 08h | 0ch | 010h | 014h | 018h | 01ch | *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
* | fc_mxcsr|fc_x87_cw| fc_strg |fc_deallo| limit | base | fc_seh | EDI | *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
* | 020h | 024h | 028h | 02ch | 030h | 034h | 038h | 03ch | *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
* | ESI | EBX | EBP | EIP | to | data | EH NXT |SEH HNDLR| *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
**************************************************************************************/
|
||||
|
||||
.file "jump_i386_ms_pe_gas.asm"
|
||||
.text
|
||||
.p2align 4,,15
|
||||
|
||||
/* mark as using no unregistered SEH handlers */
|
||||
.globl @feat.00
|
||||
.def @feat.00; .scl 3; .type 0; .endef
|
||||
.set @feat.00, 1
|
||||
|
||||
.globl _jump_fcontext
|
||||
.def _jump_fcontext; .scl 2; .type 32; .endef
|
||||
_jump_fcontext:
|
||||
/* prepare stack */
|
||||
leal -0x2c(%esp), %esp
|
||||
|
||||
#if !defined(BOOST_USE_TSX)
|
||||
/* save MMX control- and status-word */
|
||||
stmxcsr (%esp)
|
||||
/* save x87 control-word */
|
||||
fnstcw 0x4(%esp)
|
||||
#endif
|
||||
|
||||
/* load NT_TIB */
|
||||
movl %fs:(0x18), %edx
|
||||
/* load fiber local storage */
|
||||
movl 0x10(%edx), %eax
|
||||
movl %eax, 0x8(%esp)
|
||||
/* load current dealloction stack */
|
||||
movl 0xe0c(%edx), %eax
|
||||
movl %eax, 0xc(%esp)
|
||||
/* load current stack limit */
|
||||
movl 0x8(%edx), %eax
|
||||
movl %eax, 0x10(%esp)
|
||||
/* load current stack base */
|
||||
movl 0x4(%edx), %eax
|
||||
movl %eax, 0x14(%esp)
|
||||
/* load current SEH exception list */
|
||||
movl (%edx), %eax
|
||||
movl %eax, 0x18(%esp)
|
||||
|
||||
movl %edi, 0x1c(%esp) /* save EDI */
|
||||
movl %esi, 0x20(%esp) /* save ESI */
|
||||
movl %ebx, 0x24(%esp) /* save EBX */
|
||||
movl %ebp, 0x28(%esp) /* save EBP */
|
||||
|
||||
/* store ESP (pointing to context-data) in EAX */
|
||||
movl %esp, %eax
|
||||
|
||||
/* firstarg of jump_fcontext() == fcontext to jump to */
|
||||
movl 0x30(%esp), %ecx
|
||||
|
||||
/* restore ESP (pointing to context-data) from ECX */
|
||||
movl %ecx, %esp
|
||||
|
||||
#if !defined(BOOST_USE_TSX)
|
||||
/* restore MMX control- and status-word */
|
||||
ldmxcsr (%esp)
|
||||
/* restore x87 control-word */
|
||||
fldcw 0x4(%esp)
|
||||
#endif
|
||||
|
||||
/* restore NT_TIB into EDX */
|
||||
movl %fs:(0x18), %edx
|
||||
/* restore fiber local storage */
|
||||
movl 0x8(%esp), %ecx
|
||||
movl %ecx, 0x10(%edx)
|
||||
/* restore current deallocation stack */
|
||||
movl 0xc(%esp), %ecx
|
||||
movl %ecx, 0xe0c(%edx)
|
||||
/* restore current stack limit */
|
||||
movl 0x10(%esp), %ecx
|
||||
movl %ecx, 0x8(%edx)
|
||||
/* restore current stack base */
|
||||
movl 0x14(%esp), %ecx
|
||||
movl %ecx, 0x4(%edx)
|
||||
/* restore current SEH exception list */
|
||||
movl 0x18(%esp), %ecx
|
||||
movl %ecx, (%edx)
|
||||
|
||||
movl 0x2c(%esp), %ecx /* restore EIP */
|
||||
|
||||
movl 0x1c(%esp), %edi /* restore EDI */
|
||||
movl 0x20(%esp), %esi /* restore ESI */
|
||||
movl 0x24(%esp), %ebx /* restore EBX */
|
||||
movl 0x28(%esp), %ebp /* restore EBP */
|
||||
|
||||
/* prepare stack */
|
||||
leal 0x30(%esp), %esp
|
||||
|
||||
/* return transfer_t */
|
||||
/* FCTX == EAX, DATA == EDX */
|
||||
movl 0x34(%eax), %edx
|
||||
|
||||
/* jump to context */
|
||||
jmp *%ecx
|
||||
|
||||
.section .drectve
|
||||
.ascii " -export:\"jump_fcontext\""
|
116
third_party/context/src/asm/jump_i386_ms_pe_masm.asm
vendored
Normal file
116
third_party/context/src/asm/jump_i386_ms_pe_masm.asm
vendored
Normal file
@ -0,0 +1,116 @@
|
||||
|
||||
; Copyright Oliver Kowalke 2009.
|
||||
; 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 |
|
||||
; ---------------------------------------------------------------------------------
|
||||
; | 0h | 04h | 08h | 0ch | 010h | 014h | 018h | 01ch |
|
||||
; ---------------------------------------------------------------------------------
|
||||
; | fc_mxcsr|fc_x87_cw| fc_strg |fc_deallo| limit | base | fc_seh | EDI |
|
||||
; ---------------------------------------------------------------------------------
|
||||
; ---------------------------------------------------------------------------------
|
||||
; | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|
||||
; ---------------------------------------------------------------------------------
|
||||
; | 020h | 024h | 028h | 02ch | 030h | 034h | 038h | 03ch |
|
||||
; ---------------------------------------------------------------------------------
|
||||
; | ESI | EBX | EBP | EIP | to | data | EH NXT |SEH HNDLR|
|
||||
; ---------------------------------------------------------------------------------
|
||||
|
||||
.386
|
||||
.XMM
|
||||
.model flat, c
|
||||
.code
|
||||
|
||||
jump_fcontext PROC BOOST_CONTEXT_EXPORT
|
||||
; prepare stack
|
||||
lea esp, [esp-02ch]
|
||||
|
||||
IFNDEF BOOST_USE_TSX
|
||||
; save MMX control- and status-word
|
||||
stmxcsr [esp]
|
||||
; save x87 control-word
|
||||
fnstcw [esp+04h]
|
||||
ENDIF
|
||||
|
||||
assume fs:nothing
|
||||
; load NT_TIB into ECX
|
||||
mov edx, fs:[018h]
|
||||
assume fs:error
|
||||
; load fiber local storage
|
||||
mov eax, [edx+010h]
|
||||
mov [esp+08h], eax
|
||||
; load current deallocation stack
|
||||
mov eax, [edx+0e0ch]
|
||||
mov [esp+0ch], eax
|
||||
; load current stack limit
|
||||
mov eax, [edx+08h]
|
||||
mov [esp+010h], eax
|
||||
; load current stack base
|
||||
mov eax, [edx+04h]
|
||||
mov [esp+014h], eax
|
||||
; load current SEH exception list
|
||||
mov eax, [edx]
|
||||
mov [esp+018h], eax
|
||||
|
||||
mov [esp+01ch], edi ; save EDI
|
||||
mov [esp+020h], esi ; save ESI
|
||||
mov [esp+024h], ebx ; save EBX
|
||||
mov [esp+028h], ebp ; save EBP
|
||||
|
||||
; store ESP (pointing to context-data) in EAX
|
||||
mov eax, esp
|
||||
|
||||
; firstarg of jump_fcontext() == fcontext to jump to
|
||||
mov ecx, [esp+030h]
|
||||
|
||||
; restore ESP (pointing to context-data) from ECX
|
||||
mov esp, ecx
|
||||
|
||||
IFNDEF BOOST_USE_TSX
|
||||
; restore MMX control- and status-word
|
||||
ldmxcsr [esp]
|
||||
; restore x87 control-word
|
||||
fldcw [esp+04h]
|
||||
ENDIF
|
||||
|
||||
assume fs:nothing
|
||||
; load NT_TIB into EDX
|
||||
mov edx, fs:[018h]
|
||||
assume fs:error
|
||||
; restore fiber local storage
|
||||
mov ecx, [esp+08h]
|
||||
mov [edx+010h], ecx
|
||||
; restore current deallocation stack
|
||||
mov ecx, [esp+0ch]
|
||||
mov [edx+0e0ch], ecx
|
||||
; restore current stack limit
|
||||
mov ecx, [esp+010h]
|
||||
mov [edx+08h], ecx
|
||||
; restore current stack base
|
||||
mov ecx, [esp+014h]
|
||||
mov [edx+04h], ecx
|
||||
; restore current SEH exception list
|
||||
mov ecx, [esp+018h]
|
||||
mov [edx], ecx
|
||||
|
||||
mov ecx, [esp+02ch] ; restore EIP
|
||||
|
||||
mov edi, [esp+01ch] ; restore EDI
|
||||
mov esi, [esp+020h] ; restore ESI
|
||||
mov ebx, [esp+024h] ; restore EBX
|
||||
mov ebp, [esp+028h] ; restore EBP
|
||||
|
||||
; prepare stack
|
||||
lea esp, [esp+030h]
|
||||
|
||||
; return transfer_t
|
||||
; FCTX == EAX, DATA == EDX
|
||||
mov edx, [eax+034h]
|
||||
|
||||
; jump to context
|
||||
jmp ecx
|
||||
jump_fcontext ENDP
|
||||
END
|
93
third_party/context/src/asm/jump_i386_sysv_elf_gas.S
vendored
Normal file
93
third_party/context/src/asm/jump_i386_sysv_elf_gas.S
vendored
Normal file
@ -0,0 +1,93 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
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 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | fc_mxcsr|fc_x87_cw| guard | EDI | ESI | EBX | EBP | EIP | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0x20 | 0x24 | 0x28 | | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | hidden | to | data | | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* *
|
||||
****************************************************************************************/
|
||||
|
||||
.file "jump_i386_sysv_elf_gas.S"
|
||||
.text
|
||||
.globl jump_fcontext
|
||||
.align 2
|
||||
.type jump_fcontext,@function
|
||||
jump_fcontext:
|
||||
leal -0x1c(%esp), %esp /* prepare stack */
|
||||
|
||||
#if !defined(BOOST_USE_TSX)
|
||||
stmxcsr (%esp) /* save MMX control- and status-word */
|
||||
fnstcw 0x4(%esp) /* save x87 control-word */
|
||||
#endif
|
||||
|
||||
#if defined(BOOST_CONTEXT_TLS_STACK_PROTECTOR)
|
||||
movl %gs:0x14, %ecx /* read stack guard from TLS record */
|
||||
movl %ecx, 0x8(%esp) /* save stack guard */
|
||||
#endif
|
||||
|
||||
movl %edi, 0xc(%esp) /* save EDI */
|
||||
movl %esi, 0x10(%esp) /* save ESI */
|
||||
movl %ebx, 0x14(%esp) /* save EBX */
|
||||
movl %ebp, 0x18(%esp) /* save EBP */
|
||||
|
||||
/* store ESP (pointing to context-data) in ECX */
|
||||
movl %esp, %ecx
|
||||
|
||||
/* first arg of jump_fcontext() == fcontext to jump to */
|
||||
movl 0x24(%esp), %eax
|
||||
|
||||
/* second arg of jump_fcontext() == data to be transferred */
|
||||
movl 0x28(%esp), %edx
|
||||
|
||||
/* restore ESP (pointing to context-data) from EAX */
|
||||
movl %eax, %esp
|
||||
|
||||
/* address of returned transport_t */
|
||||
movl 0x20(%esp), %eax
|
||||
/* return parent fcontext_t */
|
||||
movl %ecx, (%eax)
|
||||
/* return data */
|
||||
movl %edx, 0x4(%eax)
|
||||
|
||||
movl 0x1c(%esp), %ecx /* restore EIP */
|
||||
|
||||
#if !defined(BOOST_USE_TSX)
|
||||
ldmxcsr (%esp) /* restore MMX control- and status-word */
|
||||
fldcw 0x4(%esp) /* restore x87 control-word */
|
||||
#endif
|
||||
|
||||
#if defined(BOOST_CONTEXT_TLS_STACK_PROTECTOR)
|
||||
movl 0x8(%esp), %edx /* load stack guard */
|
||||
movl %edx, %gs:0x14 /* restore stack guard to TLS record */
|
||||
#endif
|
||||
|
||||
movl 0xc(%esp), %edi /* restore EDI */
|
||||
movl 0x10(%esp), %esi /* restore ESI */
|
||||
movl 0x14(%esp), %ebx /* restore EBX */
|
||||
movl 0x18(%esp), %ebp /* restore EBP */
|
||||
|
||||
leal 0x24(%esp), %esp /* prepare stack */
|
||||
|
||||
/* jump to context */
|
||||
jmp *%ecx
|
||||
.size jump_fcontext,.-jump_fcontext
|
||||
|
||||
/* Mark that we don't need executable stack. */
|
||||
.section .note.GNU-stack,"",%progbits
|
74
third_party/context/src/asm/jump_i386_sysv_macho_gas.S
vendored
Normal file
74
third_party/context/src/asm/jump_i386_sysv_macho_gas.S
vendored
Normal file
@ -0,0 +1,74 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
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 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | fc_mxcsr|fc_x87_cw| EDI | ESI | EBX | EBP | EIP | to | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0x20 | | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | data | | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* *
|
||||
****************************************************************************************/
|
||||
|
||||
.text
|
||||
.globl _jump_fcontext
|
||||
.align 2
|
||||
_jump_fcontext:
|
||||
leal -0x18(%esp), %esp /* prepare stack */
|
||||
|
||||
#if !defined(BOOST_USE_TSX)
|
||||
stmxcsr (%esp) /* save MMX control- and status-word */
|
||||
fnstcw 0x4(%esp) /* save x87 control-word */
|
||||
#endif
|
||||
|
||||
movl %edi, 0x8(%esp) /* save EDI */
|
||||
movl %esi, 0xc(%esp) /* save ESI */
|
||||
movl %ebx, 0x10(%esp) /* save EBX */
|
||||
movl %ebp, 0x14(%esp) /* save EBP */
|
||||
|
||||
/* store ESP (pointing to context-data) in ECX */
|
||||
movl %esp, %ecx
|
||||
|
||||
/* first arg of jump_fcontext() == fcontext to jump to */
|
||||
movl 0x1c(%esp), %eax
|
||||
|
||||
/* second arg of jump_fcontext() == data to be transferred */
|
||||
movl 0x20(%esp), %edx
|
||||
|
||||
/* restore ESP (pointing to context-data) from EAX */
|
||||
movl %eax, %esp
|
||||
|
||||
/* return parent fcontext_t */
|
||||
movl %ecx, %eax
|
||||
/* returned data is stored in EDX */
|
||||
|
||||
movl 0x18(%esp), %ecx /* restore EIP */
|
||||
|
||||
#if !defined(BOOST_USE_TSX)
|
||||
ldmxcsr (%esp) /* restore MMX control- and status-word */
|
||||
fldcw 0x4(%esp) /* restore x87 control-word */
|
||||
#endif
|
||||
|
||||
movl 0x8(%esp), %edi /* restore EDI */
|
||||
movl 0xc(%esp), %esi /* restore ESI */
|
||||
movl 0x10(%esp), %ebx /* restore EBX */
|
||||
movl 0x14(%esp), %ebp /* restore EBP */
|
||||
|
||||
leal 0x1c(%esp), %esp /* prepare stack */
|
||||
|
||||
/* jump to context */
|
||||
jmp *%ecx
|
16
third_party/context/src/asm/jump_i386_x86_64_sysv_macho_gas.S
vendored
Normal file
16
third_party/context/src/asm/jump_i386_x86_64_sysv_macho_gas.S
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
/*
|
||||
Copyright Sergue E. Leontiev 2013.
|
||||
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)
|
||||
*/
|
||||
|
||||
// Stub file for universal binary
|
||||
|
||||
#if defined(__i386__)
|
||||
#include "jump_i386_sysv_macho_gas.S"
|
||||
#elif defined(__x86_64__)
|
||||
#include "jump_x86_64_sysv_macho_gas.S"
|
||||
#else
|
||||
#error "No arch's"
|
||||
#endif
|
121
third_party/context/src/asm/jump_loongarch64_sysv_elf_gas.S
vendored
Normal file
121
third_party/context/src/asm/jump_loongarch64_sysv_elf_gas.S
vendored
Normal file
@ -0,0 +1,121 @@
|
||||
/*******************************************************
|
||||
* *
|
||||
* ------------------------------------------------- *
|
||||
* | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0 | 8 | 16 | 24 | *
|
||||
* ------------------------------------------------- *
|
||||
* | FS0 | FS1 | FS2 | FS3 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 40 | 48 | 56 | *
|
||||
* ------------------------------------------------- *
|
||||
* | FS4 | FS5 | FS6 | FS7 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 64 | 72 | 80 | 88 | *
|
||||
* ------------------------------------------------- *
|
||||
* | S0 | S1 | S2 | S3 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
|
||||
* ------------------------------------------------- *
|
||||
* | S4 | S5 | S6 | S7 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | *
|
||||
* ------------------------------------------------- *
|
||||
* | S8 | FP | RA | PC | *
|
||||
* ------------------------------------------------- *
|
||||
* *
|
||||
* *****************************************************/
|
||||
|
||||
.file "jump_loongarch64_sysv_elf_gas.S"
|
||||
.text
|
||||
.globl jump_fcontext
|
||||
.align 2
|
||||
.type jump_fcontext,@function
|
||||
jump_fcontext:
|
||||
# reserve space on stack
|
||||
addi.d $sp, $sp, -160
|
||||
|
||||
# save fs0 - fs7
|
||||
fst.d $fs0, $sp, 0
|
||||
fst.d $fs1, $sp, 8
|
||||
fst.d $fs2, $sp, 16
|
||||
fst.d $fs3, $sp, 24
|
||||
fst.d $fs4, $sp, 32
|
||||
fst.d $fs5, $sp, 40
|
||||
fst.d $fs6, $sp, 48
|
||||
fst.d $fs7, $sp, 56
|
||||
|
||||
# save s0 - s8, fp, ra
|
||||
st.d $s0, $sp, 64
|
||||
st.d $s1, $sp, 72
|
||||
st.d $s2, $sp, 80
|
||||
st.d $s3, $sp, 88
|
||||
st.d $s4, $sp, 96
|
||||
st.d $s5, $sp, 104
|
||||
st.d $s6, $sp, 112
|
||||
st.d $s7, $sp, 120
|
||||
st.d $s8, $sp, 128
|
||||
st.d $fp, $sp, 136
|
||||
st.d $ra, $sp, 144
|
||||
|
||||
# save RA as PC
|
||||
st.d $ra, $sp, 152
|
||||
|
||||
# store SP (pointing to context-data) in A2
|
||||
move $a2, $sp
|
||||
|
||||
# restore SP (pointing to context-data) from A0
|
||||
move $sp, $a0
|
||||
|
||||
# load fs0 - fs7
|
||||
fld.d $fs0, $sp, 0
|
||||
fld.d $fs1, $sp, 8
|
||||
fld.d $fs2, $sp, 16
|
||||
fld.d $fs3, $sp, 24
|
||||
fld.d $fs4, $sp, 32
|
||||
fld.d $fs5, $sp, 40
|
||||
fld.d $fs6, $sp, 48
|
||||
fld.d $fs7, $sp, 56
|
||||
|
||||
#load s0 - s7
|
||||
ld.d $s0, $sp, 64
|
||||
ld.d $s1, $sp, 72
|
||||
ld.d $s2, $sp, 80
|
||||
ld.d $s3, $sp, 88
|
||||
ld.d $s4, $sp, 96
|
||||
ld.d $s5, $sp, 104
|
||||
ld.d $s6, $sp, 112
|
||||
ld.d $s7, $sp, 120
|
||||
ld.d $s8, $sp, 128
|
||||
ld.d $fp, $sp, 136
|
||||
ld.d $ra, $sp, 144
|
||||
|
||||
# return transfer_t from jump
|
||||
# pass transfer_t as first arg in context function
|
||||
# a0 == FCTX, a1 == DATA
|
||||
move $a0, $a2
|
||||
|
||||
# load PC
|
||||
ld.d $a2, $sp, 152
|
||||
|
||||
# restore stack
|
||||
addi.d $sp, $sp, 160
|
||||
|
||||
# jump to context
|
||||
jr $a2
|
||||
.size jump_fcontext, .-jump_fcontext
|
||||
|
||||
/* Mark that we don't need executable stack. */
|
||||
.section .note.GNU-stack,"",%progbits
|
119
third_party/context/src/asm/jump_mips32_o32_elf_gas.S
vendored
Normal file
119
third_party/context/src/asm/jump_mips32_o32_elf_gas.S
vendored
Normal file
@ -0,0 +1,119 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
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 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F20 | F22 | F24 | F26 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F28 | F30 | S0 | S1 | S2 | S3 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | *
|
||||
* ------------------------------------------------- *
|
||||
* | S4 | S5 | S6 | S7 | FP |hiddn| RA | PC | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
|
||||
* ------------------------------------------------- *
|
||||
* | ABI ARGS | GP | FCTX| DATA| | *
|
||||
* ------------------------------------------------- *
|
||||
* *
|
||||
* *****************************************************/
|
||||
|
||||
.file "jump_mips32_o32_elf_gas.S"
|
||||
.text
|
||||
.globl jump_fcontext
|
||||
.align 2
|
||||
.type jump_fcontext,@function
|
||||
.ent jump_fcontext
|
||||
jump_fcontext:
|
||||
# reserve space on stack
|
||||
addiu $sp, $sp, -96
|
||||
|
||||
sw $s0, 48($sp) # save S0
|
||||
sw $s1, 52($sp) # save S1
|
||||
sw $s2, 56($sp) # save S2
|
||||
sw $s3, 60($sp) # save S3
|
||||
sw $s4, 64($sp) # save S4
|
||||
sw $s5, 68($sp) # save S5
|
||||
sw $s6, 72($sp) # save S6
|
||||
sw $s7, 76($sp) # save S7
|
||||
sw $fp, 80($sp) # save FP
|
||||
sw $a0, 84($sp) # save hidden, address of returned transfer_t
|
||||
sw $ra, 88($sp) # save RA
|
||||
sw $ra, 92($sp) # save RA as PC
|
||||
|
||||
#if defined(__mips_hard_float)
|
||||
s.d $f20, ($sp) # save F20
|
||||
s.d $f22, 8($sp) # save F22
|
||||
s.d $f24, 16($sp) # save F24
|
||||
s.d $f26, 24($sp) # save F26
|
||||
s.d $f28, 32($sp) # save F28
|
||||
s.d $f30, 40($sp) # save F30
|
||||
#endif
|
||||
|
||||
# store SP (pointing to context-data) in A0
|
||||
move $a0, $sp
|
||||
|
||||
# restore SP (pointing to context-data) from A1
|
||||
move $sp, $a1
|
||||
|
||||
#if defined(__mips_hard_float)
|
||||
l.d $f20, ($sp) # restore F20
|
||||
l.d $f22, 8($sp) # restore F22
|
||||
l.d $f24, 16($sp) # restore F24
|
||||
l.d $f26, 24($sp) # restore F26
|
||||
l.d $f28, 32($sp) # restore F28
|
||||
l.d $f30, 40($sp) # restore F30
|
||||
#endif
|
||||
|
||||
lw $s0, 48($sp) # restore S0
|
||||
lw $s1, 52($sp) # restore S1
|
||||
lw $s2, 56($sp) # restore S2
|
||||
lw $s3, 60($sp) # restore S3
|
||||
lw $s4, 64($sp) # restore S4
|
||||
lw $s5, 68($sp) # restore S5
|
||||
lw $s6, 72($sp) # restore S6
|
||||
lw $s7, 76($sp) # restore S7
|
||||
lw $fp, 80($sp) # restore FP
|
||||
lw $v0, 84($sp) # restore hidden, address of returned transfer_t
|
||||
lw $ra, 88($sp) # restore RA
|
||||
|
||||
# load PC
|
||||
lw $t9, 92($sp)
|
||||
|
||||
# adjust stack
|
||||
addiu $sp, $sp, 96
|
||||
|
||||
# return transfer_t from jump
|
||||
sw $a0, ($v0) # fctx of transfer_t
|
||||
sw $a2, 4($v0) # data of transfer_t
|
||||
# pass transfer_t as first arg in context function
|
||||
# A0 == fctx, A1 == data
|
||||
move $a1, $a2
|
||||
|
||||
# jump to context
|
||||
jr $t9
|
||||
.end jump_fcontext
|
||||
.size jump_fcontext, .-jump_fcontext
|
||||
|
||||
/* Mark that we don't need executable stack. */
|
||||
.section .note.GNU-stack,"",%progbits
|
124
third_party/context/src/asm/jump_mips64_n64_elf_gas.S
vendored
Normal file
124
third_party/context/src/asm/jump_mips64_n64_elf_gas.S
vendored
Normal file
@ -0,0 +1,124 @@
|
||||
/*
|
||||
Copyright Jiaxun Yang 2018.
|
||||
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 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0 | 8 | 16 | 24 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F24 | F25 | F26 | F27 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 40 | 48 | 56 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F28 | F29 | F30 | F31 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 64 | 72 | 80 | 88 | *
|
||||
* ------------------------------------------------- *
|
||||
* | S0 | S1 | S2 | S3 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
|
||||
* ------------------------------------------------- *
|
||||
* | S4 | S5 | S6 | S7 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | *
|
||||
* ------------------------------------------------- *
|
||||
* | FP | GP | RA | PC | *
|
||||
* ------------------------------------------------- *
|
||||
* *
|
||||
* *****************************************************/
|
||||
|
||||
.file "jump_mips64_n64_elf_gas.S"
|
||||
.text
|
||||
.globl jump_fcontext
|
||||
.align 3
|
||||
.type jump_fcontext,@function
|
||||
.ent jump_fcontext
|
||||
jump_fcontext:
|
||||
# reserve space on stack
|
||||
daddiu $sp, $sp, -160
|
||||
|
||||
sd $s0, 64($sp) # save S0
|
||||
sd $s1, 72($sp) # save S1
|
||||
sd $s2, 80($sp) # save S2
|
||||
sd $s3, 88($sp) # save S3
|
||||
sd $s4, 96($sp) # save S4
|
||||
sd $s5, 104($sp) # save S5
|
||||
sd $s6, 112($sp) # save S6
|
||||
sd $s7, 120($sp) # save S7
|
||||
sd $fp, 128($sp) # save FP
|
||||
sd $ra, 144($sp) # save RA
|
||||
sd $ra, 152($sp) # save RA as PC
|
||||
|
||||
#if defined(__mips_hard_float)
|
||||
s.d $f24, 0($sp) # save F24
|
||||
s.d $f25, 8($sp) # save F25
|
||||
s.d $f26, 16($sp) # save F26
|
||||
s.d $f27, 24($sp) # save F27
|
||||
s.d $f28, 32($sp) # save F28
|
||||
s.d $f29, 40($sp) # save F29
|
||||
s.d $f30, 48($sp) # save F30
|
||||
s.d $f31, 56($sp) # save F31
|
||||
#endif
|
||||
|
||||
# store SP (pointing to old context-data) in v0 as return
|
||||
move $v0, $sp
|
||||
|
||||
# get SP (pointing to new context-data) from a0 param
|
||||
move $sp, $a0
|
||||
|
||||
#if defined(__mips_hard_float)
|
||||
l.d $f24, 0($sp) # restore F24
|
||||
l.d $f25, 8($sp) # restore F25
|
||||
l.d $f26, 16($sp) # restore F26
|
||||
l.d $f27, 24($sp) # restore F27
|
||||
l.d $f28, 32($sp) # restore F28
|
||||
l.d $f29, 40($sp) # restore F29
|
||||
l.d $f30, 48($sp) # restore F30
|
||||
l.d $f31, 56($sp) # restore F31
|
||||
#endif
|
||||
|
||||
ld $s0, 64($sp) # restore S0
|
||||
ld $s1, 72($sp) # restore S1
|
||||
ld $s2, 80($sp) # restore S2
|
||||
ld $s3, 88($sp) # restore S3
|
||||
ld $s4, 96($sp) # restore S4
|
||||
ld $s5, 104($sp) # restore S5
|
||||
ld $s6, 112($sp) # restore S6
|
||||
ld $s7, 120($sp) # restore S7
|
||||
ld $fp, 128($sp) # restore FP
|
||||
ld $ra, 144($sp) # restore RAa
|
||||
|
||||
# load PC
|
||||
ld $t9, 152($sp)
|
||||
|
||||
# adjust stack
|
||||
daddiu $sp, $sp, 160
|
||||
|
||||
move $a0, $v0 # move old sp from v0 to a0 as param
|
||||
move $v1, $a1 # move *data from a1 to v1 as return
|
||||
|
||||
# jump to context
|
||||
jr $t9
|
||||
.end jump_fcontext
|
||||
.size jump_fcontext, .-jump_fcontext
|
||||
|
||||
/* Mark that we don't need executable stack. */
|
||||
.section .note.GNU-stack,"",%progbits
|
16
third_party/context/src/asm/jump_ppc32_ppc64_sysv_macho_gas.S
vendored
Normal file
16
third_party/context/src/asm/jump_ppc32_ppc64_sysv_macho_gas.S
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
/*
|
||||
Copyright Sergue E. Leontiev 2013.
|
||||
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)
|
||||
*/
|
||||
|
||||
// Stub file for universal binary
|
||||
|
||||
#if defined(__ppc__)
|
||||
#include "jump_ppc32_sysv_macho_gas.S"
|
||||
#elif defined(__ppc64__)
|
||||
#include "jump_ppc64_sysv_macho_gas.S"
|
||||
#else
|
||||
#error "No arch's"
|
||||
#endif
|
201
third_party/context/src/asm/jump_ppc32_sysv_elf_gas.S
vendored
Normal file
201
third_party/context/src/asm/jump_ppc32_sysv_elf_gas.S
vendored
Normal file
@ -0,0 +1,201 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
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 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | *
|
||||
* ------------------------------------------------- *
|
||||
* |bchai|hiddn| fpscr | PC | CR | R14 | R15 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R16 | R17 | R18 | R19 | R20 | R21 | R22 | R23 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R24 | R25 | R26 | R27 | R28 | R29 | R30 | R31 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F14 | F15 | F16 | F17 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F18 | F19 | F20 | F21 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F22 | F23 | F24 | F25 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F26 | F27 | F28 | F29 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------|------------ *
|
||||
* | 224 | 228 | 232 | 236 | 240 | 244 | *
|
||||
* ------------------------|------------ *
|
||||
* | F30 | F31 |bchai| LR | *
|
||||
* ------------------------|------------ *
|
||||
* *
|
||||
*******************************************************/
|
||||
|
||||
.file "jump_ppc32_sysv_elf_gas.S"
|
||||
.text
|
||||
.globl jump_fcontext
|
||||
.align 2
|
||||
.type jump_fcontext,@function
|
||||
jump_fcontext:
|
||||
# Linux: jump_fcontext( hidden transfer_t * R3, R4, R5)
|
||||
# Other: transfer_t R3:R4 = jump_fcontext( R3, R4)
|
||||
|
||||
mflr %r0 # return address from LR
|
||||
mffs %f0 # FPSCR
|
||||
mfcr %r8 # condition register
|
||||
|
||||
stwu %r1, -240(%r1) # allocate stack space, R1 % 16 == 0
|
||||
stw %r0, 244(%r1) # save LR in caller's frame
|
||||
|
||||
#ifdef __linux__
|
||||
stw %r3, 4(%r1) # hidden pointer
|
||||
#endif
|
||||
|
||||
stfd %f0, 8(%r1) # FPSCR
|
||||
stw %r0, 16(%r1) # LR as PC
|
||||
stw %r8, 20(%r1) # CR
|
||||
|
||||
# Save registers R14 to R31.
|
||||
# Don't change R2, the thread-local storage pointer.
|
||||
# Don't change R13, the small data pointer.
|
||||
stw %r14, 24(%r1)
|
||||
stw %r15, 28(%r1)
|
||||
stw %r16, 32(%r1)
|
||||
stw %r17, 36(%r1)
|
||||
stw %r18, 40(%r1)
|
||||
stw %r19, 44(%r1)
|
||||
stw %r20, 48(%r1)
|
||||
stw %r21, 52(%r1)
|
||||
stw %r22, 56(%r1)
|
||||
stw %r23, 60(%r1)
|
||||
stw %r24, 64(%r1)
|
||||
stw %r25, 68(%r1)
|
||||
stw %r26, 72(%r1)
|
||||
stw %r27, 76(%r1)
|
||||
stw %r28, 80(%r1)
|
||||
stw %r29, 84(%r1)
|
||||
stw %r30, 88(%r1)
|
||||
stw %r31, 92(%r1)
|
||||
|
||||
# Save registers F14 to F31 in slots with 8-byte alignment.
|
||||
# 4-byte alignment may stall the pipeline of some processors.
|
||||
# Less than 4 may cause alignment traps.
|
||||
stfd %f14, 96(%r1)
|
||||
stfd %f15, 104(%r1)
|
||||
stfd %f16, 112(%r1)
|
||||
stfd %f17, 120(%r1)
|
||||
stfd %f18, 128(%r1)
|
||||
stfd %f19, 136(%r1)
|
||||
stfd %f20, 144(%r1)
|
||||
stfd %f21, 152(%r1)
|
||||
stfd %f22, 160(%r1)
|
||||
stfd %f23, 168(%r1)
|
||||
stfd %f24, 176(%r1)
|
||||
stfd %f25, 184(%r1)
|
||||
stfd %f26, 192(%r1)
|
||||
stfd %f27, 200(%r1)
|
||||
stfd %f28, 208(%r1)
|
||||
stfd %f29, 216(%r1)
|
||||
stfd %f30, 224(%r1)
|
||||
stfd %f31, 232(%r1)
|
||||
|
||||
# store RSP (pointing to context-data) in R7/R6
|
||||
# restore RSP (pointing to context-data) from R4/R3
|
||||
#ifdef __linux__
|
||||
mr %r7, %r1
|
||||
mr %r1, %r4
|
||||
lwz %r3, 4(%r1) # hidden pointer
|
||||
#else
|
||||
mr %r6, %r1
|
||||
mr %r1, %r3
|
||||
#endif
|
||||
|
||||
lfd %f0, 8(%r1) # FPSCR
|
||||
lwz %r0, 16(%r1) # PC
|
||||
lwz %r8, 20(%r1) # CR
|
||||
|
||||
mtfsf 0xff, %f0 # restore FPSCR
|
||||
mtctr %r0 # load CTR with PC
|
||||
mtcr %r8 # restore CR
|
||||
|
||||
# restore R14 to R31
|
||||
lwz %r14, 24(%r1)
|
||||
lwz %r15, 28(%r1)
|
||||
lwz %r16, 32(%r1)
|
||||
lwz %r17, 36(%r1)
|
||||
lwz %r18, 40(%r1)
|
||||
lwz %r19, 44(%r1)
|
||||
lwz %r20, 48(%r1)
|
||||
lwz %r21, 52(%r1)
|
||||
lwz %r22, 56(%r1)
|
||||
lwz %r23, 60(%r1)
|
||||
lwz %r24, 64(%r1)
|
||||
lwz %r25, 68(%r1)
|
||||
lwz %r26, 72(%r1)
|
||||
lwz %r27, 76(%r1)
|
||||
lwz %r28, 80(%r1)
|
||||
lwz %r29, 84(%r1)
|
||||
lwz %r30, 88(%r1)
|
||||
lwz %r31, 92(%r1)
|
||||
|
||||
# restore F14 to F31
|
||||
lfd %f14, 96(%r1)
|
||||
lfd %f15, 104(%r1)
|
||||
lfd %f16, 112(%r1)
|
||||
lfd %f17, 120(%r1)
|
||||
lfd %f18, 128(%r1)
|
||||
lfd %f19, 136(%r1)
|
||||
lfd %f20, 144(%r1)
|
||||
lfd %f21, 152(%r1)
|
||||
lfd %f22, 160(%r1)
|
||||
lfd %f23, 168(%r1)
|
||||
lfd %f24, 176(%r1)
|
||||
lfd %f25, 184(%r1)
|
||||
lfd %f26, 192(%r1)
|
||||
lfd %f27, 200(%r1)
|
||||
lfd %f28, 208(%r1)
|
||||
lfd %f29, 216(%r1)
|
||||
lfd %f30, 224(%r1)
|
||||
lfd %f31, 232(%r1)
|
||||
|
||||
# restore LR from caller's frame
|
||||
lwz %r0, 244(%r1)
|
||||
mtlr %r0
|
||||
|
||||
# adjust stack
|
||||
addi %r1, %r1, 240
|
||||
|
||||
# return transfer_t
|
||||
#ifdef __linux__
|
||||
stw %r7, 0(%r3)
|
||||
stw %r5, 4(%r3)
|
||||
#else
|
||||
mr %r3, %r6
|
||||
# %r4, %r4
|
||||
#endif
|
||||
|
||||
# jump to context
|
||||
bctr
|
||||
.size jump_fcontext, .-jump_fcontext
|
||||
|
||||
/* Mark that we don't need executable stack. */
|
||||
.section .note.GNU-stack,"",%progbits
|
201
third_party/context/src/asm/jump_ppc32_sysv_macho_gas.S
vendored
Normal file
201
third_party/context/src/asm/jump_ppc32_sysv_macho_gas.S
vendored
Normal file
@ -0,0 +1,201 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
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 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F14 | F15 | F16 | F17 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F18 | F19 | F20 | F21 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F22 | F23 | F24 | F25 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F26 | F27 | F28 | F29 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F30 | F31 | fpscr | R13 | R14 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R15 | R16 | R17 | R18 | R19 | R20 | R21 | R22 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R23 | R24 | R25 | R26 | R27 | R28 | R29 | R30 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R31 |hiddn| CR | LR | PC |bchai|linkr| FCTX| *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 64 | | *
|
||||
* ------------------------------------------------- *
|
||||
* | 256 | | *
|
||||
* ------------------------------------------------- *
|
||||
* | DATA| | *
|
||||
* ------------------------------------------------- *
|
||||
* *
|
||||
*******************************************************/
|
||||
|
||||
.text
|
||||
.globl _jump_fcontext
|
||||
.align 2
|
||||
_jump_fcontext:
|
||||
; reserve space on stack
|
||||
subi r1, r1, 244
|
||||
|
||||
stfd f14, 0(r1) ; save F14
|
||||
stfd f15, 8(r1) ; save F15
|
||||
stfd f16, 16(r1) ; save F16
|
||||
stfd f17, 24(r1) ; save F17
|
||||
stfd f18, 32(r1) ; save F18
|
||||
stfd f19, 40(r1) ; save F19
|
||||
stfd f20, 48(r1) ; save F20
|
||||
stfd f21, 56(r1) ; save F21
|
||||
stfd f22, 64(r1) ; save F22
|
||||
stfd f23, 72(r1) ; save F23
|
||||
stfd f24, 80(r1) ; save F24
|
||||
stfd f25, 88(r1) ; save F25
|
||||
stfd f26, 96(r1) ; save F26
|
||||
stfd f27, 104(r1) ; save F27
|
||||
stfd f28, 112(r1) ; save F28
|
||||
stfd f29, 120(r1) ; save F29
|
||||
stfd f30, 128(r1) ; save F30
|
||||
stfd f31, 136(r1) ; save F31
|
||||
mffs f0 ; load FPSCR
|
||||
stfd f0, 144(r1) ; save FPSCR
|
||||
|
||||
stw r13, 152(r1) ; save R13
|
||||
stw r14, 156(r1) ; save R14
|
||||
stw r15, 160(r1) ; save R15
|
||||
stw r16, 164(r1) ; save R16
|
||||
stw r17, 168(r1) ; save R17
|
||||
stw r18, 172(r1) ; save R18
|
||||
stw r19, 176(r1) ; save R19
|
||||
stw r20, 180(r1) ; save R20
|
||||
stw r21, 184(r1) ; save R21
|
||||
stw r22, 188(r1) ; save R22
|
||||
stw r23, 192(r1) ; save R23
|
||||
stw r24, 196(r1) ; save R24
|
||||
stw r25, 200(r1) ; save R25
|
||||
stw r26, 204(r1) ; save R26
|
||||
stw r27, 208(r1) ; save R27
|
||||
stw r28, 212(r1) ; save R28
|
||||
stw r29, 216(r1) ; save R29
|
||||
stw r30, 220(r1) ; save R30
|
||||
stw r31, 224(r1) ; save R31
|
||||
stw r3, 228(r1) ; save hidden
|
||||
|
||||
; save CR
|
||||
mfcr r0
|
||||
stw r0, 232(r1)
|
||||
; save LR
|
||||
mflr r0
|
||||
stw r0, 236(r1)
|
||||
; save LR as PC
|
||||
stw r0, 240(r1)
|
||||
|
||||
; store RSP (pointing to context-data) in R6
|
||||
mr r6, r1
|
||||
|
||||
; restore RSP (pointing to context-data) from R4
|
||||
mr r1, r4
|
||||
|
||||
lfd f14, 0(r1) ; restore F14
|
||||
lfd f15, 8(r1) ; restore F15
|
||||
lfd f16, 16(r1) ; restore F16
|
||||
lfd f17, 24(r1) ; restore F17
|
||||
lfd f18, 32(r1) ; restore F18
|
||||
lfd f19, 40(r1) ; restore F19
|
||||
lfd f20, 48(r1) ; restore F20
|
||||
lfd f21, 56(r1) ; restore F21
|
||||
lfd f22, 64(r1) ; restore F22
|
||||
lfd f23, 72(r1) ; restore F23
|
||||
lfd f24, 80(r1) ; restore F24
|
||||
lfd f25, 88(r1) ; restore F25
|
||||
lfd f26, 96(r1) ; restore F26
|
||||
lfd f27, 104(r1) ; restore F27
|
||||
lfd f28, 112(r1) ; restore F28
|
||||
lfd f29, 120(r1) ; restore F29
|
||||
lfd f30, 128(r1) ; restore F30
|
||||
lfd f31, 136(r1) ; restore F31
|
||||
lfd f0, 144(r1) ; load FPSCR
|
||||
mtfsf 0xff, f0 ; restore FPSCR
|
||||
|
||||
lwz r13, 152(r1) ; restore R13
|
||||
lwz r14, 156(r1) ; restore R14
|
||||
lwz r15, 160(r1) ; restore R15
|
||||
lwz r16, 164(r1) ; restore R16
|
||||
lwz r17, 168(r1) ; restore R17
|
||||
lwz r18, 172(r1) ; restore R18
|
||||
lwz r19, 176(r1) ; restore R19
|
||||
lwz r20, 180(r1) ; restore R20
|
||||
lwz r21, 184(r1) ; restore R21
|
||||
lwz r22, 188(r1) ; restore R22
|
||||
lwz r23, 192(r1) ; restore R23
|
||||
lwz r24, 196(r1) ; restore R24
|
||||
lwz r25, 200(r1) ; restore R25
|
||||
lwz r26, 204(r1) ; restore R26
|
||||
lwz r27, 208(r1) ; restore R27
|
||||
lwz r28, 212(r1) ; restore R28
|
||||
lwz r29, 216(r1) ; restore R29
|
||||
lwz r30, 220(r1) ; restore R30
|
||||
lwz r31, 224(r1) ; restore R31
|
||||
lwz r3, 228(r1) ; restore hidden
|
||||
|
||||
; restore CR
|
||||
lwz r0, 232(r1)
|
||||
mtcr r0
|
||||
; restore LR
|
||||
lwz r0, 236(r1)
|
||||
mtlr r0
|
||||
; load PC
|
||||
lwz r0, 240(r1)
|
||||
; restore CTR
|
||||
mtctr r0
|
||||
|
||||
; adjust stack
|
||||
addi r1, r1, 244
|
||||
|
||||
; return transfer_t
|
||||
stw r6, 0(r3)
|
||||
stw r5, 4(r3)
|
||||
|
||||
; jump to context
|
||||
bctr
|
216
third_party/context/src/asm/jump_ppc32_sysv_xcoff_gas.S
vendored
Normal file
216
third_party/context/src/asm/jump_ppc32_sysv_xcoff_gas.S
vendored
Normal file
@ -0,0 +1,216 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
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 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | *
|
||||
* ------------------------------------------------- *
|
||||
* |bchai| CR | LR |compl| link| TOC | R14 | R15 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R16 | R17 | R18 | R19 | R20 | R21 | R22 | R23 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R24 | R25 | R26 | R27 | R28 | R29 | R30 | R31 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F14 | F15 | F16 | F17 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F18 | F19 | F20 | F21 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F22 | F23 | F24 | F25 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F26 | F27 | F28 | F29 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F30 | F31 | PC |hiddn| fpscr | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 256 | 260 | 264 | 268 | 272 | 276 | 280 | 284 | *
|
||||
* ------------------------------------------------- *
|
||||
* |bchai|savCR|savLR|compl| link|svTOC| FCTX| DATA| *
|
||||
* ------------------------------------------------- *
|
||||
* *
|
||||
*******************************************************/
|
||||
|
||||
.file "jump_ppc32_sysv_xcoff_gas.S"
|
||||
.toc
|
||||
.csect .text[PR], 5
|
||||
.globl jump_fcontext[DS]
|
||||
.globl .jump_fcontext
|
||||
.csect jump_fcontext[DS]
|
||||
jump_fcontext:
|
||||
.long .jump_fcontext[PR], TOC[tc0], 0
|
||||
.csect .text[PR], 5
|
||||
.jump_fcontext:
|
||||
# reserve space on stack
|
||||
subi 1, 1, 256
|
||||
|
||||
# save CR
|
||||
mfcr 0
|
||||
stw 0, 4(1)
|
||||
# save LR
|
||||
mflr 0
|
||||
stw 0, 8(1)
|
||||
# save LR as PC
|
||||
stw 0, 240(1)
|
||||
# save TOC
|
||||
stw 2, 20(1)
|
||||
|
||||
# Save registers R14 to R31.
|
||||
stw 14, 24(1)
|
||||
stw 15, 28(1)
|
||||
stw 16, 32(1)
|
||||
stw 17, 36(1)
|
||||
stw 18, 40(1)
|
||||
stw 19, 44(1)
|
||||
stw 20, 48(1)
|
||||
stw 21, 52(1)
|
||||
stw 22, 56(1)
|
||||
stw 23, 60(1)
|
||||
stw 24, 64(1)
|
||||
stw 25, 68(1)
|
||||
stw 26, 72(1)
|
||||
stw 27, 76(1)
|
||||
stw 28, 80(1)
|
||||
stw 29, 84(1)
|
||||
stw 30, 88(1)
|
||||
stw 31, 92(1)
|
||||
|
||||
# Save registers F14 to F31 in slots with 8-byte alignment.
|
||||
# 4-byte alignment may stall the pipeline of some processors.
|
||||
# Less than 4 may cause alignment traps.
|
||||
stfd 14, 96(1)
|
||||
stfd 15, 104(1)
|
||||
stfd 16, 112(1)
|
||||
stfd 17, 120(1)
|
||||
stfd 18, 128(1)
|
||||
stfd 19, 136(1)
|
||||
stfd 20, 144(1)
|
||||
stfd 21, 152(1)
|
||||
stfd 22, 160(1)
|
||||
stfd 23, 168(1)
|
||||
stfd 24, 176(1)
|
||||
stfd 25, 184(1)
|
||||
stfd 26, 192(1)
|
||||
stfd 27, 200(1)
|
||||
stfd 28, 208(1)
|
||||
stfd 29, 216(1)
|
||||
stfd 30, 224(1)
|
||||
stfd 31, 232(1)
|
||||
|
||||
# hidden pointer
|
||||
stw 3, 244(1)
|
||||
|
||||
mffs 0 # load FPSCR
|
||||
stfd 0, 248(1) # save FPSCR
|
||||
|
||||
|
||||
# store RSP (pointing to context-data) in R6
|
||||
mr 6, 1
|
||||
|
||||
# restore RSP (pointing to context-data) from R4
|
||||
mr 1, 4
|
||||
|
||||
# restore CR
|
||||
lwz 0, 4(1)
|
||||
mtcr 0
|
||||
# restore LR
|
||||
lwz 0, 8(1)
|
||||
mtlr 0
|
||||
# load PC
|
||||
lwz 0, 240(1)
|
||||
mtctr 0
|
||||
|
||||
# restore TOC
|
||||
lwz 2, 20(1)
|
||||
|
||||
# restore R14 to R31
|
||||
lwz 14, 24(1)
|
||||
lwz 15, 28(1)
|
||||
lwz 16, 32(1)
|
||||
lwz 17, 36(1)
|
||||
lwz 18, 40(1)
|
||||
lwz 19, 44(1)
|
||||
lwz 20, 48(1)
|
||||
lwz 21, 52(1)
|
||||
lwz 22, 56(1)
|
||||
lwz 23, 60(1)
|
||||
lwz 24, 64(1)
|
||||
lwz 25, 68(1)
|
||||
lwz 26, 72(1)
|
||||
lwz 27, 76(1)
|
||||
lwz 28, 80(1)
|
||||
lwz 29, 84(1)
|
||||
lwz 30, 88(1)
|
||||
lwz 31, 92(1)
|
||||
|
||||
# restore F14 to F31
|
||||
lfd 14, 96(1)
|
||||
lfd 15, 104(1)
|
||||
lfd 16, 112(1)
|
||||
lfd 17, 120(1)
|
||||
lfd 18, 128(1)
|
||||
lfd 19, 136(1)
|
||||
lfd 20, 144(1)
|
||||
lfd 21, 152(1)
|
||||
lfd 22, 160(1)
|
||||
lfd 23, 168(1)
|
||||
lfd 24, 176(1)
|
||||
lfd 25, 184(1)
|
||||
lfd 26, 192(1)
|
||||
lfd 27, 200(1)
|
||||
lfd 28, 208(1)
|
||||
lfd 29, 216(1)
|
||||
lfd 30, 224(1)
|
||||
lfd 31, 232(1)
|
||||
|
||||
# hidden pointer
|
||||
lwz 3, 244(1)
|
||||
|
||||
lfd 0, 248(1) # load FPSCR
|
||||
mtfsf 0xff, 0 # restore FPSCR
|
||||
|
||||
# adjust stack
|
||||
addi 1, 1, 256
|
||||
|
||||
# zero in r3 indicates first jump to context-function
|
||||
cmpdi 3, 0
|
||||
beq use_entry_arg
|
||||
|
||||
# return transfer_t
|
||||
stw 6, 0(3)
|
||||
stw 5, 4(3)
|
||||
|
||||
# jump to context
|
||||
bctr
|
||||
|
||||
use_entry_arg:
|
||||
# copy transfer_t into transfer_fn arg registers
|
||||
mr 3, 6
|
||||
mr 4, 5
|
||||
|
||||
# jump to context
|
||||
bctr
|
221
third_party/context/src/asm/jump_ppc64_sysv_elf_gas.S
vendored
Normal file
221
third_party/context/src/asm/jump_ppc64_sysv_elf_gas.S
vendored
Normal file
@ -0,0 +1,221 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
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 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | *
|
||||
* ------------------------------------------------- *
|
||||
* | TOC | R14 | R15 | R16 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R17 | R18 | R19 | R20 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R21 | R22 | R23 | R24 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R25 | R26 | R27 | R28 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R29 | R30 | R31 | hidden | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | *
|
||||
* ------------------------------------------------- *
|
||||
* | CR | LR | PC | back-chain| *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | *
|
||||
* ------------------------------------------------- *
|
||||
* | cr saved | lr saved | compiler | linker | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | *
|
||||
* ------------------------------------------------- *
|
||||
* | TOC saved | FCTX | DATA | | *
|
||||
* ------------------------------------------------- *
|
||||
* *
|
||||
*******************************************************/
|
||||
|
||||
.file "jump_ppc64_sysv_elf_gas.S"
|
||||
.globl jump_fcontext
|
||||
#if _CALL_ELF == 2
|
||||
.text
|
||||
.align 2
|
||||
jump_fcontext:
|
||||
addis %r2, %r12, .TOC.-jump_fcontext@ha
|
||||
addi %r2, %r2, .TOC.-jump_fcontext@l
|
||||
.localentry jump_fcontext, . - jump_fcontext
|
||||
#else
|
||||
.section ".opd","aw"
|
||||
.align 3
|
||||
jump_fcontext:
|
||||
# ifdef _CALL_LINUX
|
||||
.quad .L.jump_fcontext,.TOC.@tocbase,0
|
||||
.type jump_fcontext,@function
|
||||
.text
|
||||
.align 2
|
||||
.L.jump_fcontext:
|
||||
# else
|
||||
.hidden .jump_fcontext
|
||||
.globl .jump_fcontext
|
||||
.quad .jump_fcontext,.TOC.@tocbase,0
|
||||
.size jump_fcontext,24
|
||||
.type .jump_fcontext,@function
|
||||
.text
|
||||
.align 2
|
||||
.jump_fcontext:
|
||||
# endif
|
||||
#endif
|
||||
# reserve space on stack
|
||||
subi %r1, %r1, 184
|
||||
|
||||
#if _CALL_ELF != 2
|
||||
std %r2, 0(%r1) # save TOC
|
||||
#endif
|
||||
std %r14, 8(%r1) # save R14
|
||||
std %r15, 16(%r1) # save R15
|
||||
std %r16, 24(%r1) # save R16
|
||||
std %r17, 32(%r1) # save R17
|
||||
std %r18, 40(%r1) # save R18
|
||||
std %r19, 48(%r1) # save R19
|
||||
std %r20, 56(%r1) # save R20
|
||||
std %r21, 64(%r1) # save R21
|
||||
std %r22, 72(%r1) # save R22
|
||||
std %r23, 80(%r1) # save R23
|
||||
std %r24, 88(%r1) # save R24
|
||||
std %r25, 96(%r1) # save R25
|
||||
std %r26, 104(%r1) # save R26
|
||||
std %r27, 112(%r1) # save R27
|
||||
std %r28, 120(%r1) # save R28
|
||||
std %r29, 128(%r1) # save R29
|
||||
std %r30, 136(%r1) # save R30
|
||||
std %r31, 144(%r1) # save R31
|
||||
#if _CALL_ELF != 2
|
||||
std %r3, 152(%r1) # save hidden
|
||||
#endif
|
||||
|
||||
# save CR
|
||||
mfcr %r0
|
||||
std %r0, 160(%r1)
|
||||
# save LR
|
||||
mflr %r0
|
||||
std %r0, 168(%r1)
|
||||
# save LR as PC
|
||||
std %r0, 176(%r1)
|
||||
|
||||
# store RSP (pointing to context-data) in R6
|
||||
mr %r6, %r1
|
||||
|
||||
#if _CALL_ELF == 2
|
||||
# restore RSP (pointing to context-data) from R3
|
||||
mr %r1, %r3
|
||||
#else
|
||||
# restore RSP (pointing to context-data) from R4
|
||||
mr %r1, %r4
|
||||
|
||||
ld %r2, 0(%r1) # restore TOC
|
||||
#endif
|
||||
ld %r14, 8(%r1) # restore R14
|
||||
ld %r15, 16(%r1) # restore R15
|
||||
ld %r16, 24(%r1) # restore R16
|
||||
ld %r17, 32(%r1) # restore R17
|
||||
ld %r18, 40(%r1) # restore R18
|
||||
ld %r19, 48(%r1) # restore R19
|
||||
ld %r20, 56(%r1) # restore R20
|
||||
ld %r21, 64(%r1) # restore R21
|
||||
ld %r22, 72(%r1) # restore R22
|
||||
ld %r23, 80(%r1) # restore R23
|
||||
ld %r24, 88(%r1) # restore R24
|
||||
ld %r25, 96(%r1) # restore R25
|
||||
ld %r26, 104(%r1) # restore R26
|
||||
ld %r27, 112(%r1) # restore R27
|
||||
ld %r28, 120(%r1) # restore R28
|
||||
ld %r29, 128(%r1) # restore R29
|
||||
ld %r30, 136(%r1) # restore R30
|
||||
ld %r31, 144(%r1) # restore R31
|
||||
#if _CALL_ELF != 2
|
||||
ld %r3, 152(%r1) # restore hidden
|
||||
#endif
|
||||
|
||||
# restore CR
|
||||
ld %r0, 160(%r1)
|
||||
mtcr %r0
|
||||
# restore LR
|
||||
ld %r0, 168(%r1)
|
||||
mtlr %r0
|
||||
|
||||
# load PC
|
||||
ld %r12, 176(%r1)
|
||||
# restore CTR
|
||||
mtctr %r12
|
||||
|
||||
# adjust stack
|
||||
addi %r1, %r1, 184
|
||||
|
||||
#if _CALL_ELF == 2
|
||||
# copy transfer_t into transfer_fn arg registers
|
||||
mr %r3, %r6
|
||||
# arg pointer already in %r4
|
||||
|
||||
# jump to context
|
||||
bctr
|
||||
.size jump_fcontext, .-jump_fcontext
|
||||
#else
|
||||
# zero in r3 indicates first jump to context-function
|
||||
cmpdi %r3, 0
|
||||
beq use_entry_arg
|
||||
|
||||
# return transfer_t
|
||||
std %r6, 0(%r3)
|
||||
std %r5, 8(%r3)
|
||||
|
||||
# jump to context
|
||||
bctr
|
||||
|
||||
use_entry_arg:
|
||||
# copy transfer_t into transfer_fn arg registers
|
||||
mr %r3, %r6
|
||||
mr %r4, %r5
|
||||
|
||||
# jump to context
|
||||
bctr
|
||||
# ifdef _CALL_LINUX
|
||||
.size .jump_fcontext, .-.L.jump_fcontext
|
||||
# else
|
||||
.size .jump_fcontext, .-.jump_fcontext
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Mark that we don't need executable stack. */
|
||||
.section .note.GNU-stack,"",%progbits
|
164
third_party/context/src/asm/jump_ppc64_sysv_macho_gas.S
vendored
Normal file
164
third_party/context/src/asm/jump_ppc64_sysv_macho_gas.S
vendored
Normal file
@ -0,0 +1,164 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
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 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R13 | R14 | R15 | R16 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R17 | R18 | R19 | R20 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R21 | R22 | R23 | R24 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R25 | R26 | R27 | R28 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R29 | R30 | R31 | hidden | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | *
|
||||
* ------------------------------------------------- *
|
||||
* | CR | LR | PC | back-chain| *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | *
|
||||
* ------------------------------------------------- *
|
||||
* | cr saved | lr saved | compiler | linker | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | *
|
||||
* ------------------------------------------------- *
|
||||
* | FCTX | DATA | | | *
|
||||
* ------------------------------------------------- *
|
||||
* *
|
||||
*******************************************************/
|
||||
|
||||
.text
|
||||
.align 2
|
||||
.globl _jump_fcontext
|
||||
|
||||
_jump_fcontext:
|
||||
; reserve space on stack
|
||||
subi r1, r1, 184
|
||||
|
||||
std r14, 8(r1) ; save R14
|
||||
std r15, 16(r1) ; save R15
|
||||
std r16, 24(r1) ; save R16
|
||||
std r17, 32(r1) ; save R17
|
||||
std r18, 40(r1) ; save R18
|
||||
std r19, 48(r1) ; save R19
|
||||
std r20, 56(r1) ; save R20
|
||||
std r21, 64(r1) ; save R21
|
||||
std r22, 72(r1) ; save R22
|
||||
std r23, 80(r1) ; save R23
|
||||
std r24, 88(r1) ; save R24
|
||||
std r25, 96(r1) ; save R25
|
||||
std r26, 104(r1) ; save R26
|
||||
std r27, 112(r1) ; save R27
|
||||
std r28, 120(r1) ; save R28
|
||||
std r29, 128(r1) ; save R29
|
||||
std r30, 136(r1) ; save R30
|
||||
std r31, 144(r1) ; save R31
|
||||
std r3, 152(r1) ; save hidden
|
||||
|
||||
; save CR
|
||||
mfcr r0
|
||||
std r0, 160(r1)
|
||||
; save LR
|
||||
mflr r0
|
||||
std r0, 168(r1)
|
||||
; save LR as PC
|
||||
std r0, 176(r1)
|
||||
|
||||
; store RSP (pointing to context-data) in R6
|
||||
mr r6, r1
|
||||
|
||||
; restore RSP (pointing to context-data) from R4
|
||||
mr r1, r4
|
||||
|
||||
ld r14, 8(r1) ; restore R14
|
||||
ld r15, 16(r1) ; restore R15
|
||||
ld r16, 24(r1) ; restore R16
|
||||
ld r17, 32(r1) ; restore R17
|
||||
ld r18, 40(r1) ; restore R18
|
||||
ld r19, 48(r1) ; restore R19
|
||||
ld r20, 56(r1) ; restore R20
|
||||
ld r21, 64(r1) ; restore R21
|
||||
ld r22, 72(r1) ; restore R22
|
||||
ld r23, 80(r1) ; restore R23
|
||||
ld r24, 88(r1) ; restore R24
|
||||
ld r25, 96(r1) ; restore R25
|
||||
ld r26, 104(r1) ; restore R26
|
||||
ld r27, 112(r1) ; restore R27
|
||||
ld r28, 120(r1) ; restore R28
|
||||
ld r29, 128(r1) ; restore R29
|
||||
ld r30, 136(r1) ; restore R30
|
||||
ld r31, 144(r1) ; restore R31
|
||||
ld r3, 152(r1) ; restore hidden
|
||||
|
||||
; restore CR
|
||||
ld r0, 160(r1)
|
||||
mtcr r0
|
||||
; restore LR
|
||||
ld r0, 168(r1)
|
||||
mtlr r0
|
||||
|
||||
; load PC
|
||||
ld r12, 176(r1)
|
||||
; restore CTR
|
||||
mtctr r12
|
||||
|
||||
; adjust stack
|
||||
addi r1, r1, 184
|
||||
|
||||
; zero in r3 indicates first jump to context-function
|
||||
cmpdi r3, 0
|
||||
beq use_entry_arg
|
||||
|
||||
; return transfer_t
|
||||
std r6, 0(r3)
|
||||
std r5, 8(r3)
|
||||
|
||||
; jump to context
|
||||
bctr
|
||||
|
||||
use_entry_arg:
|
||||
; copy transfer_t into transfer_fn arg registers
|
||||
mr r3, r6
|
||||
mr r4, r5
|
||||
|
||||
; jump to context
|
||||
bctr
|
173
third_party/context/src/asm/jump_ppc64_sysv_xcoff_gas.S
vendored
Normal file
173
third_party/context/src/asm/jump_ppc64_sysv_xcoff_gas.S
vendored
Normal file
@ -0,0 +1,173 @@
|
||||
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
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 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | *
|
||||
* ------------------------------------------------- *
|
||||
* | TOC | R14 | R15 | R16 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R17 | R18 | R19 | R20 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R21 | R22 | R23 | R24 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R25 | R26 | R27 | R28 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R29 | R30 | R31 | hidden | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | *
|
||||
* ------------------------------------------------- *
|
||||
* | CR | LR | PC | back-chain| *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | *
|
||||
* ------------------------------------------------- *
|
||||
* | cr saved | lr saved | compiler | linker | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | *
|
||||
* ------------------------------------------------- *
|
||||
* | TOC saved | FCTX | DATA | | *
|
||||
* ------------------------------------------------- *
|
||||
* *
|
||||
*******************************************************/
|
||||
|
||||
.file "jump_ppc64_sysv_xcoff_gas.S"
|
||||
.toc
|
||||
.csect .text[PR], 5
|
||||
.align 2
|
||||
.globl jump_fcontext[DS]
|
||||
.globl .jump_fcontext
|
||||
.csect jump_fcontext[DS], 3
|
||||
jump_fcontext:
|
||||
.llong .jump_fcontext[PR], TOC[tc0], 0
|
||||
.csect .text[PR], 5
|
||||
.jump_fcontext:
|
||||
# reserve space on stack
|
||||
subi 1, 1, 184
|
||||
|
||||
std 2, 0(1) # save TOC
|
||||
std 14, 8(1) # save R14
|
||||
std 15, 16(1) # save R15
|
||||
std 16, 24(1) # save R16
|
||||
std 17, 32(1) # save R17
|
||||
std 18, 40(1) # save R18
|
||||
std 19, 48(1) # save R19
|
||||
std 20, 56(1) # save R20
|
||||
std 21, 64(1) # save R21
|
||||
std 22, 72(1) # save R22
|
||||
std 23, 80(1) # save R23
|
||||
std 24, 88(1) # save R24
|
||||
std 25, 96(1) # save R25
|
||||
std 26, 104(1) # save R26
|
||||
std 27, 112(1) # save R27
|
||||
std 28, 120(1) # save R28
|
||||
std 29, 128(1) # save R29
|
||||
std 30, 136(1) # save R30
|
||||
std 31, 144(1) # save R31
|
||||
std 3, 152(1) # save hidden
|
||||
|
||||
# save CR
|
||||
mfcr 0
|
||||
std 0, 160(1)
|
||||
# save LR
|
||||
mflr 0
|
||||
std 0, 168(1)
|
||||
# save LR as PC
|
||||
std 0, 176(1)
|
||||
|
||||
# store RSP (pointing to context-data) in R6
|
||||
mr 6, 1
|
||||
|
||||
# restore RSP (pointing to context-data) from R4
|
||||
mr 1, 4
|
||||
|
||||
ld 2, 0(1) # restore TOC
|
||||
ld 14, 8(1) # restore R14
|
||||
ld 15, 16(1) # restore R15
|
||||
ld 16, 24(1) # restore R16
|
||||
ld 17, 32(1) # restore R17
|
||||
ld 18, 40(1) # restore R18
|
||||
ld 19, 48(1) # restore R19
|
||||
ld 20, 56(1) # restore R20
|
||||
ld 21, 64(1) # restore R21
|
||||
ld 22, 72(1) # restore R22
|
||||
ld 23, 80(1) # restore R23
|
||||
ld 24, 88(1) # restore R24
|
||||
ld 25, 96(1) # restore R25
|
||||
ld 26, 104(1) # restore R26
|
||||
ld 27, 112(1) # restore R27
|
||||
ld 28, 120(1) # restore R28
|
||||
ld 29, 128(1) # restore R29
|
||||
ld 30, 136(1) # restore R30
|
||||
ld 31, 144(1) # restore R31
|
||||
ld 3, 152(1) # restore hidden
|
||||
|
||||
# restore CR
|
||||
ld 0, 160(1)
|
||||
mtcr 0
|
||||
# restore LR
|
||||
ld 0, 168(1)
|
||||
mtlr 0
|
||||
|
||||
# load PC
|
||||
ld 0, 176(1)
|
||||
# restore CTR
|
||||
mtctr 0
|
||||
|
||||
# adjust stack
|
||||
addi 1, 1, 184
|
||||
|
||||
# zero in r3 indicates first jump to context-function
|
||||
cmpdi 3, 0
|
||||
beq use_entry_arg
|
||||
|
||||
# return transfer_t
|
||||
std 6, 0(3)
|
||||
std 5, 8(3)
|
||||
|
||||
# jump to context
|
||||
bctr
|
||||
|
||||
use_entry_arg:
|
||||
# copy transfer_t into transfer_fn arg registers
|
||||
mr 3, 6
|
||||
mr 4, 5
|
||||
|
||||
# jump to context
|
||||
bctr
|
150
third_party/context/src/asm/jump_riscv64_sysv_elf_gas.S
vendored
Normal file
150
third_party/context/src/asm/jump_riscv64_sysv_elf_gas.S
vendored
Normal file
@ -0,0 +1,150 @@
|
||||
/*
|
||||
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| *
|
||||
* ------------------------------------------------- *
|
||||
* | fs0 | fs1 | fs2 | fs3 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
|
||||
* ------------------------------------------------- *
|
||||
* | fs4 | fs5 | fs6 | fs7 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0x40| 0x44| 0x48| 0x4c| 0x50| 0x54| 0x58| 0x5c| *
|
||||
* ------------------------------------------------- *
|
||||
* | fs8 | fs9 | fs10 | fs11 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0x60| 0x64| 0x68| 0x6c| 0x70| 0x74| 0x78| 0x7c| *
|
||||
* ------------------------------------------------- *
|
||||
* | s0 | s1 | s2 | s3 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0x80| 0x84| 0x88| 0x8c| 0x90| 0x94| 0x98| 0x9c| *
|
||||
* ------------------------------------------------- *
|
||||
* | s4 | s5 | s6 | s7 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0xa0| 0xa4| 0xa8| 0xac| 0xb0| 0xb4| 0xb8| 0xbc| *
|
||||
* ------------------------------------------------- *
|
||||
* | s8 | s9 | s10 | s11 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 48 | 49 | 50 | 51 | | | | | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0xc0| 0xc4| 0xc8| 0xcc| | | | | *
|
||||
* ------------------------------------------------- *
|
||||
* | ra | pc | | | *
|
||||
* ------------------------------------------------- *
|
||||
* *
|
||||
*******************************************************/
|
||||
|
||||
.file "jump_riscv64_sysv_elf_gas.S"
|
||||
.text
|
||||
.align 1
|
||||
.global jump_fcontext
|
||||
.type jump_fcontext, %function
|
||||
jump_fcontext:
|
||||
# prepare stack for GP + FPU
|
||||
addi sp, sp, -0xd0
|
||||
|
||||
# save fs0 - fs11
|
||||
fsd fs0, 0x00(sp)
|
||||
fsd fs1, 0x08(sp)
|
||||
fsd fs2, 0x10(sp)
|
||||
fsd fs3, 0x18(sp)
|
||||
fsd fs4, 0x20(sp)
|
||||
fsd fs5, 0x28(sp)
|
||||
fsd fs6, 0x30(sp)
|
||||
fsd fs7, 0x38(sp)
|
||||
fsd fs8, 0x40(sp)
|
||||
fsd fs9, 0x48(sp)
|
||||
fsd fs10, 0x50(sp)
|
||||
fsd fs11, 0x58(sp)
|
||||
|
||||
# save s0-s11, ra
|
||||
sd s0, 0x60(sp)
|
||||
sd s1, 0x68(sp)
|
||||
sd s2, 0x70(sp)
|
||||
sd s3, 0x78(sp)
|
||||
sd s4, 0x80(sp)
|
||||
sd s5, 0x88(sp)
|
||||
sd s6, 0x90(sp)
|
||||
sd s7, 0x98(sp)
|
||||
sd s8, 0xa0(sp)
|
||||
sd s9, 0xa8(sp)
|
||||
sd s10, 0xb0(sp)
|
||||
sd s11, 0xb8(sp)
|
||||
sd ra, 0xc0(sp)
|
||||
|
||||
# save RA as PC
|
||||
sd ra, 0xc8(sp)
|
||||
|
||||
# store SP (pointing to context-data) in A2
|
||||
mv a2, sp
|
||||
|
||||
# restore SP (pointing to context-data) from A0
|
||||
mv sp, a0
|
||||
|
||||
# load fs0 - fs11
|
||||
fld fs0, 0x00(sp)
|
||||
fld fs1, 0x08(sp)
|
||||
fld fs2, 0x10(sp)
|
||||
fld fs3, 0x18(sp)
|
||||
fld fs4, 0x20(sp)
|
||||
fld fs5, 0x28(sp)
|
||||
fld fs6, 0x30(sp)
|
||||
fld fs7, 0x38(sp)
|
||||
fld fs8, 0x40(sp)
|
||||
fld fs9, 0x48(sp)
|
||||
fld fs10, 0x50(sp)
|
||||
fld fs11, 0x58(sp)
|
||||
|
||||
# load s0-s11,ra
|
||||
ld s0, 0x60(sp)
|
||||
ld s1, 0x68(sp)
|
||||
ld s2, 0x70(sp)
|
||||
ld s3, 0x78(sp)
|
||||
ld s4, 0x80(sp)
|
||||
ld s5, 0x88(sp)
|
||||
ld s6, 0x90(sp)
|
||||
ld s7, 0x98(sp)
|
||||
ld s8, 0xa0(sp)
|
||||
ld s9, 0xa8(sp)
|
||||
ld s10, 0xb0(sp)
|
||||
ld s11, 0xb8(sp)
|
||||
ld ra, 0xc0(sp)
|
||||
|
||||
# return transfer_t from jump
|
||||
# pass transfer_t as first arg in context function
|
||||
# a0 == FCTX, a1 == DATA
|
||||
mv a0, a2
|
||||
|
||||
# load pc
|
||||
ld a2, 0xc8(sp)
|
||||
|
||||
# restore stack from GP + FPU
|
||||
addi sp, sp, 0xd0
|
||||
|
||||
jr a2
|
||||
.size jump_fcontext,.-jump_fcontext
|
||||
# Mark that we don't need executable stack.
|
||||
.section .note.GNU-stack,"",%progbits
|
156
third_party/context/src/asm/jump_s390x_sysv_elf_gas.S
vendored
Normal file
156
third_party/context/src/asm/jump_s390x_sysv_elf_gas.S
vendored
Normal file
@ -0,0 +1,156 @@
|
||||
/*******************************************************
|
||||
* ------------------------------------------------- *
|
||||
* | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0 | 8 | 16 | 24 | *
|
||||
* ------------------------------------------------- *
|
||||
* | t.fctx | t.data | r2 | r6 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 40 | 48 | 56 | *
|
||||
* ------------------------------------------------- *
|
||||
* | r7 | r8 | r9 | r10 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 64 | 72 | 80 | 88 | *
|
||||
* ------------------------------------------------- *
|
||||
* | r11 | r12 | r13 | r14 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 96 | 104 | 112 | 120 | *
|
||||
* ------------------------------------------------- *
|
||||
* | f8 | f9 | f10 | f11 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 128 | 136 | 144 | 152 | *
|
||||
* ------------------------------------------------- *
|
||||
* | f12 | f13 | f14 | f15 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 160 | 168 | 176 | | *
|
||||
* ------------------------------------------------- *
|
||||
* | fpc | pc | | | *
|
||||
* ------------------------------------------------- *
|
||||
*******************************************************/
|
||||
|
||||
.text
|
||||
.align 8
|
||||
.global jump_fcontext
|
||||
.type jump_fcontext, @function
|
||||
|
||||
#define ARG_OFFSET 0
|
||||
#define GR_OFFSET 16
|
||||
#define FP_OFFSET 96
|
||||
#define FPC_OFFSET 160
|
||||
#define PC_OFFSET 168
|
||||
#define CONTEXT_SIZE 176
|
||||
|
||||
#define REG_SAVE_AREA_SIZE 160
|
||||
|
||||
/*
|
||||
|
||||
typedef void* fcontext_t;
|
||||
|
||||
struct transfer_t {
|
||||
fcontext_t fctx;
|
||||
void * data;
|
||||
};
|
||||
|
||||
transfer_t jump_fcontext( fcontext_t const to,
|
||||
void * data);
|
||||
|
||||
Incoming args
|
||||
r2 - Hidden argument to the location where the return transfer_t needs to be returned
|
||||
r3 - Context we want to switch to
|
||||
r4 - Data pointer
|
||||
|
||||
*/
|
||||
|
||||
jump_fcontext:
|
||||
.machine "z10"
|
||||
/* Reserve stack space to store the current context. */
|
||||
aghi %r15,-CONTEXT_SIZE
|
||||
|
||||
/* Save the argument register holding the location of the return value. */
|
||||
stg %r2,GR_OFFSET(%r15)
|
||||
|
||||
/* Save the call-saved general purpose registers. */
|
||||
stmg %r6,%r14,GR_OFFSET+8(%r15)
|
||||
|
||||
/* Save call-saved floating point registers. */
|
||||
std %f8,FP_OFFSET(%r15)
|
||||
std %f9,FP_OFFSET+8(%r15)
|
||||
std %f10,FP_OFFSET+16(%r15)
|
||||
std %f11,FP_OFFSET+24(%r15)
|
||||
std %f12,FP_OFFSET+32(%r15)
|
||||
std %f13,FP_OFFSET+40(%r15)
|
||||
std %f14,FP_OFFSET+48(%r15)
|
||||
std %f15,FP_OFFSET+56(%r15)
|
||||
|
||||
/* Save the return address as current pc. */
|
||||
stg %r14,PC_OFFSET(%r15)
|
||||
|
||||
/* Save the floating point control register. */
|
||||
stfpc FPC_OFFSET(%r15)
|
||||
|
||||
/* Backup the stack pointer pointing to the old context-data into r1. */
|
||||
lgr %r1,%r15
|
||||
|
||||
/* Load the new context pointer as stack pointer. */
|
||||
lgr %r15,%r3
|
||||
|
||||
/* Restore the call-saved GPRs from the new context. */
|
||||
lmg %r6,%r14,GR_OFFSET+8(%r15)
|
||||
|
||||
/* Restore call-saved floating point registers. */
|
||||
ld %f8,FP_OFFSET(%r15)
|
||||
ld %f9,FP_OFFSET+8(%r15)
|
||||
ld %f10,FP_OFFSET+16(%r15)
|
||||
ld %f11,FP_OFFSET+24(%r15)
|
||||
ld %f12,FP_OFFSET+32(%r15)
|
||||
ld %f13,FP_OFFSET+40(%r15)
|
||||
ld %f14,FP_OFFSET+48(%r15)
|
||||
ld %f15,FP_OFFSET+56(%r15)
|
||||
|
||||
/* Load the floating point control register. */
|
||||
lfpc FPC_OFFSET(%r15)
|
||||
|
||||
/* Restore PC - the location where we will jump to at the end. */
|
||||
lg %r5,PC_OFFSET(%r15)
|
||||
|
||||
ltg %r2,GR_OFFSET(%r15)
|
||||
jnz use_return_slot
|
||||
|
||||
/* We restore a make_fcontext context. Use the function
|
||||
argument slot in the context we just saved and allocate the
|
||||
register save area for the target function. */
|
||||
la %r2,ARG_OFFSET(%r1)
|
||||
aghi %r15,-REG_SAVE_AREA_SIZE
|
||||
|
||||
use_return_slot:
|
||||
/* Save the two fields in transfer_t. When calling a
|
||||
make_fcontext function this becomes the function argument of
|
||||
the target function, otherwise it will be the return value of
|
||||
jump_fcontext. */
|
||||
stg %r1,0(%r2)
|
||||
stg %r4,8(%r2)
|
||||
|
||||
/* Free the restored context. */
|
||||
aghi %r15,CONTEXT_SIZE
|
||||
|
||||
/* Jump to the PC loaded from the new context. */
|
||||
br %r5
|
||||
|
||||
|
||||
.size jump_fcontext,.-jump_fcontext
|
||||
.section .note.GNU-stack,"",%progbits
|
209
third_party/context/src/asm/jump_x86_64_ms_pe_clang_gas.S
vendored
Normal file
209
third_party/context/src/asm/jump_x86_64_ms_pe_clang_gas.S
vendored
Normal file
@ -0,0 +1,209 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
Copyright Thomas Sailer 2013.
|
||||
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 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | SEE registers (XMM6-XMM15) | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0x20 | 0x24 | 0x28 | 0x2c | 0x30 | 0x34 | 0x38 | 0x3c | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | SEE registers (XMM6-XMM15) | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0xe40 | 0x44 | 0x48 | 0x4c | 0x50 | 0x54 | 0x58 | 0x5c | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | SEE registers (XMM6-XMM15) | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0x60 | 0x64 | 0x68 | 0x6c | 0x70 | 0x74 | 0x78 | 0x7c | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | SEE registers (XMM6-XMM15) | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 32 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0x80 | 0x84 | 0x88 | 0x8c | 0x90 | 0x94 | 0x98 | 0x9c | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | SEE registers (XMM6-XMM15) | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0xa0 | 0xa4 | 0xa8 | 0xac | 0xb0 | 0xb4 | 0xb8 | 0xbc | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | fc_mxcsr|fc_x87_cw| <alignment> | fbr_strg | fc_dealloc | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0xc0 | 0xc4 | 0xc8 | 0xcc | 0xd0 | 0xd4 | 0xd8 | 0xdc | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | limit | base | R12 | R13 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0xe0 | 0xe4 | 0xe8 | 0xec | 0xf0 | 0xf4 | 0xf8 | 0xfc | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | R14 | R15 | RDI | RSI | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0x100 | 0x104 | 0x108 | 0x10c | 0x110 | 0x114 | 0x118 | 0x11c | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | RBX | RBP | hidden | RIP | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0x120 | 0x124 | 0x128 | 0x12c | 0x130 | 0x134 | 0x138 | 0x13c | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | parameter area | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0x140 | 0x144 | 0x148 | 0x14c | 0x150 | 0x154 | 0x158 | 0x15c | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | FCTX | DATA | | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
**************************************************************************************/
|
||||
|
||||
.file "jump_x86_64_ms_pe_clang_gas.S"
|
||||
.text
|
||||
.p2align 4,,15
|
||||
.globl jump_fcontext
|
||||
.def jump_fcontext; .scl 2; .type 32; .endef
|
||||
.seh_proc jump_fcontext
|
||||
jump_fcontext:
|
||||
.seh_endprologue
|
||||
|
||||
leaq -0x118(%rsp), %rsp /* prepare stack */
|
||||
|
||||
#if !defined(BOOST_USE_TSX)
|
||||
/* save XMM storage */
|
||||
movaps %xmm6, 0x0(%rsp)
|
||||
movaps %xmm7, 0x10(%rsp)
|
||||
movaps %xmm8, 0x20(%rsp)
|
||||
movaps %xmm9, 0x30(%rsp)
|
||||
movaps %xmm10, 0x40(%rsp)
|
||||
movaps %xmm11, 0x50(%rsp)
|
||||
movaps %xmm12, 0x60(%rsp)
|
||||
movaps %xmm13, 0x70(%rsp)
|
||||
movaps %xmm14, 0x80(%rsp)
|
||||
movaps %xmm15, 0x90(%rsp)
|
||||
stmxcsr 0xa0(%rsp) /* save MMX control- and status-word */
|
||||
fnstcw 0xa4(%rsp) /* save x87 control-word */
|
||||
#endif
|
||||
|
||||
/* load NT_TIB */
|
||||
movq %gs:(0x30), %r10
|
||||
/* save fiber local storage */
|
||||
movq 0x20(%r10), %rax
|
||||
movq %rax, 0xb0(%rsp)
|
||||
/* save current deallocation stack */
|
||||
movq 0x1478(%r10), %rax
|
||||
movq %rax, 0xb8(%rsp)
|
||||
/* save current stack limit */
|
||||
movq 0x10(%r10), %rax
|
||||
movq %rax, 0xc0(%rsp)
|
||||
/* save current stack base */
|
||||
movq 0x08(%r10), %rax
|
||||
movq %rax, 0xc8(%rsp)
|
||||
|
||||
movq %r12, 0xd0(%rsp) /* save R12 */
|
||||
movq %r13, 0xd8(%rsp) /* save R13 */
|
||||
movq %r14, 0xe0(%rsp) /* save R14 */
|
||||
movq %r15, 0xe8(%rsp) /* save R15 */
|
||||
movq %rdi, 0xf0(%rsp) /* save RDI */
|
||||
movq %rsi, 0xf8(%rsp) /* save RSI */
|
||||
movq %rbx, 0x100(%rsp) /* save RBX */
|
||||
movq %rbp, 0x108(%rsp) /* save RBP */
|
||||
|
||||
movq %rcx, 0x110(%rsp) /* save hidden address of transport_t */
|
||||
|
||||
/* preserve RSP (pointing to context-data) in R9 */
|
||||
movq %rsp, %r9
|
||||
|
||||
/* restore RSP (pointing to context-data) from RDX */
|
||||
movq %rdx, %rsp
|
||||
|
||||
#if !defined(BOOST_USE_TSX)
|
||||
/* restore XMM storage */
|
||||
movaps 0x0(%rsp), %xmm6
|
||||
movaps 0x10(%rsp), %xmm7
|
||||
movaps 0x20(%rsp), %xmm8
|
||||
movaps 0x30(%rsp), %xmm9
|
||||
movaps 0x40(%rsp), %xmm10
|
||||
movaps 0x50(%rsp), %xmm11
|
||||
movaps 0x60(%rsp), %xmm12
|
||||
movaps 0x70(%rsp), %xmm13
|
||||
movaps 0x80(%rsp), %xmm14
|
||||
movaps 0x90(%rsp), %xmm15
|
||||
ldmxcsr 0xa0(%rsp) /* restore MMX control- and status-word */
|
||||
fldcw 0xa4(%rsp) /* restore x87 control-word */
|
||||
#endif
|
||||
|
||||
/* load NT_TIB */
|
||||
movq %gs:(0x30), %r10
|
||||
/* restore fiber local storage */
|
||||
movq 0xb0(%rsp), %rax
|
||||
movq %rax, 0x20(%r10)
|
||||
/* restore current deallocation stack */
|
||||
movq 0xb8(%rsp), %rax
|
||||
movq %rax, 0x1478(%r10)
|
||||
/* restore current stack limit */
|
||||
movq 0xc0(%rsp), %rax
|
||||
movq %rax, 0x10(%r10)
|
||||
/* restore current stack base */
|
||||
movq 0xc8(%rsp), %rax
|
||||
movq %rax, 0x08(%r10)
|
||||
|
||||
movq 0xd0(%rsp), %r12 /* restore R12 */
|
||||
movq 0xd8(%rsp), %r13 /* restore R13 */
|
||||
movq 0xe0(%rsp), %r14 /* restore R14 */
|
||||
movq 0xe8(%rsp), %r15 /* restore R15 */
|
||||
movq 0xf0(%rsp), %rdi /* restore RDI */
|
||||
movq 0xf8(%rsp), %rsi /* restore RSI */
|
||||
movq 0x100(%rsp), %rbx /* restore RBX */
|
||||
movq 0x108(%rsp), %rbp /* restore RBP */
|
||||
|
||||
movq 0x110(%rsp), %rax /* restore hidden address of transport_t */
|
||||
|
||||
leaq 0x118(%rsp), %rsp /* prepare stack */
|
||||
|
||||
/* restore return-address */
|
||||
popq %r10
|
||||
|
||||
/* transport_t returned in RAX */
|
||||
/* return parent fcontext_t */
|
||||
movq %r9, 0x0(%rax)
|
||||
/* return data */
|
||||
movq %r8, 0x8(%rax)
|
||||
|
||||
/* transport_t as 1.arg of context-function */
|
||||
movq %rax, %rcx
|
||||
|
||||
/* indirect jump to context */
|
||||
jmp *%r10
|
||||
.seh_endproc
|
||||
|
||||
.section .drectve
|
||||
.ascii " -export:\"jump_fcontext\""
|
209
third_party/context/src/asm/jump_x86_64_ms_pe_gas.asm
vendored
Normal file
209
third_party/context/src/asm/jump_x86_64_ms_pe_gas.asm
vendored
Normal file
@ -0,0 +1,209 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
Copyright Thomas Sailer 2013.
|
||||
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 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | SEE registers (XMM6-XMM15) | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0x20 | 0x24 | 0x28 | 0x2c | 0x30 | 0x34 | 0x38 | 0x3c | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | SEE registers (XMM6-XMM15) | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0xe40 | 0x44 | 0x48 | 0x4c | 0x50 | 0x54 | 0x58 | 0x5c | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | SEE registers (XMM6-XMM15) | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0x60 | 0x64 | 0x68 | 0x6c | 0x70 | 0x74 | 0x78 | 0x7c | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | SEE registers (XMM6-XMM15) | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 32 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0x80 | 0x84 | 0x88 | 0x8c | 0x90 | 0x94 | 0x98 | 0x9c | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | SEE registers (XMM6-XMM15) | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0xa0 | 0xa4 | 0xa8 | 0xac | 0xb0 | 0xb4 | 0xb8 | 0xbc | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | fc_mxcsr|fc_x87_cw| <alignment> | fbr_strg | fc_dealloc | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0xc0 | 0xc4 | 0xc8 | 0xcc | 0xd0 | 0xd4 | 0xd8 | 0xdc | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | limit | base | R12 | R13 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0xe0 | 0xe4 | 0xe8 | 0xec | 0xf0 | 0xf4 | 0xf8 | 0xfc | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | R14 | R15 | RDI | RSI | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0x100 | 0x104 | 0x108 | 0x10c | 0x110 | 0x114 | 0x118 | 0x11c | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | RBX | RBP | hidden | RIP | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0x120 | 0x124 | 0x128 | 0x12c | 0x130 | 0x134 | 0x138 | 0x13c | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | parameter area | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0x140 | 0x144 | 0x148 | 0x14c | 0x150 | 0x154 | 0x158 | 0x15c | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | FCTX | DATA | | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
**************************************************************************************/
|
||||
|
||||
.file "jump_x86_64_ms_pe_gas.asm"
|
||||
.text
|
||||
.p2align 4,,15
|
||||
.globl jump_fcontext
|
||||
.def jump_fcontext; .scl 2; .type 32; .endef
|
||||
.seh_proc jump_fcontext
|
||||
jump_fcontext:
|
||||
.seh_endprologue
|
||||
|
||||
leaq -0x118(%rsp), %rsp /* prepare stack */
|
||||
|
||||
#if !defined(BOOST_USE_TSX)
|
||||
/* save XMM storage */
|
||||
movaps %xmm6, 0x0(%rsp)
|
||||
movaps %xmm7, 0x10(%rsp)
|
||||
movaps %xmm8, 0x20(%rsp)
|
||||
movaps %xmm9, 0x30(%rsp)
|
||||
movaps %xmm10, 0x40(%rsp)
|
||||
movaps %xmm11, 0x50(%rsp)
|
||||
movaps %xmm12, 0x60(%rsp)
|
||||
movaps %xmm13, 0x70(%rsp)
|
||||
movaps %xmm14, 0x80(%rsp)
|
||||
movaps %xmm15, 0x90(%rsp)
|
||||
stmxcsr 0xa0(%rsp) /* save MMX control- and status-word */
|
||||
fnstcw 0xa4(%rsp) /* save x87 control-word */
|
||||
#endif
|
||||
|
||||
/* load NT_TIB */
|
||||
movq %gs:(0x30), %r10
|
||||
/* save fiber local storage */
|
||||
movq 0x20(%r10), %rax
|
||||
movq %rax, 0xb0(%rsp)
|
||||
/* save current deallocation stack */
|
||||
movq 0x1478(%r10), %rax
|
||||
movq %rax, 0xb8(%rsp)
|
||||
/* save current stack limit */
|
||||
movq 0x10(%r10), %rax
|
||||
movq %rax, 0xc0(%rsp)
|
||||
/* save current stack base */
|
||||
movq 0x08(%r10), %rax
|
||||
movq %rax, 0xc8(%rsp)
|
||||
|
||||
movq %r12, 0xd0(%rsp) /* save R12 */
|
||||
movq %r13, 0xd8(%rsp) /* save R13 */
|
||||
movq %r14, 0xe0(%rsp) /* save R14 */
|
||||
movq %r15, 0xe8(%rsp) /* save R15 */
|
||||
movq %rdi, 0xf0(%rsp) /* save RDI */
|
||||
movq %rsi, 0xf8(%rsp) /* save RSI */
|
||||
movq %rbx, 0x100(%rsp) /* save RBX */
|
||||
movq %rbp, 0x108(%rsp) /* save RBP */
|
||||
|
||||
movq %rcx, 0x110(%rsp) /* save hidden address of transport_t */
|
||||
|
||||
/* preserve RSP (pointing to context-data) in R9 */
|
||||
movq %rsp, %r9
|
||||
|
||||
/* restore RSP (pointing to context-data) from RDX */
|
||||
movq %rdx, %rsp
|
||||
|
||||
#if !defined(BOOST_USE_TSX)
|
||||
/* restore XMM storage */
|
||||
movaps 0x0(%rsp), %xmm6
|
||||
movaps 0x10(%rsp), %xmm7
|
||||
movaps 0x20(%rsp), %xmm8
|
||||
movaps 0x30(%rsp), %xmm9
|
||||
movaps 0x40(%rsp), %xmm10
|
||||
movaps 0x50(%rsp), %xmm11
|
||||
movaps 0x60(%rsp), %xmm12
|
||||
movaps 0x70(%rsp), %xmm13
|
||||
movaps 0x80(%rsp), %xmm14
|
||||
movaps 0x90(%rsp), %xmm15
|
||||
ldmxcsr 0xa0(%rsp) /* restore MMX control- and status-word */
|
||||
fldcw 0xa4(%rsp) /* restore x87 control-word */
|
||||
#endif
|
||||
|
||||
/* load NT_TIB */
|
||||
movq %gs:(0x30), %r10
|
||||
/* restore fiber local storage */
|
||||
movq 0xb0(%rsp), %rax
|
||||
movq %rax, 0x20(%r10)
|
||||
/* restore current deallocation stack */
|
||||
movq 0xb8(%rsp), %rax
|
||||
movq %rax, 0x1478(%r10)
|
||||
/* restore current stack limit */
|
||||
movq 0xc0(%rsp), %rax
|
||||
movq %rax, 0x10(%r10)
|
||||
/* restore current stack base */
|
||||
movq 0xc8(%rsp), %rax
|
||||
movq %rax, 0x08(%r10)
|
||||
|
||||
movq 0xd0(%rsp), %r12 /* restore R12 */
|
||||
movq 0xd8(%rsp), %r13 /* restore R13 */
|
||||
movq 0xe0(%rsp), %r14 /* restore R14 */
|
||||
movq 0xe8(%rsp), %r15 /* restore R15 */
|
||||
movq 0xf0(%rsp), %rdi /* restore RDI */
|
||||
movq 0xf8(%rsp), %rsi /* restore RSI */
|
||||
movq 0x100(%rsp), %rbx /* restore RBX */
|
||||
movq 0x108(%rsp), %rbp /* restore RBP */
|
||||
|
||||
movq 0x110(%rsp), %rax /* restore hidden address of transport_t */
|
||||
|
||||
leaq 0x118(%rsp), %rsp /* prepare stack */
|
||||
|
||||
/* restore return-address */
|
||||
popq %r10
|
||||
|
||||
/* transport_t returned in RAX */
|
||||
/* return parent fcontext_t */
|
||||
movq %r9, 0x0(%rax)
|
||||
/* return data */
|
||||
movq %r8, 0x8(%rax)
|
||||
|
||||
/* transport_t as 1.arg of context-function */
|
||||
movq %rax, %rcx
|
||||
|
||||
/* indirect jump to context */
|
||||
jmp *%r10
|
||||
.seh_endproc
|
||||
|
||||
.section .drectve
|
||||
.ascii " -export:\"jump_fcontext\""
|
205
third_party/context/src/asm/jump_x86_64_ms_pe_masm.asm
vendored
Normal file
205
third_party/context/src/asm/jump_x86_64_ms_pe_masm.asm
vendored
Normal file
@ -0,0 +1,205 @@
|
||||
|
||||
; Copyright Oliver Kowalke 2009.
|
||||
; 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 |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | SEE registers (XMM6-XMM15) |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | 0x20 | 0x24 | 0x28 | 0x2c | 0x30 | 0x34 | 0x38 | 0x3c |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | SEE registers (XMM6-XMM15) |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | 0xe40 | 0x44 | 0x48 | 0x4c | 0x50 | 0x54 | 0x58 | 0x5c |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | SEE registers (XMM6-XMM15) |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | 0x60 | 0x64 | 0x68 | 0x6c | 0x70 | 0x74 | 0x78 | 0x7c |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | SEE registers (XMM6-XMM15) |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | 32 | 32 | 33 | 34 | 35 | 36 | 37 | 38 |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | 0x80 | 0x84 | 0x88 | 0x8c | 0x90 | 0x94 | 0x98 | 0x9c |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | SEE registers (XMM6-XMM15) |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | 0xa0 | 0xa4 | 0xa8 | 0xac | 0xb0 | 0xb4 | 0xb8 | 0xbc |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | fc_mxcsr|fc_x87_cw| <alignment> | fbr_strg | fc_dealloc |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | 0xc0 | 0xc4 | 0xc8 | 0xcc | 0xd0 | 0xd4 | 0xd8 | 0xdc |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | limit | base | R12 | R13 |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | 0xe0 | 0xe4 | 0xe8 | 0xec | 0xf0 | 0xf4 | 0xf8 | 0xfc |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | R14 | R15 | RDI | RSI |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | 0x100 | 0x104 | 0x108 | 0x10c | 0x110 | 0x114 | 0x118 | 0x11c |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | RBX | RBP | hidden | RIP |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | 0x120 | 0x124 | 0x128 | 0x12c | 0x130 | 0x134 | 0x138 | 0x13c |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | parameter area |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | 0x140 | 0x144 | 0x148 | 0x14c | 0x150 | 0x154 | 0x158 | 0x15c |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | FCTX | DATA | |
|
||||
; ----------------------------------------------------------------------------------
|
||||
|
||||
.code
|
||||
|
||||
jump_fcontext PROC BOOST_CONTEXT_EXPORT FRAME
|
||||
.endprolog
|
||||
|
||||
; prepare stack
|
||||
lea rsp, [rsp-0118h]
|
||||
|
||||
IFNDEF BOOST_USE_TSX
|
||||
; save XMM storage
|
||||
movaps [rsp], xmm6
|
||||
movaps [rsp+010h], xmm7
|
||||
movaps [rsp+020h], xmm8
|
||||
movaps [rsp+030h], xmm9
|
||||
movaps [rsp+040h], xmm10
|
||||
movaps [rsp+050h], xmm11
|
||||
movaps [rsp+060h], xmm12
|
||||
movaps [rsp+070h], xmm13
|
||||
movaps [rsp+080h], xmm14
|
||||
movaps [rsp+090h], xmm15
|
||||
; save MMX control- and status-word
|
||||
stmxcsr [rsp+0a0h]
|
||||
; save x87 control-word
|
||||
fnstcw [rsp+0a4h]
|
||||
ENDIF
|
||||
|
||||
; load NT_TIB
|
||||
mov r10, gs:[030h]
|
||||
; save fiber local storage
|
||||
mov rax, [r10+020h]
|
||||
mov [rsp+0b0h], rax
|
||||
; save current deallocation stack
|
||||
mov rax, [r10+01478h]
|
||||
mov [rsp+0b8h], rax
|
||||
; save current stack limit
|
||||
mov rax, [r10+010h]
|
||||
mov [rsp+0c0h], rax
|
||||
; save current stack base
|
||||
mov rax, [r10+08h]
|
||||
mov [rsp+0c8h], rax
|
||||
|
||||
mov [rsp+0d0h], r12 ; save R12
|
||||
mov [rsp+0d8h], r13 ; save R13
|
||||
mov [rsp+0e0h], r14 ; save R14
|
||||
mov [rsp+0e8h], r15 ; save R15
|
||||
mov [rsp+0f0h], rdi ; save RDI
|
||||
mov [rsp+0f8h], rsi ; save RSI
|
||||
mov [rsp+0100h], rbx ; save RBX
|
||||
mov [rsp+0108h], rbp ; save RBP
|
||||
|
||||
mov [rsp+0110h], rcx ; save hidden address of transport_t
|
||||
|
||||
; preserve RSP (pointing to context-data) in R9
|
||||
mov r9, rsp
|
||||
|
||||
; restore RSP (pointing to context-data) from RDX
|
||||
mov rsp, rdx
|
||||
|
||||
IFNDEF BOOST_USE_TSX
|
||||
; restore XMM storage
|
||||
movaps xmm6, [rsp]
|
||||
movaps xmm7, [rsp+010h]
|
||||
movaps xmm8, [rsp+020h]
|
||||
movaps xmm9, [rsp+030h]
|
||||
movaps xmm10, [rsp+040h]
|
||||
movaps xmm11, [rsp+050h]
|
||||
movaps xmm12, [rsp+060h]
|
||||
movaps xmm13, [rsp+070h]
|
||||
movaps xmm14, [rsp+080h]
|
||||
movaps xmm15, [rsp+090h]
|
||||
; restore MMX control- and status-word
|
||||
ldmxcsr [rsp+0a0h]
|
||||
; save x87 control-word
|
||||
fldcw [rsp+0a4h]
|
||||
ENDIF
|
||||
|
||||
; load NT_TIB
|
||||
mov r10, gs:[030h]
|
||||
; restore fiber local storage
|
||||
mov rax, [rsp+0b0h]
|
||||
mov [r10+020h], rax
|
||||
; restore current deallocation stack
|
||||
mov rax, [rsp+0b8h]
|
||||
mov [r10+01478h], rax
|
||||
; restore current stack limit
|
||||
mov rax, [rsp+0c0h]
|
||||
mov [r10+010h], rax
|
||||
; restore current stack base
|
||||
mov rax, [rsp+0c8h]
|
||||
mov [r10+08h], rax
|
||||
|
||||
mov r12, [rsp+0d0h] ; restore R12
|
||||
mov r13, [rsp+0d8h] ; restore R13
|
||||
mov r14, [rsp+0e0h] ; restore R14
|
||||
mov r15, [rsp+0e8h] ; restore R15
|
||||
mov rdi, [rsp+0f0h] ; restore RDI
|
||||
mov rsi, [rsp+0f8h] ; restore RSI
|
||||
mov rbx, [rsp+0100h] ; restore RBX
|
||||
mov rbp, [rsp+0108h] ; restore RBP
|
||||
|
||||
mov rax, [rsp+0110h] ; restore hidden address of transport_t
|
||||
|
||||
; prepare stack
|
||||
lea rsp, [rsp+0118h]
|
||||
|
||||
; load return-address
|
||||
pop r10
|
||||
|
||||
; transport_t returned in RAX
|
||||
; return parent fcontext_t
|
||||
mov [rax], r9
|
||||
; return data
|
||||
mov [rax+08h], r8
|
||||
|
||||
; transport_t as 1.arg of context-function
|
||||
mov rcx, rax
|
||||
|
||||
; indirect jump to context
|
||||
jmp r10
|
||||
jump_fcontext ENDP
|
||||
END
|
142
third_party/context/src/asm/jump_x86_64_sysv_elf_gas.S
vendored
Normal file
142
third_party/context/src/asm/jump_x86_64_sysv_elf_gas.S
vendored
Normal file
@ -0,0 +1,142 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
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 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | fc_mxcsr|fc_x87_cw| guard | R12 | R13 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0x20 | 0x24 | 0x28 | 0x2c | 0x30 | 0x34 | 0x38 | 0x3c | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | R14 | R15 | RBX | RBP | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0x40 | 0x44 | | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | RIP | | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* *
|
||||
****************************************************************************************/
|
||||
|
||||
# if defined __CET__
|
||||
# include <cet.h>
|
||||
# define SHSTK_ENABLED (__CET__ & 0x2)
|
||||
# define BOOST_CONTEXT_SHADOW_STACK (SHSTK_ENABLED && SHADOW_STACK_SYSCALL)
|
||||
# else
|
||||
# define _CET_ENDBR
|
||||
# endif
|
||||
.file "jump_x86_64_sysv_elf_gas.S"
|
||||
.text
|
||||
.globl jump_fcontext
|
||||
.type jump_fcontext,@function
|
||||
.align 16
|
||||
jump_fcontext:
|
||||
_CET_ENDBR
|
||||
leaq -0x40(%rsp), %rsp /* prepare stack */
|
||||
|
||||
#if !defined(BOOST_USE_TSX)
|
||||
stmxcsr (%rsp) /* save MMX control- and status-word */
|
||||
fnstcw 0x4(%rsp) /* save x87 control-word */
|
||||
#endif
|
||||
|
||||
#if defined(BOOST_CONTEXT_TLS_STACK_PROTECTOR)
|
||||
movq %fs:0x28, %rcx /* read stack guard from TLS record */
|
||||
movq %rcx, 0x8(%rsp) /* save stack guard */
|
||||
#endif
|
||||
|
||||
movq %r12, 0x10(%rsp) /* save R12 */
|
||||
movq %r13, 0x18(%rsp) /* save R13 */
|
||||
movq %r14, 0x20(%rsp) /* save R14 */
|
||||
movq %r15, 0x28(%rsp) /* save R15 */
|
||||
movq %rbx, 0x30(%rsp) /* save RBX */
|
||||
movq %rbp, 0x38(%rsp) /* save RBP */
|
||||
|
||||
#if BOOST_CONTEXT_SHADOW_STACK
|
||||
/* grow the stack to reserve space for shadow stack pointer(SSP) */
|
||||
leaq -0x8(%rsp), %rsp
|
||||
/* read the current SSP and store it */
|
||||
rdsspq %rcx
|
||||
movq %rcx, (%rsp)
|
||||
#endif
|
||||
|
||||
/* store RSP (pointing to context-data) in RAX */
|
||||
movq %rsp, %rax
|
||||
|
||||
/* restore RSP (pointing to context-data) from RDI */
|
||||
movq %rdi, %rsp
|
||||
|
||||
#if BOOST_CONTEXT_SHADOW_STACK
|
||||
/* first 8 bytes are SSP */
|
||||
movq (%rsp), %rcx
|
||||
leaq 0x8(%rsp), %rsp
|
||||
|
||||
/* Restore target(new) shadow stack */
|
||||
rstorssp -8(%rcx)
|
||||
/* restore token for previous shadow stack is pushed */
|
||||
/* on previous shadow stack after saveprevssp */
|
||||
saveprevssp
|
||||
|
||||
/* when return, jump_fcontext jump to restored return address */
|
||||
/* (r8) instead of RET. This miss of RET implies us to unwind */
|
||||
/* shadow stack accordingly. Otherwise mismatch occur */
|
||||
movq $1, %rcx
|
||||
incsspq %rcx
|
||||
#endif
|
||||
|
||||
movq 0x40(%rsp), %r8 /* restore return-address */
|
||||
|
||||
#if !defined(BOOST_USE_TSX)
|
||||
ldmxcsr (%rsp) /* restore MMX control- and status-word */
|
||||
fldcw 0x4(%rsp) /* restore x87 control-word */
|
||||
#endif
|
||||
|
||||
#if defined(BOOST_CONTEXT_TLS_STACK_PROTECTOR)
|
||||
movq 0x8(%rsp), %rdx /* load stack guard */
|
||||
movq %rdx, %fs:0x28 /* restore stack guard to TLS record */
|
||||
#endif
|
||||
|
||||
movq 0x10(%rsp), %r12 /* restore R12 */
|
||||
movq 0x18(%rsp), %r13 /* restore R13 */
|
||||
movq 0x20(%rsp), %r14 /* restore R14 */
|
||||
movq 0x28(%rsp), %r15 /* restore R15 */
|
||||
movq 0x30(%rsp), %rbx /* restore RBX */
|
||||
movq 0x38(%rsp), %rbp /* restore RBP */
|
||||
|
||||
leaq 0x48(%rsp), %rsp /* prepare stack */
|
||||
|
||||
/* return transfer_t from jump */
|
||||
#if !defined(_ILP32)
|
||||
/* RAX == fctx, RDX == data */
|
||||
movq %rsi, %rdx
|
||||
#else
|
||||
/* RAX == data:fctx */
|
||||
salq $32, %rsi
|
||||
orq %rsi, %rax
|
||||
#endif
|
||||
/* pass transfer_t as first arg in context function */
|
||||
#if !defined(_ILP32)
|
||||
/* RDI == fctx, RSI == data */
|
||||
#else
|
||||
/* RDI == data:fctx */
|
||||
#endif
|
||||
movq %rax, %rdi
|
||||
|
||||
/* indirect jump to context */
|
||||
jmp *%r8
|
||||
.size jump_fcontext,.-jump_fcontext
|
||||
|
||||
/* Mark that we don't need executable stack. */
|
||||
.section .note.GNU-stack,"",%progbits
|
75
third_party/context/src/asm/jump_x86_64_sysv_macho_gas.S
vendored
Normal file
75
third_party/context/src/asm/jump_x86_64_sysv_macho_gas.S
vendored
Normal file
@ -0,0 +1,75 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
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 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | fc_mxcsr|fc_x87_cw| R12 | R13 | R14 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0x20 | 0x24 | 0x28 | 0x2c | 0x30 | 0x34 | 0x38 | 0x3c | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | R15 | RBX | RBP | RIP | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* *
|
||||
****************************************************************************************/
|
||||
|
||||
.text
|
||||
.globl _jump_fcontext
|
||||
.align 8
|
||||
_jump_fcontext:
|
||||
leaq -0x38(%rsp), %rsp /* prepare stack */
|
||||
|
||||
#if !defined(BOOST_USE_TSX)
|
||||
stmxcsr (%rsp) /* save MMX control- and status-word */
|
||||
fnstcw 0x4(%rsp) /* save x87 control-word */
|
||||
#endif
|
||||
|
||||
movq %r12, 0x8(%rsp) /* save R12 */
|
||||
movq %r13, 0x10(%rsp) /* save R13 */
|
||||
movq %r14, 0x18(%rsp) /* save R14 */
|
||||
movq %r15, 0x20(%rsp) /* save R15 */
|
||||
movq %rbx, 0x28(%rsp) /* save RBX */
|
||||
movq %rbp, 0x30(%rsp) /* save RBP */
|
||||
|
||||
/* store RSP (pointing to context-data) in RAX */
|
||||
movq %rsp, %rax
|
||||
|
||||
/* restore RSP (pointing to context-data) from RDI */
|
||||
movq %rdi, %rsp
|
||||
|
||||
movq 0x38(%rsp), %r8 /* restore return-address */
|
||||
|
||||
#if !defined(BOOST_USE_TSX)
|
||||
ldmxcsr (%rsp) /* restore MMX control- and status-word */
|
||||
fldcw 0x4(%rsp) /* restore x87 control-word */
|
||||
#endif
|
||||
|
||||
movq 0x8(%rsp), %r12 /* restore R12 */
|
||||
movq 0x10(%rsp), %r13 /* restore R13 */
|
||||
movq 0x18(%rsp), %r14 /* restore R14 */
|
||||
movq 0x20(%rsp), %r15 /* restore R15 */
|
||||
movq 0x28(%rsp), %rbx /* restore RBX */
|
||||
movq 0x30(%rsp), %rbp /* restore RBP */
|
||||
|
||||
leaq 0x40(%rsp), %rsp /* prepare stack */
|
||||
|
||||
/* return transfer_t from jump */
|
||||
/* RAX == fctx, RDX == data */
|
||||
movq %rsi, %rdx
|
||||
/* pass transfer_t as first arg in context function */
|
||||
/* RDI == fctx, RSI == data */
|
||||
movq %rax, %rdi
|
||||
|
||||
/* indirect jump to context */
|
||||
jmp *%r8
|
85
third_party/context/src/asm/make_arm64_aapcs_elf_gas.S
vendored
Normal file
85
third_party/context/src/asm/make_arm64_aapcs_elf_gas.S
vendored
Normal file
@ -0,0 +1,85 @@
|
||||
/*
|
||||
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 "make_arm64_aapcs_elf_gas.S"
|
||||
.text
|
||||
.align 2
|
||||
.global make_fcontext
|
||||
.type make_fcontext, %function
|
||||
make_fcontext:
|
||||
# shift address in x0 (allocated stack) to lower 16 byte boundary
|
||||
and x0, x0, ~0xF
|
||||
|
||||
# reserve space for context-data on context-stack
|
||||
sub x0, x0, #0xb0
|
||||
|
||||
# third arg of make_fcontext() == address of context-function
|
||||
# store address as a PC to jump in
|
||||
str x2, [x0, #0xa0]
|
||||
|
||||
# save address of finish as return-address for context-function
|
||||
# will be entered after context-function returns (LR register)
|
||||
adr x1, finish
|
||||
str x1, [x0, #0x98]
|
||||
|
||||
ret x30 // return pointer to context-data (x0)
|
||||
|
||||
finish:
|
||||
# exit code is zero
|
||||
mov x0, #0
|
||||
# exit application
|
||||
bl _exit
|
||||
|
||||
.size make_fcontext,.-make_fcontext
|
||||
# Mark that we don't need executable stack.
|
||||
.section .note.GNU-stack,"",%progbits
|
83
third_party/context/src/asm/make_arm64_aapcs_macho_gas.S
vendored
Normal file
83
third_party/context/src/asm/make_arm64_aapcs_macho_gas.S
vendored
Normal file
@ -0,0 +1,83 @@
|
||||
/*
|
||||
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 | | | *
|
||||
* ------------------------------------------------- *
|
||||
* *
|
||||
*******************************************************/
|
||||
|
||||
.text
|
||||
.globl _make_fcontext
|
||||
.balign 16
|
||||
|
||||
_make_fcontext:
|
||||
; shift address in x0 (allocated stack) to lower 16 byte boundary
|
||||
and x0, x0, ~0xF
|
||||
|
||||
; reserve space for context-data on context-stack
|
||||
sub x0, x0, #0xb0
|
||||
|
||||
; third arg of make_fcontext() == address of context-function
|
||||
; store address as a PC to jump in
|
||||
str x2, [x0, #0xa0]
|
||||
|
||||
adr x1, finish
|
||||
|
||||
; save address of finish as return-address for context-function
|
||||
; will be entered after context-function returns (LR register)
|
||||
str x1, [x0, #0x98]
|
||||
|
||||
ret lr ; return pointer to context-data (x0)
|
||||
|
||||
finish:
|
||||
; exit code is zero
|
||||
mov x0, #0
|
||||
; exit application
|
||||
bl __exit
|
||||
|
||||
|
107
third_party/context/src/asm/make_arm64_aapcs_pe_armasm.asm
vendored
Normal file
107
third_party/context/src/asm/make_arm64_aapcs_pe_armasm.asm
vendored
Normal file
@ -0,0 +1,107 @@
|
||||
; 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 | 44 | 45 | 46 | 47 | *
|
||||
;* ------------------------------------------------- *
|
||||
;* | 0xa0| 0xa4| 0xa8| 0xac| 0xb0| 0xb4| 0xb8| 0xbc| *
|
||||
;* ------------------------------------------------- *
|
||||
;* | base | limit | dealloc | fiber data| *
|
||||
;* ------------------------------------------------- *
|
||||
;* ------------------------------------------------- *
|
||||
;* | 48 | 49 | 50 | 51 | | | *
|
||||
;* ------------------------------------------------- *
|
||||
;* | 0xc0| 0xc4| 0xc8| 0xcc| | | *
|
||||
;* ------------------------------------------------- *
|
||||
;* | PC | align | | | *
|
||||
;* ------------------------------------------------- *
|
||||
;* *
|
||||
;*******************************************************
|
||||
|
||||
AREA |.text|, CODE, READONLY, ALIGN=4, CODEALIGN
|
||||
EXPORT make_fcontext
|
||||
IMPORT _exit
|
||||
|
||||
make_fcontext proc
|
||||
; save stack top address to x3
|
||||
mov x3, x0
|
||||
|
||||
; shift address in x0 (allocated stack) to lower 16 byte boundary
|
||||
and x0, x0, ~0xF
|
||||
|
||||
; reserve space for context-data on context-stack
|
||||
sub x0, x0, #0xd0
|
||||
|
||||
; save top address of context_stack as 'base'
|
||||
str x3, [x0, #0xa0]
|
||||
; save bottom address of context-stack as 'limit' and 'dealloction stack'
|
||||
sub x3, x3, x1
|
||||
stp x3, x3, [x0, #0xa8]
|
||||
; save 0 as 'fiber data'
|
||||
str xzr, [x0, #0xb8]
|
||||
|
||||
; third arg of make_fcontext() == address of context-function
|
||||
; store address as x19 for trampoline
|
||||
str x2, [x0, #0x40]
|
||||
; store trampoline address as pc
|
||||
adr x2, trampoline
|
||||
str x2, [x0, #0xc0]
|
||||
|
||||
; save address of finish as return-address for context-function
|
||||
; will be entered after context-function returns (LR register)
|
||||
adr x1, finish
|
||||
str x1, [x0, #0x98]
|
||||
|
||||
ret x30 ; return pointer to context-data (x0)
|
||||
|
||||
trampoline
|
||||
stp fp, lr, [sp, #-0x10]!
|
||||
mov fp, sp
|
||||
blr x19
|
||||
|
||||
finish
|
||||
; exit code is zero
|
||||
mov x0, #0
|
||||
; exit application
|
||||
bl _exit
|
||||
ENDP
|
||||
END
|
81
third_party/context/src/asm/make_arm_aapcs_elf_gas.S
vendored
Normal file
81
third_party/context/src/asm/make_arm_aapcs_elf_gas.S
vendored
Normal file
@ -0,0 +1,81 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
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| *
|
||||
* ------------------------------------------------- *
|
||||
* | s16 | s17 | s18 | s19 | s20 | s21 | s22 | s23 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
|
||||
* ------------------------------------------------- *
|
||||
* | s24 | s25 | s26 | s27 | s28 | s29 | s30 | s31 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0x40| 0x44| 0x48| 0x4c| 0x50| 0x54| 0x58| 0x5c| *
|
||||
* ------------------------------------------------- *
|
||||
* |hiddn| v1 | v2 | v3 | v4 | v5 | v6 | v7 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0x60| 0x64| 0x68| 0x6c| 0x70| 0x74| 0x78| 0x7c| *
|
||||
* ------------------------------------------------- *
|
||||
* | v8 | lr | pc | FCTX| DATA| | *
|
||||
* ------------------------------------------------- *
|
||||
* *
|
||||
*******************************************************/
|
||||
|
||||
.file "make_arm_aapcs_elf_gas.S"
|
||||
.text
|
||||
.globl make_fcontext
|
||||
.align 2
|
||||
.type make_fcontext,%function
|
||||
.syntax unified
|
||||
make_fcontext:
|
||||
@ shift address in A1 to lower 16 byte boundary
|
||||
bic a1, a1, #15
|
||||
|
||||
@ reserve space for context-data on context-stack
|
||||
sub a1, a1, #124
|
||||
|
||||
@ third arg of make_fcontext() == address of context-function
|
||||
str a3, [a1, #104]
|
||||
|
||||
@ compute address of returned transfer_t
|
||||
add a2, a1, #108
|
||||
mov a3, a2
|
||||
str a3, [a1, #64]
|
||||
|
||||
@ compute abs address of label finish
|
||||
adr a2, finish
|
||||
@ save address of finish as return-address for context-function
|
||||
@ will be entered after context-function returns
|
||||
str a2, [a1, #100]
|
||||
|
||||
#if (defined(__VFP_FP__) && !defined(__SOFTFP__))
|
||||
#endif
|
||||
|
||||
bx lr @ return pointer to context-data
|
||||
|
||||
finish:
|
||||
@ exit code is zero
|
||||
mov a1, #0
|
||||
@ exit application
|
||||
bl _exit@PLT
|
||||
.size make_fcontext,.-make_fcontext
|
||||
|
||||
@ Mark that we don't need executable stack.
|
||||
.section .note.GNU-stack,"",%progbits
|
71
third_party/context/src/asm/make_arm_aapcs_macho_gas.S
vendored
Normal file
71
third_party/context/src/asm/make_arm_aapcs_macho_gas.S
vendored
Normal file
@ -0,0 +1,71 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
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| *
|
||||
* ------------------------------------------------- *
|
||||
* | s16 | s17 | s18 | s19 | s20 | s21 | s22 | s23 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
|
||||
* ------------------------------------------------- *
|
||||
* | s24 | s25 | s26 | s27 | s28 | s29 | s30 | s31 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| *
|
||||
* ------------------------------------------------- *
|
||||
* | sjlj|hiddn| v1 | v2 | v3 | v4 | v5 | v6 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
|
||||
* ------------------------------------------------- *
|
||||
* | v7 | v8 | lr | pc | FCTX| DATA| | *
|
||||
* ------------------------------------------------- *
|
||||
* *
|
||||
*******************************************************/
|
||||
|
||||
.text
|
||||
.globl _make_fcontext
|
||||
.align 2
|
||||
_make_fcontext:
|
||||
@ shift address in A1 to lower 16 byte boundary
|
||||
bic a1, a1, #15
|
||||
|
||||
@ reserve space for context-data on context-stack
|
||||
sub a1, a1, #124
|
||||
|
||||
@ third arg of make_fcontext() == address of context-function
|
||||
str a3, [a1, #108]
|
||||
|
||||
@ compute address of returned transfer_t
|
||||
add a2, a1, #112
|
||||
mov a3, a2
|
||||
str a3, [a1, #68]
|
||||
|
||||
@ compute abs address of label finish
|
||||
adr a2, finish
|
||||
@ save address of finish as return-address for context-function
|
||||
@ will be entered after context-function returns
|
||||
str a2, [a1, #104]
|
||||
|
||||
bx lr @ return pointer to context-data
|
||||
|
||||
finish:
|
||||
@ exit code is zero
|
||||
mov a1, #0
|
||||
@ exit application
|
||||
bl __exit
|
77
third_party/context/src/asm/make_arm_aapcs_pe_armasm.asm
vendored
Normal file
77
third_party/context/src/asm/make_arm_aapcs_pe_armasm.asm
vendored
Normal file
@ -0,0 +1,77 @@
|
||||
;/*
|
||||
; Copyright Oliver Kowalke 2009.
|
||||
; 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| *
|
||||
; * ------------------------------------------------- *
|
||||
; * |deall|limit| base|hiddn| v1 | v2 | v3 | v4 | *
|
||||
; * ------------------------------------------------- *
|
||||
; * ------------------------------------------------- *
|
||||
; * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
; * ------------------------------------------------- *
|
||||
; * | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
|
||||
; * ------------------------------------------------- *
|
||||
; * | v5 | v6 | v7 | v8 | lr | pc | FCTX| DATA| *
|
||||
; * ------------------------------------------------- *
|
||||
; * *
|
||||
; *******************************************************
|
||||
|
||||
|
||||
AREA |.text|, CODE
|
||||
ALIGN 4
|
||||
EXPORT make_fcontext
|
||||
IMPORT _exit
|
||||
|
||||
make_fcontext PROC
|
||||
; first arg of make_fcontext() == top of context-stack
|
||||
; save top of context-stack (base) A4
|
||||
mov a4, a1
|
||||
|
||||
; shift address in A1 to lower 16 byte boundary
|
||||
bic a1, a1, #0x0f
|
||||
|
||||
; reserve space for context-data on context-stack
|
||||
sub a1, a1, #0x48
|
||||
|
||||
; save top address of context_stack as 'base'
|
||||
str a4, [a1, #0x8]
|
||||
; second arg of make_fcontext() == size of context-stack
|
||||
; compute bottom address of context-stack (limit)
|
||||
sub a4, a4, a2
|
||||
; save bottom address of context-stack as 'limit'
|
||||
str a4, [a1, #0x4]
|
||||
; save bottom address of context-stack as 'dealloction stack'
|
||||
str a4, [a1, #0x0]
|
||||
|
||||
; third arg of make_fcontext() == address of context-function
|
||||
str a3, [a1, #0x34]
|
||||
|
||||
; compute address of returned transfer_t
|
||||
add a2, a1, #0x38
|
||||
mov a3, a2
|
||||
str a3, [a1, #0xc]
|
||||
|
||||
; compute abs address of label finish
|
||||
adr a2, finish
|
||||
; save address of finish as return-address for context-function
|
||||
; will be entered after context-function returns
|
||||
str a2, [a1, #0x30]
|
||||
|
||||
bx lr ; return pointer to context-data
|
||||
|
||||
finish
|
||||
; exit code is zero
|
||||
mov a1, #0
|
||||
; exit application
|
||||
bl _exit
|
||||
|
||||
ENDP
|
||||
END
|
24
third_party/context/src/asm/make_combined_sysv_macho_gas.S
vendored
Normal file
24
third_party/context/src/asm/make_combined_sysv_macho_gas.S
vendored
Normal file
@ -0,0 +1,24 @@
|
||||
/*
|
||||
Copyright Sergue E. Leontiev 2013.
|
||||
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)
|
||||
*/
|
||||
|
||||
// Stub file for universal binary
|
||||
|
||||
#if defined(__i386__)
|
||||
#include "make_i386_sysv_macho_gas.S"
|
||||
#elif defined(__x86_64__)
|
||||
#include "make_x86_64_sysv_macho_gas.S"
|
||||
#elif defined(__ppc__)
|
||||
#include "make_ppc32_sysv_macho_gas.S"
|
||||
#elif defined(__ppc64__)
|
||||
#include "make_ppc64_sysv_macho_gas.S"
|
||||
#elif defined(__arm__)
|
||||
#include "make_arm_aapcs_macho_gas.S"
|
||||
#elif defined(__arm64__)
|
||||
#include "make_arm64_aapcs_macho_gas.S"
|
||||
#else
|
||||
#error "No arch's"
|
||||
#endif
|
153
third_party/context/src/asm/make_i386_ms_pe_clang_gas.S
vendored
Normal file
153
third_party/context/src/asm/make_i386_ms_pe_clang_gas.S
vendored
Normal file
@ -0,0 +1,153 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
Copyright Thomas Sailer 2013.
|
||||
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 | *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
* | 0h | 04h | 08h | 0ch | 010h | 014h | 018h | 01ch | *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
* | fc_mxcsr|fc_x87_cw| fc_strg |fc_deallo| limit | base | fc_seh | EDI | *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
* | 020h | 024h | 028h | 02ch | 030h | 034h | 038h | 03ch | *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
* | ESI | EBX | EBP | EIP | to | data | EH NXT |SEH HNDLR| *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
**************************************************************************************/
|
||||
|
||||
.file "make_i386_ms_pe_clang_gas.S"
|
||||
.text
|
||||
.p2align 4,,15
|
||||
|
||||
/* mark as using no unregistered SEH handlers */
|
||||
.globl @feat.00
|
||||
.def @feat.00; .scl 3; .type 0; .endef
|
||||
.set @feat.00, 1
|
||||
|
||||
.globl _make_fcontext
|
||||
.def _make_fcontext; .scl 2; .type 32; .endef
|
||||
_make_fcontext:
|
||||
/* first arg of make_fcontext() == top of context-stack */
|
||||
movl 0x04(%esp), %eax
|
||||
|
||||
/* reserve space for first argument of context-function */
|
||||
/* EAX might already point to a 16byte border */
|
||||
leal -0x8(%eax), %eax
|
||||
|
||||
/* shift address in EAX to lower 16 byte boundary */
|
||||
andl $-16, %eax
|
||||
|
||||
/* reserve space for context-data on context-stack */
|
||||
/* size for fc_mxcsr .. EIP + return-address for context-function */
|
||||
/* on context-function entry: (ESP -0x4) % 8 == 0 */
|
||||
/* additional space is required for SEH */
|
||||
leal -0x40(%eax), %eax
|
||||
|
||||
/* save MMX control- and status-word */
|
||||
stmxcsr (%eax)
|
||||
/* save x87 control-word */
|
||||
fnstcw 0x4(%eax)
|
||||
|
||||
/* first arg of make_fcontext() == top of context-stack */
|
||||
movl 0x4(%esp), %ecx
|
||||
/* save top address of context stack as 'base' */
|
||||
movl %ecx, 0x14(%eax)
|
||||
/* second arg of make_fcontext() == size of context-stack */
|
||||
movl 0x8(%esp), %edx
|
||||
/* negate stack size for LEA instruction (== substraction) */
|
||||
negl %edx
|
||||
/* compute bottom address of context stack (limit) */
|
||||
leal (%ecx,%edx), %ecx
|
||||
/* save bottom address of context-stack as 'limit' */
|
||||
movl %ecx, 0x10(%eax)
|
||||
/* save bottom address of context-stack as 'dealloction stack' */
|
||||
movl %ecx, 0xc(%eax)
|
||||
/* set fiber-storage to zero */
|
||||
xorl %ecx, %ecx
|
||||
movl %ecx, 0x8(%eax)
|
||||
|
||||
/* third arg of make_fcontext() == address of context-function */
|
||||
/* stored in EBX */
|
||||
movl 0xc(%esp), %ecx
|
||||
movl %ecx, 0x24(%eax)
|
||||
|
||||
/* compute abs address of label trampoline */
|
||||
movl $trampoline, %ecx
|
||||
/* save address of trampoline as return-address for context-function */
|
||||
/* will be entered after calling jump_fcontext() first time */
|
||||
movl %ecx, 0x2c(%eax)
|
||||
|
||||
/* compute abs address of label finish */
|
||||
movl $finish, %ecx
|
||||
/* save address of finish as return-address for context-function */
|
||||
/* will be entered after context-function returns */
|
||||
movl %ecx, 0x28(%eax)
|
||||
|
||||
/* traverse current seh chain to get the last exception handler installed by Windows */
|
||||
/* note that on Windows Server 2008 and 2008 R2, SEHOP is activated by default */
|
||||
/* the exception handler chain is tested for the presence of ntdll.dll!FinalExceptionHandler */
|
||||
/* at its end by RaiseException all seh andlers are disregarded if not present and the */
|
||||
/* program is aborted */
|
||||
/* load NT_TIB into ECX */
|
||||
movl %fs:(0x0), %ecx
|
||||
|
||||
walk:
|
||||
/* load 'next' member of current SEH into EDX */
|
||||
movl (%ecx), %edx
|
||||
/* test if 'next' of current SEH is last (== 0xffffffff) */
|
||||
incl %edx
|
||||
jz found
|
||||
decl %edx
|
||||
/* exchange content; ECX contains address of next SEH */
|
||||
xchgl %ecx, %edx
|
||||
/* inspect next SEH */
|
||||
jmp walk
|
||||
|
||||
found:
|
||||
/* load 'handler' member of SEH == address of last SEH handler installed by Windows */
|
||||
movl 0x04(%ecx), %ecx
|
||||
/* save address in ECX as SEH handler for context */
|
||||
movl %ecx, 0x3c(%eax)
|
||||
/* set ECX to -1 */
|
||||
movl $0xffffffff, %ecx
|
||||
/* save ECX as next SEH item */
|
||||
movl %ecx, 0x38(%eax)
|
||||
/* load address of next SEH item */
|
||||
leal 0x38(%eax), %ecx
|
||||
/* save next SEH */
|
||||
movl %ecx, 0x18(%eax)
|
||||
|
||||
/* return pointer to context-data */
|
||||
ret
|
||||
|
||||
trampoline:
|
||||
/* move transport_t for entering context-function */
|
||||
/* FCTX == EAX, DATA == EDX */
|
||||
movl %eax, (%esp)
|
||||
movl %edx, 0x4(%esp)
|
||||
/* label finish as return-address */
|
||||
pushl %ebp
|
||||
/* jump to context-function */
|
||||
jmp *%ebx
|
||||
|
||||
finish:
|
||||
/* ESP points to same address as ESP on entry of context function + 0x4 */
|
||||
xorl %eax, %eax
|
||||
/* exit code is zero */
|
||||
movl %eax, (%esp)
|
||||
/* exit application */
|
||||
call __exit
|
||||
hlt
|
||||
|
||||
.def __exit; .scl 2; .type 32; .endef /* standard C library function */
|
||||
|
||||
.section .drectve
|
||||
.ascii " -export:\"_make_fcontext\""
|
153
third_party/context/src/asm/make_i386_ms_pe_gas.asm
vendored
Normal file
153
third_party/context/src/asm/make_i386_ms_pe_gas.asm
vendored
Normal file
@ -0,0 +1,153 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
Copyright Thomas Sailer 2013.
|
||||
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 | *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
* | 0h | 04h | 08h | 0ch | 010h | 014h | 018h | 01ch | *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
* | fc_mxcsr|fc_x87_cw| fc_strg |fc_deallo| limit | base | fc_seh | EDI | *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
* | 020h | 024h | 028h | 02ch | 030h | 034h | 038h | 03ch | *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
* | ESI | EBX | EBP | EIP | to | data | EH NXT |SEH HNDLR| *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
**************************************************************************************/
|
||||
|
||||
.file "make_i386_ms_pe_gas.asm"
|
||||
.text
|
||||
.p2align 4,,15
|
||||
|
||||
/* mark as using no unregistered SEH handlers */
|
||||
.globl @feat.00
|
||||
.def @feat.00; .scl 3; .type 0; .endef
|
||||
.set @feat.00, 1
|
||||
|
||||
.globl _make_fcontext
|
||||
.def _make_fcontext; .scl 2; .type 32; .endef
|
||||
_make_fcontext:
|
||||
/* first arg of make_fcontext() == top of context-stack */
|
||||
movl 0x04(%esp), %eax
|
||||
|
||||
/* reserve space for first argument of context-function */
|
||||
/* EAX might already point to a 16byte border */
|
||||
leal -0x8(%eax), %eax
|
||||
|
||||
/* shift address in EAX to lower 16 byte boundary */
|
||||
andl $-16, %eax
|
||||
|
||||
/* reserve space for context-data on context-stack */
|
||||
/* size for fc_mxcsr .. EIP + return-address for context-function */
|
||||
/* on context-function entry: (ESP -0x4) % 8 == 0 */
|
||||
/* additional space is required for SEH */
|
||||
leal -0x40(%eax), %eax
|
||||
|
||||
/* save MMX control- and status-word */
|
||||
stmxcsr (%eax)
|
||||
/* save x87 control-word */
|
||||
fnstcw 0x4(%eax)
|
||||
|
||||
/* first arg of make_fcontext() == top of context-stack */
|
||||
movl 0x4(%esp), %ecx
|
||||
/* save top address of context stack as 'base' */
|
||||
movl %ecx, 0x14(%eax)
|
||||
/* second arg of make_fcontext() == size of context-stack */
|
||||
movl 0x8(%esp), %edx
|
||||
/* negate stack size for LEA instruction (== substraction) */
|
||||
negl %edx
|
||||
/* compute bottom address of context stack (limit) */
|
||||
leal (%ecx,%edx), %ecx
|
||||
/* save bottom address of context-stack as 'limit' */
|
||||
movl %ecx, 0x10(%eax)
|
||||
/* save bottom address of context-stack as 'dealloction stack' */
|
||||
movl %ecx, 0xc(%eax)
|
||||
/* set fiber-storage to zero */
|
||||
xorl %ecx, %ecx
|
||||
movl %ecx, 0x8(%eax)
|
||||
|
||||
/* third arg of make_fcontext() == address of context-function */
|
||||
/* stored in EBX */
|
||||
movl 0xc(%esp), %ecx
|
||||
movl %ecx, 0x24(%eax)
|
||||
|
||||
/* compute abs address of label trampoline */
|
||||
movl $trampoline, %ecx
|
||||
/* save address of trampoline as return-address for context-function */
|
||||
/* will be entered after calling jump_fcontext() first time */
|
||||
movl %ecx, 0x2c(%eax)
|
||||
|
||||
/* compute abs address of label finish */
|
||||
movl $finish, %ecx
|
||||
/* save address of finish as return-address for context-function */
|
||||
/* will be entered after context-function returns */
|
||||
movl %ecx, 0x28(%eax)
|
||||
|
||||
/* traverse current seh chain to get the last exception handler installed by Windows */
|
||||
/* note that on Windows Server 2008 and 2008 R2, SEHOP is activated by default */
|
||||
/* the exception handler chain is tested for the presence of ntdll.dll!FinalExceptionHandler */
|
||||
/* at its end by RaiseException all seh andlers are disregarded if not present and the */
|
||||
/* program is aborted */
|
||||
/* load NT_TIB into ECX */
|
||||
movl %fs:(0x0), %ecx
|
||||
|
||||
walk:
|
||||
/* load 'next' member of current SEH into EDX */
|
||||
movl (%ecx), %edx
|
||||
/* test if 'next' of current SEH is last (== 0xffffffff) */
|
||||
incl %edx
|
||||
jz found
|
||||
decl %edx
|
||||
/* exchange content; ECX contains address of next SEH */
|
||||
xchgl %ecx, %edx
|
||||
/* inspect next SEH */
|
||||
jmp walk
|
||||
|
||||
found:
|
||||
/* load 'handler' member of SEH == address of last SEH handler installed by Windows */
|
||||
movl 0x04(%ecx), %ecx
|
||||
/* save address in ECX as SEH handler for context */
|
||||
movl %ecx, 0x3c(%eax)
|
||||
/* set ECX to -1 */
|
||||
movl $0xffffffff, %ecx
|
||||
/* save ECX as next SEH item */
|
||||
movl %ecx, 0x38(%eax)
|
||||
/* load address of next SEH item */
|
||||
leal 0x38(%eax), %ecx
|
||||
/* save next SEH */
|
||||
movl %ecx, 0x18(%eax)
|
||||
|
||||
/* return pointer to context-data */
|
||||
ret
|
||||
|
||||
trampoline:
|
||||
/* move transport_t for entering context-function */
|
||||
/* FCTX == EAX, DATA == EDX */
|
||||
movl %eax, (%esp)
|
||||
movl %edx, 0x4(%esp)
|
||||
/* label finish as return-address */
|
||||
pushl %ebp
|
||||
/* jump to context-function */
|
||||
jmp *%ebx
|
||||
|
||||
finish:
|
||||
/* ESP points to same address as ESP on entry of context function + 0x4 */
|
||||
xorl %eax, %eax
|
||||
/* exit code is zero */
|
||||
movl %eax, (%esp)
|
||||
/* exit application */
|
||||
call __exit
|
||||
hlt
|
||||
|
||||
.def __exit; .scl 2; .type 32; .endef /* standard C library function */
|
||||
|
||||
.section .drectve
|
||||
.ascii " -export:\"make_fcontext\""
|
140
third_party/context/src/asm/make_i386_ms_pe_masm.asm
vendored
Normal file
140
third_party/context/src/asm/make_i386_ms_pe_masm.asm
vendored
Normal file
@ -0,0 +1,140 @@
|
||||
|
||||
; Copyright Oliver Kowalke 2009.
|
||||
; 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 |
|
||||
; ---------------------------------------------------------------------------------
|
||||
; | 0h | 04h | 08h | 0ch | 010h | 014h | 018h | 01ch |
|
||||
; ---------------------------------------------------------------------------------
|
||||
; | fc_mxcsr|fc_x87_cw| fc_strg |fc_deallo| limit | base | fc_seh | EDI |
|
||||
; ---------------------------------------------------------------------------------
|
||||
; ---------------------------------------------------------------------------------
|
||||
; | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|
||||
; ---------------------------------------------------------------------------------
|
||||
; | 020h | 024h | 028h | 02ch | 030h | 034h | 038h | 03ch |
|
||||
; ---------------------------------------------------------------------------------
|
||||
; | ESI | EBX | EBP | EIP | to | data | EH NXT |SEH HNDLR|
|
||||
; ---------------------------------------------------------------------------------
|
||||
|
||||
.386
|
||||
.XMM
|
||||
.model flat, c
|
||||
; standard C library function
|
||||
_exit PROTO, value:SDWORD
|
||||
.code
|
||||
|
||||
make_fcontext PROC BOOST_CONTEXT_EXPORT
|
||||
; first arg of make_fcontext() == top of context-stack
|
||||
mov eax, [esp+04h]
|
||||
|
||||
; reserve space for first argument of context-function
|
||||
; EAX might already point to a 16byte border
|
||||
lea eax, [eax-08h]
|
||||
|
||||
; shift address in EAX to lower 16 byte boundary
|
||||
and eax, -16
|
||||
|
||||
; reserve space for context-data on context-stack
|
||||
; on context-function entry: (ESP -0x4) % 8 == 0
|
||||
; additional space is required for SEH
|
||||
lea eax, [eax-040h]
|
||||
|
||||
; save MMX control- and status-word
|
||||
stmxcsr [eax]
|
||||
; save x87 control-word
|
||||
fnstcw [eax+04h]
|
||||
|
||||
; first arg of make_fcontext() == top of context-stack
|
||||
mov ecx, [esp+04h]
|
||||
; save top address of context stack as 'base'
|
||||
mov [eax+014h], ecx
|
||||
; second arg of make_fcontext() == size of context-stack
|
||||
mov edx, [esp+08h]
|
||||
; negate stack size for LEA instruction (== substraction)
|
||||
neg edx
|
||||
; compute bottom address of context stack (limit)
|
||||
lea ecx, [ecx+edx]
|
||||
; save bottom address of context-stack as 'limit'
|
||||
mov [eax+010h], ecx
|
||||
; save bottom address of context-stack as 'dealloction stack'
|
||||
mov [eax+0ch], ecx
|
||||
; set fiber-storage to zero
|
||||
xor ecx, ecx
|
||||
mov [eax+08h], ecx
|
||||
|
||||
; third arg of make_fcontext() == address of context-function
|
||||
; stored in EBX
|
||||
mov ecx, [esp+0ch]
|
||||
mov [eax+024h], ecx
|
||||
|
||||
; compute abs address of label trampoline
|
||||
mov ecx, trampoline
|
||||
; save address of trampoline as return-address for context-function
|
||||
; will be entered after calling jump_fcontext() first time
|
||||
mov [eax+02ch], ecx
|
||||
|
||||
; compute abs address of label finish
|
||||
mov ecx, finish
|
||||
; save address of finish as return-address for context-function in EBP
|
||||
; will be entered after context-function returns
|
||||
mov [eax+028h], ecx
|
||||
|
||||
; traverse current seh chain to get the last exception handler installed by Windows
|
||||
; note that on Windows Server 2008 and 2008 R2, SEHOP is activated by default
|
||||
; the exception handler chain is tested for the presence of ntdll.dll!FinalExceptionHandler
|
||||
; at its end by RaiseException all seh-handlers are disregarded if not present and the
|
||||
; program is aborted
|
||||
assume fs:nothing
|
||||
; load NT_TIB into ECX
|
||||
mov ecx, fs:[0h]
|
||||
assume fs:error
|
||||
|
||||
walk:
|
||||
; load 'next' member of current SEH into EDX
|
||||
mov edx, [ecx]
|
||||
; test if 'next' of current SEH is last (== 0xffffffff)
|
||||
inc edx
|
||||
jz found
|
||||
dec edx
|
||||
; exchange content; ECX contains address of next SEH
|
||||
xchg edx, ecx
|
||||
; inspect next SEH
|
||||
jmp walk
|
||||
|
||||
found:
|
||||
; load 'handler' member of SEH == address of last SEH handler installed by Windows
|
||||
mov ecx, [ecx+04h]
|
||||
; save address in ECX as SEH handler for context
|
||||
mov [eax+03ch], ecx
|
||||
; set ECX to -1
|
||||
mov ecx, 0ffffffffh
|
||||
; save ECX as next SEH item
|
||||
mov [eax+038h], ecx
|
||||
; load address of next SEH item
|
||||
lea ecx, [eax+038h]
|
||||
; save next SEH
|
||||
mov [eax+018h], ecx
|
||||
|
||||
ret ; return pointer to context-data
|
||||
|
||||
trampoline:
|
||||
; move transport_t for entering context-function
|
||||
; FCTX == EAX, DATA == EDX
|
||||
mov [esp], eax
|
||||
mov [esp+04h], edx
|
||||
push ebp
|
||||
; jump to context-function
|
||||
jmp ebx
|
||||
|
||||
finish:
|
||||
; exit code is zero
|
||||
xor eax, eax
|
||||
mov [esp], eax
|
||||
; exit application
|
||||
call _exit
|
||||
hlt
|
||||
make_fcontext ENDP
|
||||
END
|
113
third_party/context/src/asm/make_i386_sysv_elf_gas.S
vendored
Normal file
113
third_party/context/src/asm/make_i386_sysv_elf_gas.S
vendored
Normal file
@ -0,0 +1,113 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
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 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | fc_mxcsr|fc_x87_cw| guard | EDI | ESI | EBX | EBP | EIP | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0x20 | 0x24 | 0x28 | | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | hidden | to | data | | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* *
|
||||
****************************************************************************************/
|
||||
|
||||
.file "make_i386_sysv_elf_gas.S"
|
||||
.text
|
||||
.globl make_fcontext
|
||||
.align 2
|
||||
.type make_fcontext,@function
|
||||
make_fcontext:
|
||||
/* first arg of make_fcontext() == top of context-stack */
|
||||
movl 0x4(%esp), %eax
|
||||
|
||||
/* reserve space for first argument of context-function
|
||||
eax might already point to a 16byte border */
|
||||
leal -0x8(%eax), %eax
|
||||
|
||||
/* shift address in EAX to lower 16 byte boundary */
|
||||
andl $-16, %eax
|
||||
|
||||
/* reserve space for context-data on context-stack, and align the stack */
|
||||
leal -0x34(%eax), %eax
|
||||
|
||||
/* third arg of make_fcontext() == address of context-function */
|
||||
/* stored in EBX */
|
||||
movl 0xc(%esp), %ecx
|
||||
movl %ecx, 0x14(%eax)
|
||||
|
||||
/* save MMX control- and status-word */
|
||||
stmxcsr (%eax)
|
||||
/* save x87 control-word */
|
||||
fnstcw 0x4(%eax)
|
||||
|
||||
#if defined(BOOST_CONTEXT_TLS_STACK_PROTECTOR)
|
||||
/* save stack guard */
|
||||
movl %gs:0x14, %ecx /* read stack guard from TLS record */
|
||||
movl %ecx, 0x8(%eax) /* save stack guard */
|
||||
#endif
|
||||
|
||||
/* return transport_t */
|
||||
/* FCTX == EDI, DATA == ESI */
|
||||
leal 0xc(%eax), %ecx
|
||||
movl %ecx, 0x20(%eax)
|
||||
|
||||
/* compute abs address of label trampoline */
|
||||
call 1f
|
||||
/* address of trampoline 1 */
|
||||
1: popl %ecx
|
||||
/* compute abs address of label trampoline */
|
||||
addl $trampoline-1b, %ecx
|
||||
/* save address of trampoline as return address */
|
||||
/* will be entered after calling jump_fcontext() first time */
|
||||
movl %ecx, 0x1c(%eax)
|
||||
|
||||
/* compute abs address of label finish */
|
||||
call 2f
|
||||
/* address of label 2 */
|
||||
2: popl %ecx
|
||||
/* compute abs address of label finish */
|
||||
addl $finish-2b, %ecx
|
||||
/* save address of finish as return-address for context-function */
|
||||
/* will be entered after context-function returns */
|
||||
movl %ecx, 0x18(%eax)
|
||||
|
||||
ret /* return pointer to context-data */
|
||||
|
||||
trampoline:
|
||||
/* move transport_t for entering context-function */
|
||||
movl %edi, (%esp)
|
||||
movl %esi, 0x4(%esp)
|
||||
pushl %ebp
|
||||
/* jump to context-function */
|
||||
jmp *%ebx
|
||||
|
||||
finish:
|
||||
call 3f
|
||||
/* address of label 3 */
|
||||
3: popl %ebx
|
||||
/* compute address of GOT and store it in EBX */
|
||||
addl $_GLOBAL_OFFSET_TABLE_+[.-3b], %ebx
|
||||
|
||||
/* exit code is zero */
|
||||
xorl %eax, %eax
|
||||
movl %eax, (%esp)
|
||||
/* exit application */
|
||||
call _exit@PLT
|
||||
hlt
|
||||
.size make_fcontext,.-make_fcontext
|
||||
|
||||
/* Mark that we don't need executable stack. */
|
||||
.section .note.GNU-stack,"",%progbits
|
90
third_party/context/src/asm/make_i386_sysv_macho_gas.S
vendored
Normal file
90
third_party/context/src/asm/make_i386_sysv_macho_gas.S
vendored
Normal file
@ -0,0 +1,90 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
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 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | fc_mxcsr|fc_x87_cw| EDI | ESI | EBX | EBP | EIP | to | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0x20 | | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | data | | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* *
|
||||
****************************************************************************************/
|
||||
|
||||
.text
|
||||
.globl _make_fcontext
|
||||
.align 2
|
||||
_make_fcontext:
|
||||
/* first arg of make_fcontext() == top of context-stack */
|
||||
movl 0x4(%esp), %eax
|
||||
|
||||
/* reserve space for first argument of context-function
|
||||
eax might already point to a 16byte border */
|
||||
leal -0x8(%eax), %eax
|
||||
|
||||
/* shift address in EAX to lower 16 byte boundary */
|
||||
andl $-16, %eax
|
||||
|
||||
/* reserve space for context-data on context-stack, and align the stack */
|
||||
leal -0x34(%eax), %eax
|
||||
|
||||
/* third arg of make_fcontext() == address of context-function */
|
||||
/* stored in EBX */
|
||||
movl 0xc(%esp), %ecx
|
||||
movl %ecx, 0x10(%eax)
|
||||
|
||||
/* save MMX control- and status-word */
|
||||
stmxcsr (%eax)
|
||||
/* save x87 control-word */
|
||||
fnstcw 0x4(%eax)
|
||||
|
||||
/* compute abs address of label trampoline */
|
||||
call 1f
|
||||
/* address of trampoline 1 */
|
||||
1: popl %ecx
|
||||
/* compute abs address of label trampoline */
|
||||
addl $trampoline-1b, %ecx
|
||||
/* save address of trampoline as return address */
|
||||
/* will be entered after calling jump_fcontext() first time */
|
||||
movl %ecx, 0x18(%eax)
|
||||
|
||||
/* compute abs address of label finish */
|
||||
call 2f
|
||||
/* address of label 2 */
|
||||
2: popl %ecx
|
||||
/* compute abs address of label finish */
|
||||
addl $finish-2b, %ecx
|
||||
/* save address of finish as return-address for context-function */
|
||||
/* will be entered after context-function returns */
|
||||
movl %ecx, 0x14(%eax)
|
||||
|
||||
ret /* return pointer to context-data */
|
||||
|
||||
trampoline:
|
||||
/* move transport_t for entering context-function */
|
||||
movl %eax, (%esp)
|
||||
movl %edx, 0x4(%esp)
|
||||
pushl %ebp
|
||||
/* jump to context-function */
|
||||
jmp *%ebx
|
||||
|
||||
finish:
|
||||
/* exit code is zero */
|
||||
xorl %eax, %eax
|
||||
movl %eax, (%esp)
|
||||
/* exit application */
|
||||
call __exit
|
||||
hlt
|
16
third_party/context/src/asm/make_i386_x86_64_sysv_macho_gas.S
vendored
Normal file
16
third_party/context/src/asm/make_i386_x86_64_sysv_macho_gas.S
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
/*
|
||||
Copyright Sergue E. Leontiev 2013.
|
||||
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)
|
||||
*/
|
||||
|
||||
// Stub file for universal binary
|
||||
|
||||
#if defined(__i386__)
|
||||
#include "make_i386_sysv_macho_gas.S"
|
||||
#elif defined(__x86_64__)
|
||||
#include "make_x86_64_sysv_macho_gas.S"
|
||||
#else
|
||||
#error "No arch's"
|
||||
#endif
|
72
third_party/context/src/asm/make_loongarch64_sysv_elf_gas.S
vendored
Normal file
72
third_party/context/src/asm/make_loongarch64_sysv_elf_gas.S
vendored
Normal file
@ -0,0 +1,72 @@
|
||||
/*******************************************************
|
||||
* *
|
||||
* ------------------------------------------------- *
|
||||
* | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0 | 8 | 16 | 24 | *
|
||||
* ------------------------------------------------- *
|
||||
* | FS0 | FS1 | FS2 | FS3 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 40 | 48 | 56 | *
|
||||
* ------------------------------------------------- *
|
||||
* | FS4 | FS5 | FS6 | FS7 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 64 | 72 | 80 | 88 | *
|
||||
* ------------------------------------------------- *
|
||||
* | S0 | S1 | S2 | S3 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
|
||||
* ------------------------------------------------- *
|
||||
* | S4 | S5 | S6 | S7 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | *
|
||||
* ------------------------------------------------- *
|
||||
* | S8 | FP | RA | PC | *
|
||||
* ------------------------------------------------- *
|
||||
* *
|
||||
* *****************************************************/
|
||||
|
||||
.file "make_loongarch64_sysv_elf_gas.S"
|
||||
.text
|
||||
.globl make_fcontext
|
||||
.align 2
|
||||
.type make_fcontext,@function
|
||||
make_fcontext:
|
||||
# shift address in A0 to lower 16 byte boundary
|
||||
bstrins.d $a0, $zero, 3, 0
|
||||
|
||||
# reserve space for context-data on context-stack
|
||||
addi.d $a0, $a0, -160
|
||||
|
||||
# third arg of make_fcontext() == address of context-function
|
||||
st.d $a2, $a0, 152
|
||||
|
||||
# save address of finish as return-address for context-function
|
||||
# will be entered after context-function returns
|
||||
la.local $a4, finish
|
||||
st.d $a4, $a0, 144
|
||||
|
||||
# return pointer to context-data
|
||||
jr $ra
|
||||
|
||||
finish:
|
||||
# exit code is zero
|
||||
li.d $a0, 0
|
||||
# call _exit(0)
|
||||
b %plt(_exit)
|
||||
|
||||
.size make_fcontext, .-make_fcontext
|
||||
/* Mark that we don't need executable stack. */
|
||||
.section .note.GNU-stack,"",%progbits
|
97
third_party/context/src/asm/make_mips32_o32_elf_gas.S
vendored
Normal file
97
third_party/context/src/asm/make_mips32_o32_elf_gas.S
vendored
Normal file
@ -0,0 +1,97 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
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 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F20 | F22 | F24 | F26 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F28 | F30 | S0 | S1 | S2 | S3 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | *
|
||||
* ------------------------------------------------- *
|
||||
* | S4 | S5 | S6 | S7 | FP |hiddn| RA | PC | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
|
||||
* ------------------------------------------------- *
|
||||
* | ABI ARGS | GP | FCTX| DATA| | *
|
||||
* ------------------------------------------------- *
|
||||
* *
|
||||
* *****************************************************/
|
||||
|
||||
.file "make_mips32_o32_elf_gas.S"
|
||||
.text
|
||||
.globl make_fcontext
|
||||
.align 2
|
||||
.type make_fcontext,@function
|
||||
.ent make_fcontext
|
||||
make_fcontext:
|
||||
#ifdef __PIC__
|
||||
.set noreorder
|
||||
.cpload $t9
|
||||
.set reorder
|
||||
#endif
|
||||
# shift address in A0 to lower 16 byte boundary
|
||||
li $v1, -16 # 0xfffffffffffffff0
|
||||
and $v0, $v1, $a0
|
||||
|
||||
# reserve space for context-data on context-stack
|
||||
# includes an extra 32 bytes for:
|
||||
# - 16-byte incoming argument area required by mips ABI used when
|
||||
# jump_context calls the initial function
|
||||
# - 4 bytes to save our GP register used in finish
|
||||
# - 8 bytes to as space for transfer_t returned to finish
|
||||
# - 4 bytes for alignment
|
||||
addiu $v0, $v0, -128
|
||||
|
||||
# third arg of make_fcontext() == address of context-function
|
||||
sw $a2, 92($v0)
|
||||
# save global pointer in context-data
|
||||
sw $gp, 112($v0)
|
||||
|
||||
# compute address of returned transfer_t
|
||||
addiu $t0, $v0, 116
|
||||
sw $t0, 84($v0)
|
||||
|
||||
# compute abs address of label finish
|
||||
la $t9, finish
|
||||
# save address of finish as return-address for context-function
|
||||
# will be entered after context-function returns
|
||||
sw $t9, 88($v0)
|
||||
|
||||
jr $ra # return pointer to context-data
|
||||
|
||||
finish:
|
||||
# reload our gp register (needed for la)
|
||||
lw $gp, 16($sp)
|
||||
|
||||
# call _exit(0)
|
||||
# the previous function should have left the 16 bytes incoming argument
|
||||
# area on the stack which we reuse for calling _exit
|
||||
la $t9, _exit
|
||||
move $a0, $zero
|
||||
jr $t9
|
||||
.end make_fcontext
|
||||
.size make_fcontext, .-make_fcontext
|
||||
|
||||
/* Mark that we don't need executable stack. */
|
||||
.section .note.GNU-stack,"",%progbits
|
96
third_party/context/src/asm/make_mips64_n64_elf_gas.S
vendored
Normal file
96
third_party/context/src/asm/make_mips64_n64_elf_gas.S
vendored
Normal file
@ -0,0 +1,96 @@
|
||||
/*
|
||||
Copyright Jiaxun Yang 2018.
|
||||
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 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0 | 8 | 16 | 24 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F24 | F25 | F26 | F27 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 40 | 48 | 56 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F28 | F29 | F30 | F31 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 64 | 72 | 80 | 88 | *
|
||||
* ------------------------------------------------- *
|
||||
* | S0 | S1 | S2 | S3 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
|
||||
* ------------------------------------------------- *
|
||||
* | S4 | S5 | S6 | S7 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | *
|
||||
* ------------------------------------------------- *
|
||||
* | FP | GP | RA | PC | *
|
||||
* ------------------------------------------------- *
|
||||
* *
|
||||
* *****************************************************/
|
||||
|
||||
.file "make_mips64_n64_elf_gas.S"
|
||||
.text
|
||||
.globl make_fcontext
|
||||
.align 3
|
||||
.type make_fcontext,@function
|
||||
.ent make_fcontext
|
||||
make_fcontext:
|
||||
#ifdef __PIC__
|
||||
.set noreorder
|
||||
.cpload $t9
|
||||
.set reorder
|
||||
#endif
|
||||
# shift address in A0 to lower 16 byte boundary
|
||||
li $v1, 0xfffffffffffffff0
|
||||
and $v0, $v1, $a0
|
||||
|
||||
# reserve space for context-data on context-stack
|
||||
daddiu $v0, $v0, -160
|
||||
|
||||
# third arg of make_fcontext() == address of context-function
|
||||
sd $a2, 152($v0)
|
||||
# save global pointer in context-data
|
||||
sd $gp, 136($v0)
|
||||
|
||||
# psudo instruction compute abs address of label finish based on GP
|
||||
dla $t9, finish
|
||||
|
||||
# save address of finish as return-address for context-function
|
||||
# will be entered after context-function returns
|
||||
sd $t9, 144($v0)
|
||||
|
||||
jr $ra # return pointer to context-data
|
||||
|
||||
finish:
|
||||
# reload our gp register (needed for la)
|
||||
daddiu $t0, $sp, -160
|
||||
ld $gp, 136($t0)
|
||||
|
||||
# call _exit(0)
|
||||
# the previous function should have left the 16 bytes incoming argument
|
||||
# area on the stack which we reuse for calling _exit
|
||||
dla $t9, _exit
|
||||
move $a0, $zero
|
||||
jr $t9
|
||||
.end make_fcontext
|
||||
.size make_fcontext, .-make_fcontext
|
||||
|
||||
/* Mark that we don't need executable stack. */
|
||||
.section .note.GNU-stack,"",%progbits
|
16
third_party/context/src/asm/make_ppc32_ppc64_sysv_macho_gas.S
vendored
Normal file
16
third_party/context/src/asm/make_ppc32_ppc64_sysv_macho_gas.S
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
/*
|
||||
Copyright Sergue E. Leontiev 2013.
|
||||
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)
|
||||
*/
|
||||
|
||||
// Stub file for universal binary
|
||||
|
||||
#if defined(__ppc__)
|
||||
#include "make_ppc32_sysv_macho_gas.S"
|
||||
#elif defined(__ppc64__)
|
||||
#include "make_ppc64_sysv_macho_gas.S"
|
||||
#else
|
||||
#error "No arch's"
|
||||
#endif
|
146
third_party/context/src/asm/make_ppc32_sysv_elf_gas.S
vendored
Normal file
146
third_party/context/src/asm/make_ppc32_sysv_elf_gas.S
vendored
Normal file
@ -0,0 +1,146 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
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 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | *
|
||||
* ------------------------------------------------- *
|
||||
* |bchai|hiddn| fpscr | PC | CR | R14 | R15 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R16 | R17 | R18 | R19 | R20 | R21 | R22 | R23 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R24 | R25 | R26 | R27 | R28 | R29 | R30 | R31 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F14 | F15 | F16 | F17 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F18 | F19 | F20 | F21 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F22 | F23 | F24 | F25 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F26 | F27 | F28 | F29 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------|------------ *
|
||||
* | 224 | 228 | 232 | 236 | 240 | 244 | *
|
||||
* ------------------------|------------ *
|
||||
* | F30 | F31 |bchai| LR | *
|
||||
* ------------------------|------------ *
|
||||
* *
|
||||
*******************************************************/
|
||||
|
||||
.file "make_ppc32_sysv_elf_gas.S"
|
||||
.text
|
||||
.globl make_fcontext
|
||||
.align 2
|
||||
.type make_fcontext,@function
|
||||
make_fcontext:
|
||||
# save return address into R6
|
||||
mflr %r6
|
||||
|
||||
# first arg of make_fcontext() == top address of context-function
|
||||
# shift address in R3 to lower 16 byte boundary
|
||||
clrrwi %r3, %r3, 4
|
||||
|
||||
# reserve space on context-stack, including 16 bytes of linkage
|
||||
# and parameter area + 240 bytes of context-data (R1 % 16 == 0)
|
||||
subi %r3, %r3, 16 + 240
|
||||
|
||||
# third arg of make_fcontext() == address of context-function
|
||||
#ifdef __linux__
|
||||
# save context-function as PC
|
||||
stw %r5, 16(%r3)
|
||||
#else
|
||||
# save context-function for trampoline
|
||||
stw %r5, 248(%r3)
|
||||
#endif
|
||||
|
||||
# set back-chain to zero
|
||||
li %r0, 0
|
||||
stw %r0, 240(%r3)
|
||||
|
||||
# copy FPSCR to new context
|
||||
mffs %f0
|
||||
stfd %f0, 8(%r3)
|
||||
|
||||
#ifdef __linux__
|
||||
# set hidden pointer for returning transfer_t
|
||||
la %r0, 248(%r3)
|
||||
stw %r0, 4(%r3)
|
||||
#endif
|
||||
|
||||
# load address of label 1 into R4
|
||||
bl 1f
|
||||
1: mflr %r4
|
||||
#ifndef __linux__
|
||||
# compute abs address of trampoline, use as PC
|
||||
addi %r7, %r4, trampoline - 1b
|
||||
stw %r7, 16(%r3)
|
||||
#endif
|
||||
# compute abs address of label finish
|
||||
addi %r4, %r4, finish - 1b
|
||||
# save address of finish as return-address for context-function
|
||||
# will be entered after context-function returns
|
||||
stw %r4, 244(%r3)
|
||||
|
||||
# restore return address from R6
|
||||
mtlr %r6
|
||||
|
||||
blr # return pointer to context-data
|
||||
|
||||
#ifndef __linux__
|
||||
trampoline:
|
||||
# On systems other than Linux, jump_fcontext is returning the
|
||||
# transfer_t in R3:R4, but we need to pass transfer_t * R3 to
|
||||
# our context-function.
|
||||
lwz %r0, 8(%r1) # address of context-function
|
||||
mtctr %r0
|
||||
stw %r3, 8(%r1)
|
||||
stw %r4, 12(%r1)
|
||||
la %r3, 8(%r1) # address of transfer_t
|
||||
bctr
|
||||
#endif
|
||||
|
||||
finish:
|
||||
# Use the secure PLT for _exit(0). If we use the insecure BSS PLT
|
||||
# here, then the linker may use the insecure BSS PLT even if the
|
||||
# C++ compiler wanted the secure PLT.
|
||||
|
||||
# set R30 for secure PLT, large model
|
||||
bl 2f
|
||||
2: mflr %r30
|
||||
addis %r30, %r30, .Ltoc - 2b@ha
|
||||
addi %r30, %r30, .Ltoc - 2b@l
|
||||
|
||||
# call _exit(0) with special addend 0x8000 for large model
|
||||
li %r3, 0
|
||||
bl _exit + 0x8000@plt
|
||||
.size make_fcontext, .-make_fcontext
|
||||
|
||||
/* Provide the GOT pointer for secure PLT, large model. */
|
||||
.section .got2,"aw"
|
||||
.Ltoc = . + 0x8000
|
||||
|
||||
/* Mark that we don't need executable stack. */
|
||||
.section .note.GNU-stack,"",%progbits
|
154
third_party/context/src/asm/make_ppc32_sysv_macho_gas.S
vendored
Normal file
154
third_party/context/src/asm/make_ppc32_sysv_macho_gas.S
vendored
Normal file
@ -0,0 +1,154 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
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 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F14 | F15 | F16 | F17 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F18 | F19 | F20 | F21 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F22 | F23 | F24 | F25 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F26 | F27 | F28 | F29 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F30 | F31 | fpscr | R13 | R14 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R15 | R16 | R17 | R18 | R19 | R20 | R21 | R22 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R23 | R24 | R25 | R26 | R27 | R28 | R29 | R30 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R31 |hiddn| CR | LR | PC |bchai|linkr| FCTX| *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 64 | | *
|
||||
* ------------------------------------------------- *
|
||||
* | 256 | | *
|
||||
* ------------------------------------------------- *
|
||||
* | DATA| | *
|
||||
* ------------------------------------------------- *
|
||||
* *
|
||||
*******************************************************/
|
||||
|
||||
.text
|
||||
.globl _make_fcontext
|
||||
.align 2
|
||||
_make_fcontext:
|
||||
; save return address into R6
|
||||
mflr r6
|
||||
|
||||
; first arg of make_fcontext() == top address of context-function
|
||||
; shift address in R3 to lower 16 byte boundary
|
||||
clrrwi r3, r3, 4
|
||||
|
||||
; reserve space for context-data on context-stack
|
||||
; including 64 byte of linkage + parameter area (R1 % 16 == 0)
|
||||
subi r3, r3, 336
|
||||
|
||||
; third arg of make_fcontext() == address of context-function
|
||||
; store as trampoline's R31
|
||||
stw r5, 224(r3)
|
||||
|
||||
; set back-chain to zero
|
||||
li r0, 0
|
||||
stw r0, 244(r3)
|
||||
|
||||
mffs f0 ; load FPSCR
|
||||
stfd f0, 144(r3) ; save FPSCR
|
||||
|
||||
; compute address of returned transfer_t
|
||||
addi r0, r3, 252
|
||||
mr r4, r0
|
||||
stw r4, 228(r3)
|
||||
|
||||
; load LR
|
||||
mflr r0
|
||||
; jump to label 1
|
||||
bcl 20, 31, L1
|
||||
L1:
|
||||
; load LR into R4
|
||||
mflr r4
|
||||
; compute abs address of trampoline, use as PC
|
||||
addi r5, r4, lo16(Ltrampoline - L1)
|
||||
stw r5, 240(r3)
|
||||
; compute abs address of label finish
|
||||
addi r4, r4, lo16(Lfinish - L1)
|
||||
; restore LR
|
||||
mtlr r0
|
||||
; save address of finish as return-address for context-function
|
||||
; will be entered after context-function returns
|
||||
stw r4, 236(r3)
|
||||
|
||||
; restore return address from R6
|
||||
mtlr r6
|
||||
|
||||
blr ; return pointer to context-data
|
||||
|
||||
Ltrampoline:
|
||||
; We get R31 = context-function, R3 = address of transfer_t,
|
||||
; but we need to pass R3:R4 = transfer_t.
|
||||
mtctr r31
|
||||
lwz r4, 4(r3)
|
||||
lwz r3, 0(r3)
|
||||
bctr
|
||||
|
||||
Lfinish:
|
||||
; load address of _exit into CTR
|
||||
bcl 20, 31, L2
|
||||
L2:
|
||||
mflr r4
|
||||
addis r4, r4, ha16(Lexitp - L2)
|
||||
lwz r4, lo16(Lexitp - L2)(r4)
|
||||
mtctr r4
|
||||
; exit code is zero
|
||||
li r3, 0
|
||||
; exit application
|
||||
bctr
|
||||
|
||||
.const_data
|
||||
.align 2
|
||||
Lexitp:
|
||||
.long __exit
|
125
third_party/context/src/asm/make_ppc32_sysv_xcoff_gas.S
vendored
Normal file
125
third_party/context/src/asm/make_ppc32_sysv_xcoff_gas.S
vendored
Normal file
@ -0,0 +1,125 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
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 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | *
|
||||
* ------------------------------------------------- *
|
||||
* |bchai| CR | LR |compl| link| TOC | R14 | R15 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R16 | R17 | R18 | R19 | R20 | R21 | R22 | R23 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R24 | R25 | R26 | R27 | R28 | R29 | R30 | R31 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F14 | F15 | F16 | F17 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F18 | F19 | F20 | F21 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F22 | F23 | F24 | F25 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F26 | F27 | F28 | F29 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F30 | F31 | PC |hiddn| fpscr | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 256 | 260 | 264 | 268 | 272 | 276 | 280 | 284 | *
|
||||
* ------------------------------------------------- *
|
||||
* |bchai|savLR|savLR|compl| link|svTOC| FCTX| DATA| *
|
||||
* ------------------------------------------------- *
|
||||
* *
|
||||
*******************************************************/
|
||||
.file "make_ppc32_sysv_xcoff_xas.S"
|
||||
.toc
|
||||
.csect .text[PR]
|
||||
.align 2
|
||||
.globl make_fcontext[DS]
|
||||
.globl .make_fcontext
|
||||
.csect make_fcontext[DS]
|
||||
make_fcontext:
|
||||
.long .make_fcontext[PR], TOC[tc0], 0
|
||||
.csect .text[PR], 5
|
||||
.make_fcontext:
|
||||
# save return address into R6
|
||||
mflr 6
|
||||
|
||||
# first arg of make_fcontext() == top address of context-function
|
||||
# shift address in R3 to lower 16 byte boundary
|
||||
clrrwi 3, 3, 4
|
||||
|
||||
# reserve space for context-data on context-stack
|
||||
# including 32 byte of linkage + parameter area (R1 % 16 == 0)
|
||||
subi 3, 3, 288
|
||||
|
||||
# third arg of make_fcontext() == address of context-function descriptor
|
||||
lwz 4, 0(5)
|
||||
stw 4, 240(3)
|
||||
# save TOC of context-function
|
||||
lwz 4, 4(5)
|
||||
stw 4, 20(3)
|
||||
|
||||
# set back-chain to zero
|
||||
li 0, 0
|
||||
stw 0, 256(3)
|
||||
|
||||
# zero in r3 indicates first jump to context-function
|
||||
std 0, 244(3)
|
||||
|
||||
# load LR
|
||||
mflr 0
|
||||
# jump to label 1
|
||||
bl .Label
|
||||
.Label:
|
||||
# load LR into R4
|
||||
mflr 4
|
||||
# compute abs address of label .L_finish
|
||||
addi 4, 4, .L_finish - .Label
|
||||
# restore LR
|
||||
mtlr 0
|
||||
# save address of finish as return-address for context-function
|
||||
# will be entered after context-function returns
|
||||
stw 4, 8(3)
|
||||
|
||||
# restore return address from R6
|
||||
mtlr 6
|
||||
|
||||
blr # return pointer to context-data
|
||||
|
||||
.L_finish:
|
||||
# save return address into R0
|
||||
mflr 0
|
||||
# save return address on stack, set up stack frame
|
||||
stw 0, 4(1)
|
||||
# allocate stack space, R1 % 16 == 0
|
||||
stwu 1, -16(1)
|
||||
|
||||
# exit code is zero
|
||||
li 3, 0
|
||||
# exit application
|
||||
bl ._exit
|
||||
nop
|
177
third_party/context/src/asm/make_ppc64_sysv_elf_gas.S
vendored
Normal file
177
third_party/context/src/asm/make_ppc64_sysv_elf_gas.S
vendored
Normal file
@ -0,0 +1,177 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
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 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | *
|
||||
* ------------------------------------------------- *
|
||||
* | TOC | R14 | R15 | R16 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R17 | R18 | R19 | R20 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R21 | R22 | R23 | R24 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R25 | R26 | R27 | R28 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R29 | R30 | R31 | hidden | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | *
|
||||
* ------------------------------------------------- *
|
||||
* | CR | LR | PC | back-chain| *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | *
|
||||
* ------------------------------------------------- *
|
||||
* | cr saved | lr saved | compiler | linker | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | *
|
||||
* ------------------------------------------------- *
|
||||
* | TOC saved | FCTX | DATA | | *
|
||||
* ------------------------------------------------- *
|
||||
* *
|
||||
*******************************************************/
|
||||
|
||||
.file "make_ppc64_sysv_elf_gas.S"
|
||||
.globl make_fcontext
|
||||
#if _CALL_ELF == 2
|
||||
.text
|
||||
.align 2
|
||||
make_fcontext:
|
||||
addis %r2, %r12, .TOC.-make_fcontext@ha
|
||||
addi %r2, %r2, .TOC.-make_fcontext@l
|
||||
.localentry make_fcontext, . - make_fcontext
|
||||
#else
|
||||
.section ".opd","aw"
|
||||
.align 3
|
||||
make_fcontext:
|
||||
# ifdef _CALL_LINUX
|
||||
.quad .L.make_fcontext,.TOC.@tocbase,0
|
||||
.type make_fcontext,@function
|
||||
.text
|
||||
.align 2
|
||||
.L.make_fcontext:
|
||||
# else
|
||||
.hidden .make_fcontext
|
||||
.globl .make_fcontext
|
||||
.quad .make_fcontext,.TOC.@tocbase,0
|
||||
.size make_fcontext,24
|
||||
.type .make_fcontext,@function
|
||||
.text
|
||||
.align 2
|
||||
.make_fcontext:
|
||||
# endif
|
||||
#endif
|
||||
# save return address into R6
|
||||
mflr %r6
|
||||
|
||||
# first arg of make_fcontext() == top address of context-stack
|
||||
# shift address in R3 to lower 16 byte boundary
|
||||
clrrdi %r3, %r3, 4
|
||||
|
||||
# reserve space for context-data on context-stack
|
||||
# including 64 byte of linkage + parameter area (R1 % 16 == 0)
|
||||
subi %r3, %r3, 248
|
||||
|
||||
# third arg of make_fcontext() == address of context-function
|
||||
# entry point (ELFv2) or descriptor (ELFv1)
|
||||
#if _CALL_ELF == 2
|
||||
# save address of context-function entry point
|
||||
std %r5, 176(%r3)
|
||||
#else
|
||||
# save address of context-function entry point
|
||||
ld %r4, 0(%r5)
|
||||
std %r4, 176(%r3)
|
||||
# save TOC of context-function
|
||||
ld %r4, 8(%r5)
|
||||
std %r4, 0(%r3)
|
||||
#endif
|
||||
|
||||
# set back-chain to zero
|
||||
li %r0, 0
|
||||
std %r0, 184(%r3)
|
||||
|
||||
#if _CALL_ELF != 2
|
||||
# zero in r3 indicates first jump to context-function
|
||||
std %r0, 152(%r3)
|
||||
#endif
|
||||
|
||||
# load LR
|
||||
mflr %r0
|
||||
# jump to label 1
|
||||
bl 1f
|
||||
1:
|
||||
# load LR into R4
|
||||
mflr %r4
|
||||
# compute abs address of label finish
|
||||
addi %r4, %r4, finish - 1b
|
||||
# restore LR
|
||||
mtlr %r0
|
||||
# save address of finish as return-address for context-function
|
||||
# will be entered after context-function returns
|
||||
std %r4, 168(%r3)
|
||||
|
||||
# restore return address from R6
|
||||
mtlr %r6
|
||||
|
||||
blr # return pointer to context-data
|
||||
|
||||
finish:
|
||||
# save return address into R0
|
||||
mflr %r0
|
||||
# save return address on stack, set up stack frame
|
||||
std %r0, 8(%r1)
|
||||
# allocate stack space, R1 % 16 == 0
|
||||
stdu %r1, -32(%r1)
|
||||
|
||||
# exit code is zero
|
||||
li %r3, 0
|
||||
# exit application
|
||||
bl _exit
|
||||
nop
|
||||
#if _CALL_ELF == 2
|
||||
.size make_fcontext, .-make_fcontext
|
||||
#else
|
||||
# ifdef _CALL_LINUX
|
||||
.size .make_fcontext, .-.L.make_fcontext
|
||||
# else
|
||||
.size .make_fcontext, .-.make_fcontext
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* Mark that we don't need executable stack. */
|
||||
.section .note.GNU-stack,"",%progbits
|
126
third_party/context/src/asm/make_ppc64_sysv_macho_gas.S
vendored
Normal file
126
third_party/context/src/asm/make_ppc64_sysv_macho_gas.S
vendored
Normal file
@ -0,0 +1,126 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
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 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R13 | R14 | R15 | R16 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R17 | R18 | R19 | R20 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R21 | R22 | R23 | R24 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R25 | R26 | R27 | R28 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R29 | R30 | R31 | hidden | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | *
|
||||
* ------------------------------------------------- *
|
||||
* | CR | LR | PC | back-chain| *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | *
|
||||
* ------------------------------------------------- *
|
||||
* | cr saved | lr saved | compiler | linker | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | *
|
||||
* ------------------------------------------------- *
|
||||
* | FCTX | DATA | | | *
|
||||
* ------------------------------------------------- *
|
||||
* *
|
||||
|
||||
.text
|
||||
.globl _make_fcontext
|
||||
_make_fcontext:
|
||||
; save return address into R6
|
||||
mflr r6
|
||||
|
||||
; first arg of make_fcontext() == top address of context-function
|
||||
; shift address in R3 to lower 16 byte boundary
|
||||
clrrwi r3, r3, 4
|
||||
|
||||
; reserve space for context-data on context-stack
|
||||
; including 64 byte of linkage + parameter area (R1 16 == 0)
|
||||
subi r3, r3, 240
|
||||
|
||||
; third arg of make_fcontext() == address of context-function
|
||||
stw r5, 176(r3)
|
||||
|
||||
; set back-chain to zero
|
||||
li r0, 0
|
||||
std r0, 184(r3)
|
||||
|
||||
; compute address of returned transfer_t
|
||||
addi r0, r3, 224
|
||||
mr r4, r0
|
||||
std r4, 152(r3)
|
||||
|
||||
; load LR
|
||||
mflr r0
|
||||
; jump to label 1
|
||||
bl l1
|
||||
l1:
|
||||
; load LR into R4
|
||||
mflr r4
|
||||
; compute abs address of label finish
|
||||
addi r4, r4, lo16((finish - .) + 4)
|
||||
; restore LR
|
||||
mtlr r0
|
||||
; save address of finish as return-address for context-function
|
||||
; will be entered after context-function returns
|
||||
std r4, 168(r3)
|
||||
|
||||
; restore return address from R6
|
||||
mtlr r6
|
||||
|
||||
blr ; return pointer to context-data
|
||||
|
||||
finish:
|
||||
; save return address into R0
|
||||
mflr r0
|
||||
; save return address on stack, set up stack frame
|
||||
stw r0, 8(r1)
|
||||
; allocate stack space, R1 16 == 0
|
||||
stwu r1, -32(r1)
|
||||
|
||||
; set return value to zero
|
||||
li r3, 0
|
||||
; exit application
|
||||
bl __exit
|
||||
nop
|
137
third_party/context/src/asm/make_ppc64_sysv_xcoff_gas.S
vendored
Normal file
137
third_party/context/src/asm/make_ppc64_sysv_xcoff_gas.S
vendored
Normal file
@ -0,0 +1,137 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
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 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | *
|
||||
* ------------------------------------------------- *
|
||||
* | TOC | R14 | R15 | R16 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R17 | R18 | R19 | R20 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R21 | R22 | R23 | R24 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R25 | R26 | R27 | R28 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R29 | R30 | R31 | hidden | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | *
|
||||
* ------------------------------------------------- *
|
||||
* | CR | LR | PC | back-chain| *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | *
|
||||
* ------------------------------------------------- *
|
||||
* | cr saved | lr saved | compiler | linker | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | *
|
||||
* ------------------------------------------------- *
|
||||
* | TOC saved | FCTX | DATA | | *
|
||||
* ------------------------------------------------- *
|
||||
* *
|
||||
*******************************************************/
|
||||
|
||||
.file "make_ppc64_sysv_xcoff_gas.S"
|
||||
.toc
|
||||
.csect .text[PR], 5
|
||||
.align 2
|
||||
.globl make_fcontext[DS]
|
||||
.globl .make_fcontext
|
||||
.csect make_fcontext[DS], 3
|
||||
make_fcontext:
|
||||
.llong .make_fcontext[PR], TOC[tc0], 0
|
||||
.csect .text[PR], 5
|
||||
.make_fcontext:
|
||||
# save return address into R6
|
||||
mflr 6
|
||||
|
||||
# first arg of make_fcontext() == top address of context-function
|
||||
# shift address in R3 to lower 16 byte boundary
|
||||
clrrdi 3, 3, 4
|
||||
|
||||
# reserve space for context-data on context-stack
|
||||
# including 64 byte of linkage + parameter area (R1 % 16 == 0)
|
||||
subi 3, 3, 248
|
||||
|
||||
# third arg of make_fcontext() == address of context-function descriptor
|
||||
ld 4, 0(5)
|
||||
std 4, 176(3)
|
||||
# save TOC of context-function
|
||||
ld 4, 8(5)
|
||||
std 4, 0(3)
|
||||
|
||||
# set back-chain to zero
|
||||
li 0, 0
|
||||
std 0, 184(3)
|
||||
|
||||
# zero in r3 indicates first jump to context-function
|
||||
std 0, 152(3)
|
||||
|
||||
# load LR
|
||||
mflr 0
|
||||
# jump to label 1
|
||||
bl .Label
|
||||
.Label:
|
||||
# load LR into R4
|
||||
mflr 4
|
||||
# compute abs address of label .L_finish
|
||||
addi 4, 4, .L_finish - .Label
|
||||
# restore LR
|
||||
mtlr 0
|
||||
# save address of finish as return-address for context-function
|
||||
# will be entered after context-function returns
|
||||
std 4, 168(3)
|
||||
|
||||
# restore return address from R6
|
||||
mtlr 6
|
||||
|
||||
blr # return pointer to context-data
|
||||
|
||||
.L_finish:
|
||||
# save return address into R0
|
||||
mflr 0
|
||||
# save return address on stack, set up stack frame
|
||||
std 0, 8(1)
|
||||
# allocate stack space, R1 % 16 == 0
|
||||
stdu 1, -32(1)
|
||||
|
||||
# exit code is zero
|
||||
li 3, 0
|
||||
# exit application
|
||||
bl ._exit
|
||||
nop
|
91
third_party/context/src/asm/make_riscv64_sysv_elf_gas.S
vendored
Normal file
91
third_party/context/src/asm/make_riscv64_sysv_elf_gas.S
vendored
Normal file
@ -0,0 +1,91 @@
|
||||
/*
|
||||
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| *
|
||||
* ------------------------------------------------- *
|
||||
* | fs0 | fs1 | fs2 | fs3 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
|
||||
* ------------------------------------------------- *
|
||||
* | fs4 | fs5 | fs6 | fs7 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0x40| 0x44| 0x48| 0x4c| 0x50| 0x54| 0x58| 0x5c| *
|
||||
* ------------------------------------------------- *
|
||||
* | fs8 | fs9 | fs10 | fs11 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0x60| 0x64| 0x68| 0x6c| 0x70| 0x74| 0x78| 0x7c| *
|
||||
* ------------------------------------------------- *
|
||||
* | s0 | s1 | s2 | s3 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0x80| 0x84| 0x88| 0x8c| 0x90| 0x94| 0x98| 0x9c| *
|
||||
* ------------------------------------------------- *
|
||||
* | s4 | s5 | s6 | s7 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0xa0| 0xa4| 0xa8| 0xac| 0xb0| 0xb4| 0xb8| 0xbc| *
|
||||
* ------------------------------------------------- *
|
||||
* | s8 | s9 | s10 | s11 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 48 | 49 | 50 | 51 | | | | | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0xc0| 0xc4| 0xc8| 0xcc| | | | | *
|
||||
* ------------------------------------------------- *
|
||||
* | ra | pc | | | *
|
||||
* ------------------------------------------------- *
|
||||
* *
|
||||
*******************************************************/
|
||||
|
||||
.file "make_riscv64_sysv_elf_gas.S"
|
||||
.text
|
||||
.align 1
|
||||
.global make_fcontext
|
||||
.type make_fcontext, %function
|
||||
make_fcontext:
|
||||
# shift address in a0 (allocated stack) to lower 16 byte boundary
|
||||
andi a0, a0, ~0xF
|
||||
|
||||
# reserve space for context-data on context-stack
|
||||
addi a0, a0, -0xd0
|
||||
|
||||
# third arg of make_fcontext() == address of context-function
|
||||
# store address as a PC to jump in
|
||||
sd a2, 0xc8(a0)
|
||||
|
||||
# save address of finish as return-address for context-function
|
||||
# will be entered after context-function returns (RA register)
|
||||
lla a4, finish
|
||||
sd a4, 0xc0(a0)
|
||||
|
||||
ret // return pointer to context-data (a0)
|
||||
|
||||
finish:
|
||||
# exit code is zero
|
||||
li a0, 0
|
||||
# exit application
|
||||
tail _exit@plt
|
||||
|
||||
.size make_fcontext,.-make_fcontext
|
||||
# Mark that we don't need executable stack.
|
||||
.section .note.GNU-stack,"",%progbits
|
108
third_party/context/src/asm/make_s390x_sysv_elf_gas.S
vendored
Normal file
108
third_party/context/src/asm/make_s390x_sysv_elf_gas.S
vendored
Normal file
@ -0,0 +1,108 @@
|
||||
/*******************************************************
|
||||
* ------------------------------------------------- *
|
||||
* | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0 | 8 | 16 | 24 | *
|
||||
* ------------------------------------------------- *
|
||||
* | t.fctx | t.data | r2 | r6 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 40 | 48 | 56 | *
|
||||
* ------------------------------------------------- *
|
||||
* | r7 | r8 | r9 | r10 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 64 | 72 | 80 | 88 | *
|
||||
* ------------------------------------------------- *
|
||||
* | r11 | r12 | r13 | r14 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 96 | 104 | 112 | 120 | *
|
||||
* ------------------------------------------------- *
|
||||
* | f8 | f9 | f10 | f11 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 128 | 136 | 144 | 152 | *
|
||||
* ------------------------------------------------- *
|
||||
* | f12 | f13 | f14 | f15 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 160 | 168 | 176 | | *
|
||||
* ------------------------------------------------- *
|
||||
* | fpc | pc | | | *
|
||||
* ------------------------------------------------- *
|
||||
*******************************************************/
|
||||
|
||||
.text
|
||||
.align 8
|
||||
.global make_fcontext
|
||||
.type make_fcontext, @function
|
||||
|
||||
#define ARG_OFFSET 0
|
||||
#define GR_OFFSET 16
|
||||
#define R14_OFFSET 88
|
||||
#define FP_OFFSET 96
|
||||
#define FPC_OFFSET 160
|
||||
#define PC_OFFSET 168
|
||||
#define CONTEXT_SIZE 176
|
||||
|
||||
/*
|
||||
|
||||
fcontext_t make_fcontext( void * sp, std::size_t size, void (* fn)( transfer_t) );
|
||||
|
||||
Create and return a context below SP to call FN.
|
||||
|
||||
Incoming args
|
||||
r2 - The stack location where to create the context
|
||||
r3 - The size of the context
|
||||
r4 - The address of the context function
|
||||
|
||||
*/
|
||||
|
||||
make_fcontext:
|
||||
.machine "z10"
|
||||
/* Align the stack to an 8 byte boundary. */
|
||||
nill %r2,0xfff0
|
||||
|
||||
/* Allocate stack space for the context. */
|
||||
aghi %r2,-CONTEXT_SIZE
|
||||
|
||||
/* Set the r2 save slot to zero. This indicates jump_fcontext
|
||||
that this is a special context. */
|
||||
mvghi GR_OFFSET(%r2),0
|
||||
|
||||
/* Save the floating point control register. */
|
||||
stfpc FPC_OFFSET(%r2)
|
||||
|
||||
/* Store the address of the target function as new pc. */
|
||||
stg %r4,PC_OFFSET(%r2)
|
||||
|
||||
/* Store a pointer to the finish routine as r14. If a function
|
||||
called via context routines just returns that value will be
|
||||
loaded and used as return address. Hence the program will
|
||||
just exit. */
|
||||
larl %r1,finish
|
||||
stg %r1,R14_OFFSET(%r2)
|
||||
|
||||
/* Return as usual with the new context returned in r2. */
|
||||
br %r14
|
||||
|
||||
finish:
|
||||
/* In finish tasks, you load the exit code and exit the
|
||||
make_fcontext This is called when the context-function is
|
||||
entirely executed. */
|
||||
lghi %r2,0
|
||||
brasl %r14,_exit@PLT
|
||||
|
||||
.size make_fcontext,.-make_fcontext
|
||||
.section .note.GNU-stack,"",%progbits
|
174
third_party/context/src/asm/make_x86_64_ms_pe_clang_gas.S
vendored
Normal file
174
third_party/context/src/asm/make_x86_64_ms_pe_clang_gas.S
vendored
Normal file
@ -0,0 +1,174 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
Copyright Thomas Sailer 2013.
|
||||
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 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | SEE registers (XMM6-XMM15) | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0x20 | 0x24 | 0x28 | 0x2c | 0x30 | 0x34 | 0x38 | 0x3c | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | SEE registers (XMM6-XMM15) | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0xe40 | 0x44 | 0x48 | 0x4c | 0x50 | 0x54 | 0x58 | 0x5c | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | SEE registers (XMM6-XMM15) | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0x60 | 0x64 | 0x68 | 0x6c | 0x70 | 0x74 | 0x78 | 0x7c | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | SEE registers (XMM6-XMM15) | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 32 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0x80 | 0x84 | 0x88 | 0x8c | 0x90 | 0x94 | 0x98 | 0x9c | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | SEE registers (XMM6-XMM15) | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0xa0 | 0xa4 | 0xa8 | 0xac | 0xb0 | 0xb4 | 0xb8 | 0xbc | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | fc_mxcsr|fc_x87_cw| <alignment> | fbr_strg | fc_dealloc | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0xc0 | 0xc4 | 0xc8 | 0xcc | 0xd0 | 0xd4 | 0xd8 | 0xdc | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | limit | base | R12 | R13 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0xe0 | 0xe4 | 0xe8 | 0xec | 0xf0 | 0xf4 | 0xf8 | 0xfc | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | R14 | R15 | RDI | RSI | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0x100 | 0x104 | 0x108 | 0x10c | 0x110 | 0x114 | 0x118 | 0x11c | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | RBX | RBP | hidden | RIP | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0x120 | 0x124 | 0x128 | 0x12c | 0x130 | 0x134 | 0x138 | 0x13c | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | parameter area | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0x140 | 0x144 | 0x148 | 0x14c | 0x150 | 0x154 | 0x158 | 0x15c | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | FCTX | DATA | | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
**************************************************************************************/
|
||||
|
||||
.file "make_x86_64_ms_pe_clang_gas.S"
|
||||
.text
|
||||
.p2align 4,,15
|
||||
.globl make_fcontext
|
||||
.def make_fcontext; .scl 2; .type 32; .endef
|
||||
.seh_proc make_fcontext
|
||||
make_fcontext:
|
||||
.seh_endprologue
|
||||
|
||||
/* first arg of make_fcontext() == top of context-stack */
|
||||
movq %rcx, %rax
|
||||
|
||||
/* shift address in RAX to lower 16 byte boundary */
|
||||
/* == pointer to fcontext_t and address of context stack */
|
||||
andq $-16, %rax
|
||||
|
||||
/* reserve space for context-data on context-stack */
|
||||
/* on context-function entry: (RSP -0x8) % 16 == 0 */
|
||||
leaq -0x150(%rax), %rax
|
||||
|
||||
/* third arg of make_fcontext() == address of context-function */
|
||||
movq %r8, 0x100(%rax)
|
||||
|
||||
/* first arg of make_fcontext() == top of context-stack */
|
||||
/* save top address of context stack as 'base' */
|
||||
movq %rcx, 0xc8(%rax)
|
||||
/* second arg of make_fcontext() == size of context-stack */
|
||||
/* negate stack size for LEA instruction (== substraction) */
|
||||
negq %rdx
|
||||
/* compute bottom address of context stack (limit) */
|
||||
leaq (%rcx,%rdx), %rcx
|
||||
/* save bottom address of context stack as 'limit' */
|
||||
movq %rcx, 0xc0(%rax)
|
||||
/* save address of context stack limit as 'dealloction stack' */
|
||||
movq %rcx, 0xb8(%rax)
|
||||
/* set fiber-storage to zero */
|
||||
xorq %rcx, %rcx
|
||||
movq %rcx, 0xb0(%rax)
|
||||
|
||||
/* save MMX control- and status-word */
|
||||
stmxcsr 0xa0(%rax)
|
||||
/* save x87 control-word */
|
||||
fnstcw 0xa4(%rax)
|
||||
|
||||
/* compute address of transport_t */
|
||||
leaq 0x140(%rax), %rcx
|
||||
/* store address of transport_t in hidden field */
|
||||
movq %rcx, 0x110(%rax)
|
||||
|
||||
/* compute abs address of label trampoline */
|
||||
leaq trampoline(%rip), %rcx
|
||||
/* save address of finish as return-address for context-function */
|
||||
/* will be entered after jump_fcontext() first time */
|
||||
movq %rcx, 0x118(%rax)
|
||||
|
||||
/* compute abs address of label finish */
|
||||
leaq finish(%rip), %rcx
|
||||
/* save address of finish as return-address for context-function */
|
||||
/* will be entered after context-function returns */
|
||||
movq %rcx, 0x108(%rax)
|
||||
|
||||
ret /* return pointer to context-data */
|
||||
|
||||
trampoline:
|
||||
/* store return address on stack */
|
||||
/* fix stack alignment */
|
||||
pushq %rbp
|
||||
/* jump to context-function */
|
||||
jmp *%rbx
|
||||
|
||||
finish:
|
||||
/* 32byte shadow-space for _exit() */
|
||||
andq $-32, %rsp
|
||||
/* 32byte shadow-space for _exit() are */
|
||||
/* already reserved by make_fcontext() */
|
||||
/* exit code is zero */
|
||||
xorq %rcx, %rcx
|
||||
/* exit application */
|
||||
call _exit
|
||||
hlt
|
||||
.seh_endproc
|
||||
|
||||
.def _exit; .scl 2; .type 32; .endef /* standard C library function */
|
||||
|
||||
.section .drectve
|
||||
.ascii " -export:\"make_fcontext\""
|
174
third_party/context/src/asm/make_x86_64_ms_pe_gas.asm
vendored
Normal file
174
third_party/context/src/asm/make_x86_64_ms_pe_gas.asm
vendored
Normal file
@ -0,0 +1,174 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
Copyright Thomas Sailer 2013.
|
||||
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 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | SEE registers (XMM6-XMM15) | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0x20 | 0x24 | 0x28 | 0x2c | 0x30 | 0x34 | 0x38 | 0x3c | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | SEE registers (XMM6-XMM15) | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0xe40 | 0x44 | 0x48 | 0x4c | 0x50 | 0x54 | 0x58 | 0x5c | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | SEE registers (XMM6-XMM15) | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0x60 | 0x64 | 0x68 | 0x6c | 0x70 | 0x74 | 0x78 | 0x7c | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | SEE registers (XMM6-XMM15) | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 32 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0x80 | 0x84 | 0x88 | 0x8c | 0x90 | 0x94 | 0x98 | 0x9c | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | SEE registers (XMM6-XMM15) | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0xa0 | 0xa4 | 0xa8 | 0xac | 0xb0 | 0xb4 | 0xb8 | 0xbc | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | fc_mxcsr|fc_x87_cw| <alignment> | fbr_strg | fc_dealloc | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0xc0 | 0xc4 | 0xc8 | 0xcc | 0xd0 | 0xd4 | 0xd8 | 0xdc | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | limit | base | R12 | R13 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0xe0 | 0xe4 | 0xe8 | 0xec | 0xf0 | 0xf4 | 0xf8 | 0xfc | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | R14 | R15 | RDI | RSI | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0x100 | 0x104 | 0x108 | 0x10c | 0x110 | 0x114 | 0x118 | 0x11c | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | RBX | RBP | hidden | RIP | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0x120 | 0x124 | 0x128 | 0x12c | 0x130 | 0x134 | 0x138 | 0x13c | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | parameter area | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0x140 | 0x144 | 0x148 | 0x14c | 0x150 | 0x154 | 0x158 | 0x15c | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | FCTX | DATA | | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
**************************************************************************************/
|
||||
|
||||
.file "make_x86_64_ms_pe_gas.asm"
|
||||
.text
|
||||
.p2align 4,,15
|
||||
.globl make_fcontext
|
||||
.def make_fcontext; .scl 2; .type 32; .endef
|
||||
.seh_proc make_fcontext
|
||||
make_fcontext:
|
||||
.seh_endprologue
|
||||
|
||||
/* first arg of make_fcontext() == top of context-stack */
|
||||
movq %rcx, %rax
|
||||
|
||||
/* shift address in RAX to lower 16 byte boundary */
|
||||
/* == pointer to fcontext_t and address of context stack */
|
||||
andq $-16, %rax
|
||||
|
||||
/* reserve space for context-data on context-stack */
|
||||
/* on context-function entry: (RSP -0x8) % 16 == 0 */
|
||||
leaq -0x150(%rax), %rax
|
||||
|
||||
/* third arg of make_fcontext() == address of context-function */
|
||||
movq %r8, 0x100(%rax)
|
||||
|
||||
/* first arg of make_fcontext() == top of context-stack */
|
||||
/* save top address of context stack as 'base' */
|
||||
movq %rcx, 0xc8(%rax)
|
||||
/* second arg of make_fcontext() == size of context-stack */
|
||||
/* negate stack size for LEA instruction (== substraction) */
|
||||
negq %rdx
|
||||
/* compute bottom address of context stack (limit) */
|
||||
leaq (%rcx,%rdx), %rcx
|
||||
/* save bottom address of context stack as 'limit' */
|
||||
movq %rcx, 0xc0(%rax)
|
||||
/* save address of context stack limit as 'dealloction stack' */
|
||||
movq %rcx, 0xb8(%rax)
|
||||
/* set fiber-storage to zero */
|
||||
xorq %rcx, %rcx
|
||||
movq %rcx, 0xb0(%rax)
|
||||
|
||||
/* save MMX control- and status-word */
|
||||
stmxcsr 0xa0(%rax)
|
||||
/* save x87 control-word */
|
||||
fnstcw 0xa4(%rax)
|
||||
|
||||
/* compute address of transport_t */
|
||||
leaq 0x140(%rax), %rcx
|
||||
/* store address of transport_t in hidden field */
|
||||
movq %rcx, 0x110(%rax)
|
||||
|
||||
/* compute abs address of label trampoline */
|
||||
leaq trampoline(%rip), %rcx
|
||||
/* save address of finish as return-address for context-function */
|
||||
/* will be entered after jump_fcontext() first time */
|
||||
movq %rcx, 0x118(%rax)
|
||||
|
||||
/* compute abs address of label finish */
|
||||
leaq finish(%rip), %rcx
|
||||
/* save address of finish as return-address for context-function */
|
||||
/* will be entered after context-function returns */
|
||||
movq %rcx, 0x108(%rax)
|
||||
|
||||
ret /* return pointer to context-data */
|
||||
|
||||
trampoline:
|
||||
/* store return address on stack */
|
||||
/* fix stack alignment */
|
||||
pushq %rbp
|
||||
/* jump to context-function */
|
||||
jmp *%rbx
|
||||
|
||||
finish:
|
||||
/* 32byte shadow-space for _exit() */
|
||||
andq $-32, %rsp
|
||||
/* 32byte shadow-space for _exit() are */
|
||||
/* already reserved by make_fcontext() */
|
||||
/* exit code is zero */
|
||||
xorq %rcx, %rcx
|
||||
/* exit application */
|
||||
call _exit
|
||||
hlt
|
||||
.seh_endproc
|
||||
|
||||
.def _exit; .scl 2; .type 32; .endef /* standard C library function */
|
||||
|
||||
.section .drectve
|
||||
.ascii " -export:\"make_fcontext\""
|
163
third_party/context/src/asm/make_x86_64_ms_pe_masm.asm
vendored
Normal file
163
third_party/context/src/asm/make_x86_64_ms_pe_masm.asm
vendored
Normal file
@ -0,0 +1,163 @@
|
||||
|
||||
; Copyright Oliver Kowalke 2009.
|
||||
; 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 |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | SEE registers (XMM6-XMM15) |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | 0x20 | 0x24 | 0x28 | 0x2c | 0x30 | 0x34 | 0x38 | 0x3c |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | SEE registers (XMM6-XMM15) |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | 0xe40 | 0x44 | 0x48 | 0x4c | 0x50 | 0x54 | 0x58 | 0x5c |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | SEE registers (XMM6-XMM15) |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | 0x60 | 0x64 | 0x68 | 0x6c | 0x70 | 0x74 | 0x78 | 0x7c |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | SEE registers (XMM6-XMM15) |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | 32 | 32 | 33 | 34 | 35 | 36 | 37 | 38 |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | 0x80 | 0x84 | 0x88 | 0x8c | 0x90 | 0x94 | 0x98 | 0x9c |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | SEE registers (XMM6-XMM15) |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | 0xa0 | 0xa4 | 0xa8 | 0xac | 0xb0 | 0xb4 | 0xb8 | 0xbc |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | fc_mxcsr|fc_x87_cw| <alignment> | fbr_strg | fc_dealloc |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | 0xc0 | 0xc4 | 0xc8 | 0xcc | 0xd0 | 0xd4 | 0xd8 | 0xdc |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | limit | base | R12 | R13 |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | 0xe0 | 0xe4 | 0xe8 | 0xec | 0xf0 | 0xf4 | 0xf8 | 0xfc |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | R14 | R15 | RDI | RSI |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | 0x100 | 0x104 | 0x108 | 0x10c | 0x110 | 0x114 | 0x118 | 0x11c |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | RBX | RBP | hidden | RIP |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | 0x120 | 0x124 | 0x128 | 0x12c | 0x130 | 0x134 | 0x138 | 0x13c |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | parameter area |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | 0x140 | 0x144 | 0x148 | 0x14c | 0x150 | 0x154 | 0x158 | 0x15c |
|
||||
; ----------------------------------------------------------------------------------
|
||||
; | FCTX | DATA | |
|
||||
; ----------------------------------------------------------------------------------
|
||||
|
||||
; standard C library function
|
||||
EXTERN _exit:PROC
|
||||
.code
|
||||
|
||||
; generate function table entry in .pdata and unwind information in
|
||||
make_fcontext PROC BOOST_CONTEXT_EXPORT FRAME
|
||||
; .xdata for a function's structured exception handling unwind behavior
|
||||
.endprolog
|
||||
|
||||
; first arg of make_fcontext() == top of context-stack
|
||||
mov rax, rcx
|
||||
|
||||
; shift address in RAX to lower 16 byte boundary
|
||||
; == pointer to fcontext_t and address of context stack
|
||||
and rax, -16
|
||||
|
||||
; reserve space for context-data on context-stack
|
||||
; on context-function entry: (RSP -0x8) % 16 == 0
|
||||
sub rax, 0150h
|
||||
|
||||
; third arg of make_fcontext() == address of context-function
|
||||
; stored in RBX
|
||||
mov [rax+0100h], r8
|
||||
|
||||
; first arg of make_fcontext() == top of context-stack
|
||||
; save top address of context stack as 'base'
|
||||
mov [rax+0c8h], rcx
|
||||
; second arg of make_fcontext() == size of context-stack
|
||||
; negate stack size for LEA instruction (== substraction)
|
||||
neg rdx
|
||||
; compute bottom address of context stack (limit)
|
||||
lea rcx, [rcx+rdx]
|
||||
; save bottom address of context stack as 'limit'
|
||||
mov [rax+0c0h], rcx
|
||||
; save address of context stack limit as 'dealloction stack'
|
||||
mov [rax+0b8h], rcx
|
||||
; set fiber-storage to zero
|
||||
xor rcx, rcx
|
||||
mov [rax+0b0h], rcx
|
||||
|
||||
; save MMX control- and status-word
|
||||
stmxcsr [rax+0a0h]
|
||||
; save x87 control-word
|
||||
fnstcw [rax+0a4h]
|
||||
|
||||
; compute address of transport_t
|
||||
lea rcx, [rax+0140h]
|
||||
; store address of transport_t in hidden field
|
||||
mov [rax+0110h], rcx
|
||||
|
||||
; compute abs address of label trampoline
|
||||
lea rcx, trampoline
|
||||
; save address of trampoline as return-address for context-function
|
||||
; will be entered after calling jump_fcontext() first time
|
||||
mov [rax+0118h], rcx
|
||||
|
||||
; compute abs address of label finish
|
||||
lea rcx, finish
|
||||
; save address of finish as return-address for context-function in RBP
|
||||
; will be entered after context-function returns
|
||||
mov [rax+0108h], rcx
|
||||
|
||||
ret ; return pointer to context-data
|
||||
|
||||
trampoline:
|
||||
; store return address on stack
|
||||
; fix stack alignment
|
||||
push rbp
|
||||
; jump to context-function
|
||||
jmp rbx
|
||||
|
||||
finish:
|
||||
; exit code is zero
|
||||
xor rcx, rcx
|
||||
; exit application
|
||||
call _exit
|
||||
hlt
|
||||
make_fcontext ENDP
|
||||
END
|
147
third_party/context/src/asm/make_x86_64_sysv_elf_gas.S
vendored
Normal file
147
third_party/context/src/asm/make_x86_64_sysv_elf_gas.S
vendored
Normal file
@ -0,0 +1,147 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
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 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | fc_mxcsr|fc_x87_cw| guard | R12 | R13 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0x20 | 0x24 | 0x28 | 0x2c | 0x30 | 0x34 | 0x38 | 0x3c | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | R14 | R15 | RBX | RBP | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0x40 | 0x44 | | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | RIP | | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* *
|
||||
****************************************************************************************/
|
||||
|
||||
# if defined __CET__
|
||||
# include <cet.h>
|
||||
# define SHSTK_ENABLED (__CET__ & 0x2)
|
||||
# define BOOST_CONTEXT_SHADOW_STACK (SHSTK_ENABLED && SHADOW_STACK_SYSCALL)
|
||||
# else
|
||||
# define _CET_ENDBR
|
||||
# endif
|
||||
.file "make_x86_64_sysv_elf_gas.S"
|
||||
.text
|
||||
.globl make_fcontext
|
||||
.type make_fcontext,@function
|
||||
.align 16
|
||||
make_fcontext:
|
||||
_CET_ENDBR
|
||||
#if BOOST_CONTEXT_SHADOW_STACK
|
||||
/* the new shadow stack pointer (SSP) */
|
||||
movq -0x8(%rdi), %r9
|
||||
#endif
|
||||
|
||||
/* first arg of make_fcontext() == top of context-stack */
|
||||
movq %rdi, %rax
|
||||
|
||||
/* shift address in RAX to lower 16 byte boundary */
|
||||
andq $-16, %rax
|
||||
|
||||
/* reserve space for context-data on context-stack */
|
||||
/* on context-function entry: (RSP -0x8) % 16 == 0 */
|
||||
leaq -0x48(%rax), %rax
|
||||
|
||||
/* third arg of make_fcontext() == address of context-function */
|
||||
/* stored in RBX */
|
||||
movq %rdx, 0x30(%rax)
|
||||
|
||||
/* save MMX control- and status-word */
|
||||
stmxcsr (%rax)
|
||||
/* save x87 control-word */
|
||||
fnstcw 0x4(%rax)
|
||||
|
||||
#if defined(BOOST_CONTEXT_TLS_STACK_PROTECTOR)
|
||||
/* save stack guard */
|
||||
movq %fs:0x28, %rcx /* read stack guard from TLS record */
|
||||
movq %rcx, 0x8(%rsp) /* save stack guard */
|
||||
#endif
|
||||
|
||||
/* compute abs address of label trampoline */
|
||||
leaq trampoline(%rip), %rcx
|
||||
/* save address of trampoline as return-address for context-function */
|
||||
/* will be entered after calling jump_fcontext() first time */
|
||||
movq %rcx, 0x40(%rax)
|
||||
|
||||
/* compute abs address of label finish */
|
||||
leaq finish(%rip), %rcx
|
||||
/* save address of finish as return-address for context-function */
|
||||
/* will be entered after context-function returns */
|
||||
movq %rcx, 0x38(%rax)
|
||||
|
||||
#if BOOST_CONTEXT_SHADOW_STACK
|
||||
/* Populate the shadow stack and normal stack */
|
||||
/* get original SSP */
|
||||
rdsspq %r8
|
||||
/* restore new shadow stack */
|
||||
rstorssp -0x8(%r9)
|
||||
/* save the restore token on the original shadow stack */
|
||||
saveprevssp
|
||||
/* push the address of "jmp trampoline" to the new shadow stack */
|
||||
/* as well as the stack */
|
||||
call 1f
|
||||
jmp trampoline
|
||||
1:
|
||||
/* save address of "jmp trampoline" as return-address */
|
||||
/* for context-function */
|
||||
pop 0x38(%rax)
|
||||
/* Get the new SSP. */
|
||||
rdsspq %r9
|
||||
/* restore original shadow stack */
|
||||
rstorssp -0x8(%r8)
|
||||
/* save the restore token on the new shadow stack. */
|
||||
saveprevssp
|
||||
|
||||
/* reserve space for the new SSP */
|
||||
leaq -0x8(%rax), %rax
|
||||
/* save the new SSP to this fcontext */
|
||||
movq %r9, (%rax)
|
||||
#endif
|
||||
|
||||
ret /* return pointer to context-data */
|
||||
|
||||
trampoline:
|
||||
_CET_ENDBR
|
||||
/* store return address on stack */
|
||||
/* fix stack alignment */
|
||||
#if BOOST_CONTEXT_SHADOW_STACK
|
||||
/* save address of "jmp *%rbp" as return-address */
|
||||
/* on stack and shadow stack */
|
||||
call 2f
|
||||
jmp *%rbp
|
||||
2:
|
||||
#else
|
||||
push %rbp
|
||||
#endif
|
||||
/* jump to context-function */
|
||||
jmp *%rbx
|
||||
|
||||
finish:
|
||||
_CET_ENDBR
|
||||
/* exit code is zero */
|
||||
xorq %rdi, %rdi
|
||||
/* exit application */
|
||||
call _exit@PLT
|
||||
hlt
|
||||
.size make_fcontext,.-make_fcontext
|
||||
|
||||
/* Mark that we don't need executable stack. */
|
||||
.section .note.GNU-stack,"",%progbits
|
76
third_party/context/src/asm/make_x86_64_sysv_macho_gas.S
vendored
Normal file
76
third_party/context/src/asm/make_x86_64_sysv_macho_gas.S
vendored
Normal file
@ -0,0 +1,76 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
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 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | fc_mxcsr|fc_x87_cw| R12 | R13 | R14 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0x20 | 0x24 | 0x28 | 0x2c | 0x30 | 0x34 | 0x38 | 0x3c | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | R15 | RBX | RBP | RIP | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* *
|
||||
****************************************************************************************/
|
||||
|
||||
.text
|
||||
.globl _make_fcontext
|
||||
.align 8
|
||||
_make_fcontext:
|
||||
/* first arg of make_fcontext() == top of context-stack */
|
||||
movq %rdi, %rax
|
||||
|
||||
/* shift address in RAX to lower 16 byte boundary */
|
||||
andq $-16, %rax
|
||||
|
||||
/* reserve space for context-data on context-stack */
|
||||
/* on context-function entry: (RSP -0x8) % 16 == 0 */
|
||||
leaq -0x40(%rax), %rax
|
||||
|
||||
/* third arg of make_fcontext() == address of context-function */
|
||||
/* stored in RBX */
|
||||
movq %rdx, 0x28(%rax)
|
||||
|
||||
/* save MMX control- and status-word */
|
||||
stmxcsr (%rax)
|
||||
/* save x87 control-word */
|
||||
fnstcw 0x4(%rax)
|
||||
|
||||
/* compute abs address of label trampoline */
|
||||
leaq trampoline(%rip), %rcx
|
||||
/* save address of trampoline as return-address for context-function */
|
||||
/* will be entered after calling jump_fcontext() first time */
|
||||
movq %rcx, 0x38(%rax)
|
||||
|
||||
/* compute abs address of label finish */
|
||||
leaq finish(%rip), %rcx
|
||||
/* save address of finish as return-address for context-function */
|
||||
/* will be entered after context-function returns */
|
||||
movq %rcx, 0x30(%rax)
|
||||
|
||||
ret /* return pointer to context-data */
|
||||
|
||||
trampoline:
|
||||
/* store return address on stack */
|
||||
/* fix stack alignment */
|
||||
push %rbp
|
||||
/* jump to context-function */
|
||||
jmp *%rbx
|
||||
|
||||
finish:
|
||||
/* exit code is zero */
|
||||
xorq %rdi, %rdi
|
||||
/* exit application */
|
||||
call __exit
|
||||
hlt
|
113
third_party/context/src/asm/ontop_arm64_aapcs_elf_gas.S
vendored
Normal file
113
third_party/context/src/asm/ontop_arm64_aapcs_elf_gas.S
vendored
Normal file
@ -0,0 +1,113 @@
|
||||
/*
|
||||
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 "ontop_arm64_aapcs_elf_gas.S"
|
||||
.text
|
||||
.align 2
|
||||
.global ontop_fcontext
|
||||
.type ontop_fcontext, %function
|
||||
ontop_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 X5
|
||||
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
|
||||
|
||||
# skip pc
|
||||
# restore stack from GP + FPU
|
||||
add sp, sp, #0xb0
|
||||
|
||||
# jump to ontop-function
|
||||
ret x2
|
||||
.size ontop_fcontext,.-ontop_fcontext
|
||||
# Mark that we don't need executable stack.
|
||||
.section .note.GNU-stack,"",%progbits
|
108
third_party/context/src/asm/ontop_arm64_aapcs_macho_gas.S
vendored
Normal file
108
third_party/context/src/asm/ontop_arm64_aapcs_macho_gas.S
vendored
Normal file
@ -0,0 +1,108 @@
|
||||
/*
|
||||
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 | | | *
|
||||
* ------------------------------------------------- *
|
||||
* *
|
||||
*******************************************************/
|
||||
|
||||
.text
|
||||
.global _ontop_fcontext
|
||||
.balign 16
|
||||
_ontop_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 X5
|
||||
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
|
||||
|
||||
; skip pc
|
||||
; restore stack from GP + FPU
|
||||
add sp, sp, #0xb0
|
||||
|
||||
; jump to ontop-function
|
||||
ret x2
|
132
third_party/context/src/asm/ontop_arm64_aapcs_pe_armasm.asm
vendored
Normal file
132
third_party/context/src/asm/ontop_arm64_aapcs_pe_armasm.asm
vendored
Normal file
@ -0,0 +1,132 @@
|
||||
; 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 | 44 | 45 | 46 | 47 | *
|
||||
;* ------------------------------------------------- *
|
||||
;* | 0xa0| 0xa4| 0xa8| 0xac| 0xb0| 0xb4| 0xb8| 0xbc| *
|
||||
;* ------------------------------------------------- *
|
||||
;* | fiber data| base | limit | dealloc | *
|
||||
;* ------------------------------------------------- *
|
||||
;* ------------------------------------------------- *
|
||||
;* | 48 | 49 | 50 | 51 | | | *
|
||||
;* ------------------------------------------------- *
|
||||
;* | 0xc0| 0xc4| 0xc8| 0xcc| | | *
|
||||
;* ------------------------------------------------- *
|
||||
;* | PC | align | | | *
|
||||
;* ------------------------------------------------- *
|
||||
;* *
|
||||
;*******************************************************
|
||||
|
||||
AREA |.text|, CODE, READONLY, ALIGN=4, CODEALIGN
|
||||
EXPORT ontop_fcontext
|
||||
|
||||
ontop_fcontext proc BOOST_CONTEXT_EXPORT
|
||||
; prepare stack for GP + FPU
|
||||
sub sp, sp, #0xd0
|
||||
|
||||
; 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, #0xc0]
|
||||
|
||||
; save current stack base and limit
|
||||
ldp x5, x6, [x18, #0x08] ; TeStackBase and TeStackLimit at ksarm64.h
|
||||
stp x5, x6, [sp, #0xa0]
|
||||
; save current fiber data and deallocation stack
|
||||
ldr x5, [x18, #0x1478] ; TeDeallocationStack at ksarm64.h
|
||||
ldr x6, [x18, #0x20] ; TeFiberData at ksarm64.h
|
||||
stp x5, x6, [sp, #0xb0]
|
||||
|
||||
; store RSP (pointing to context-data) in X5
|
||||
mov x4, sp
|
||||
|
||||
; restore RSP (pointing to context-data) from X1
|
||||
mov sp, x0
|
||||
|
||||
; restore stack base and limit
|
||||
ldp x5, x6, [sp, #0xa0]
|
||||
stp x5, x6, [x18, #0x08] ; TeStackBase and TeStackLimit at ksarm64.h
|
||||
; restore fiber data and deallocation stack
|
||||
ldp x5, x6, [sp, #0xb0]
|
||||
str x5, [x18, #0x1478] ; TeDeallocationStack at ksarm64.h
|
||||
str x6, [x18, #0x20] ; TeFiberData at ksarm64.h
|
||||
|
||||
; 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
|
||||
|
||||
; skip pc
|
||||
; restore stack from GP + FPU
|
||||
add sp, sp, #0xc0
|
||||
|
||||
; jump to ontop-function
|
||||
ret x2
|
||||
ENDP
|
||||
END
|
93
third_party/context/src/asm/ontop_arm_aapcs_elf_gas.S
vendored
Normal file
93
third_party/context/src/asm/ontop_arm_aapcs_elf_gas.S
vendored
Normal file
@ -0,0 +1,93 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
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| *
|
||||
* ------------------------------------------------- *
|
||||
* | s16 | s17 | s18 | s19 | s20 | s21 | s22 | s23 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
|
||||
* ------------------------------------------------- *
|
||||
* | s24 | s25 | s26 | s27 | s28 | s29 | s30 | s31 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0x40| 0x44| 0x48| 0x4c| 0x50| 0x54| 0x58| 0x5c| *
|
||||
* ------------------------------------------------- *
|
||||
* |hiddn| v1 | v2 | v3 | v4 | v5 | v6 | v7 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0x60| 0x64| 0x68| 0x6c| 0x70| 0x74| 0x78| 0x7c| *
|
||||
* ------------------------------------------------- *
|
||||
* | v8 | lr | pc | FCTX| DATA| | *
|
||||
* ------------------------------------------------- *
|
||||
* *
|
||||
*******************************************************/
|
||||
|
||||
.file "ontop_arm_aapcs_elf_gas.S"
|
||||
.text
|
||||
.globl ontop_fcontext
|
||||
.align 2
|
||||
.type ontop_fcontext,%function
|
||||
.syntax unified
|
||||
ontop_fcontext:
|
||||
@ save LR as PC
|
||||
push {lr}
|
||||
@ save hidden,V1-V8,LR
|
||||
push {a1,v1-v8,lr}
|
||||
|
||||
@ prepare stack for FPU
|
||||
sub sp, sp, #64
|
||||
#if (defined(__VFP_FP__) && !defined(__SOFTFP__))
|
||||
@ save S16-S31
|
||||
vstmia sp, {d8-d15}
|
||||
#endif
|
||||
|
||||
@ store RSP (pointing to context-data) in A1
|
||||
mov a1, sp
|
||||
|
||||
@ restore RSP (pointing to context-data) from A2
|
||||
mov sp, a2
|
||||
|
||||
@ store parent context in A2
|
||||
mov a2, a1
|
||||
|
||||
#if (defined(__VFP_FP__) && !defined(__SOFTFP__))
|
||||
@ restore S16-S31
|
||||
vldmia sp, {d8-d15}
|
||||
#endif
|
||||
@ prepare stack for FPU
|
||||
add sp, sp, #64
|
||||
|
||||
@ restore hidden,V1-V8,LR
|
||||
pop {a1,v1-v8,lr}
|
||||
|
||||
@ return transfer_t from jump
|
||||
str a2, [a1, #0]
|
||||
str a3, [a1, #4]
|
||||
@ pass transfer_t as first arg in context function
|
||||
@ A1 == hidden, A2 == FCTX, A3 == DATA
|
||||
|
||||
@ skip PC
|
||||
add sp, sp, #4
|
||||
|
||||
@ jump to ontop-function
|
||||
bx a4
|
||||
.size ontop_fcontext,.-ontop_fcontext
|
||||
|
||||
@ Mark that we don't need executable stack.
|
||||
.section .note.GNU-stack,"",%progbits
|
100
third_party/context/src/asm/ontop_arm_aapcs_macho_gas.S
vendored
Normal file
100
third_party/context/src/asm/ontop_arm_aapcs_macho_gas.S
vendored
Normal file
@ -0,0 +1,100 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
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| *
|
||||
* ------------------------------------------------- *
|
||||
* | s16 | s17 | s18 | s19 | s20 | s21 | s22 | s23 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
|
||||
* ------------------------------------------------- *
|
||||
* | s24 | s25 | s26 | s27 | s28 | s29 | s30 | s31 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| *
|
||||
* ------------------------------------------------- *
|
||||
* | sjlj|hiddn| v1 | v2 | v3 | v4 | v5 | v6 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
|
||||
* ------------------------------------------------- *
|
||||
* | v7 | v8 | lr | pc | FCTX| DATA| | *
|
||||
* ------------------------------------------------- *
|
||||
* *
|
||||
*******************************************************/
|
||||
|
||||
.text
|
||||
.globl _ontop_fcontext
|
||||
.align 2
|
||||
_ontop_fcontext:
|
||||
@ save LR as PC
|
||||
push {lr}
|
||||
@ save hidden,V1-V8,LR
|
||||
push {a1,v1-v8,lr}
|
||||
|
||||
@ locate TLS to save/restore SjLj handler
|
||||
mrc p15, 0, v2, c13, c0, #3
|
||||
bic v2, v2, #3
|
||||
|
||||
@ load TLS[__PTK_LIBC_DYLD_Unwind_SjLj_Key]
|
||||
ldr v1, [v2, #72]
|
||||
@ save SjLj handler
|
||||
push {v1}
|
||||
|
||||
@ prepare stack for FPU
|
||||
sub sp, sp, #64
|
||||
#if (defined(__VFP_FP__) && !defined(__SOFTFP__))
|
||||
@ save S16-S31
|
||||
vstmia sp, {d8-d15}
|
||||
#endif
|
||||
|
||||
@ store RSP (pointing to context-data) in A1
|
||||
mov a1, sp
|
||||
|
||||
@ restore RSP (pointing to context-data) from A2
|
||||
mov sp, a2
|
||||
|
||||
#if (defined(__VFP_FP__) && !defined(__SOFTFP__))
|
||||
@ restore S16-S31
|
||||
vldmia sp, {d8-d15}
|
||||
#endif
|
||||
@ prepare stack for FPU
|
||||
add sp, sp, #64
|
||||
|
||||
@ restore SjLj handler
|
||||
pop {v1}
|
||||
@ store SjLj handler in TLS
|
||||
str v1, [v2, #72]
|
||||
|
||||
@ store parent context in A2
|
||||
mov a2, a1
|
||||
|
||||
@ restore hidden,V1-V8,LR
|
||||
pop {a1,v1-v8,lr}
|
||||
|
||||
@ return transfer_t from jump
|
||||
str a2, [a1, #0]
|
||||
str a3, [a1, #4]
|
||||
@ pass transfer_t as first arg in context function
|
||||
@ A1 == hidden, A2 == FCTX, A3 == DATA
|
||||
|
||||
@ skip PC
|
||||
add sp, sp, #4
|
||||
|
||||
@ jump to ontop-function
|
||||
bx a4
|
86
third_party/context/src/asm/ontop_arm_aapcs_pe_armasm.asm
vendored
Normal file
86
third_party/context/src/asm/ontop_arm_aapcs_pe_armasm.asm
vendored
Normal file
@ -0,0 +1,86 @@
|
||||
;/*
|
||||
; Copyright Oliver Kowalke 2009.
|
||||
; 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| *
|
||||
; * ------------------------------------------------- *
|
||||
; * |deall|limit| base|hiddn| v1 | v2 | v3 | v4 | *
|
||||
; * ------------------------------------------------- *
|
||||
; * ------------------------------------------------- *
|
||||
; * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
; * ------------------------------------------------- *
|
||||
; * | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
|
||||
; * ------------------------------------------------- *
|
||||
; * | v5 | v6 | v7 | v8 | lr | pc | FCTX| DATA| *
|
||||
; * ------------------------------------------------- *
|
||||
; * *
|
||||
; *******************************************************
|
||||
|
||||
AREA |.text|, CODE
|
||||
ALIGN 4
|
||||
EXPORT ontop_fcontext
|
||||
|
||||
ontop_fcontext PROC
|
||||
; save LR as PC
|
||||
push {lr}
|
||||
; save hidden,V1-V8,LR
|
||||
push {a1,v1-v8,lr}
|
||||
|
||||
; load TIB to save/restore thread size and limit.
|
||||
; we do not need preserve CPU flag and can use it's arg register
|
||||
mrc p15, #0, v1, c13, c0, #2
|
||||
|
||||
; save current stack base
|
||||
ldr a1, [v1, #0x04]
|
||||
push {a1}
|
||||
; save current stack limit
|
||||
ldr a1, [v1, #0x08]
|
||||
push {a1}
|
||||
; save current deallocation stack
|
||||
ldr a1, [v1, #0xe0c]
|
||||
push {a1}
|
||||
|
||||
; store RSP (pointing to context-data) in A1
|
||||
mov a1, sp
|
||||
|
||||
; restore RSP (pointing to context-data) from A2
|
||||
mov sp, a2
|
||||
|
||||
; restore stack base
|
||||
pop {a1}
|
||||
str a1, [v1, #0x04]
|
||||
; restore stack limit
|
||||
pop {a1}
|
||||
str a1, [v1, #0x08]
|
||||
; restore deallocation stack
|
||||
pop {a1}
|
||||
str a1, [v1, #0xe0c]
|
||||
|
||||
; store parent context in A2
|
||||
mov a2, a1
|
||||
|
||||
; restore hidden,V1-V8,LR
|
||||
pop {a1,v1-v8,lr}
|
||||
|
||||
; return transfer_t from jump
|
||||
str a2, [a1, #0]
|
||||
str a3, [a1, #4]
|
||||
; pass transfer_t as first arg in context function
|
||||
; A1 == hidden, A2 == FCTX, A3 == DATA
|
||||
|
||||
; skip PC
|
||||
add sp, sp, #4
|
||||
|
||||
; jump to ontop-function
|
||||
bx a4
|
||||
|
||||
ENDP
|
||||
END
|
24
third_party/context/src/asm/ontop_combined_sysv_macho_gas.S
vendored
Normal file
24
third_party/context/src/asm/ontop_combined_sysv_macho_gas.S
vendored
Normal file
@ -0,0 +1,24 @@
|
||||
/*
|
||||
Copyright Sergue E. Leontiev 2013.
|
||||
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)
|
||||
*/
|
||||
|
||||
// Stub file for universal binary
|
||||
|
||||
#if defined(__i386__)
|
||||
#include "ontop_i386_sysv_macho_gas.S"
|
||||
#elif defined(__x86_64__)
|
||||
#include "ontop_x86_64_sysv_macho_gas.S"
|
||||
#elif defined(__ppc__)
|
||||
#include "ontop_ppc32_sysv_macho_gas.S"
|
||||
#elif defined(__ppc64__)
|
||||
#include "ontop_ppc64_sysv_macho_gas.S"
|
||||
#elif defined(__arm__)
|
||||
#include "ontop_arm_aapcs_macho_gas.S"
|
||||
#elif defined(__arm64__)
|
||||
#include "ontop_arm64_aapcs_macho_gas.S"
|
||||
#else
|
||||
#error "No arch's"
|
||||
#endif
|
131
third_party/context/src/asm/ontop_i386_ms_pe_clang_gas.S
vendored
Normal file
131
third_party/context/src/asm/ontop_i386_ms_pe_clang_gas.S
vendored
Normal file
@ -0,0 +1,131 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
Copyright Thomas Sailer 2013.
|
||||
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 | *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
* | 0h | 04h | 08h | 0ch | 010h | 014h | 018h | 01ch | *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
* | fc_mxcsr|fc_x87_cw| fc_strg |fc_deallo| limit | base | fc_seh | EDI | *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
* | 020h | 024h | 028h | 02ch | 030h | 034h | 038h | 03ch | *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
* | ESI | EBX | EBP | EIP | to | data | EH NXT |SEH HNDLR| *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
**************************************************************************************/
|
||||
|
||||
.file "ontop_i386_ms_pe_clang_gas.S"
|
||||
.text
|
||||
.p2align 4,,15
|
||||
|
||||
/* mark as using no unregistered SEH handlers */
|
||||
.globl @feat.00
|
||||
.def @feat.00; .scl 3; .type 0; .endef
|
||||
.set @feat.00, 1
|
||||
|
||||
.globl _ontop_fcontext
|
||||
.def _ontop_fcontext; .scl 2; .type 32; .endef
|
||||
_ontop_fcontext:
|
||||
/* prepare stack */
|
||||
leal -0x2c(%esp), %esp
|
||||
|
||||
#if !defined(BOOST_USE_TSX)
|
||||
/* save MMX control- and status-word */
|
||||
stmxcsr (%esp)
|
||||
/* save x87 control-word */
|
||||
fnstcw 0x4(%esp)
|
||||
#endif
|
||||
|
||||
/* load NT_TIB */
|
||||
movl %fs:(0x18), %edx
|
||||
/* load fiber local storage */
|
||||
movl 0x10(%edx), %eax
|
||||
movl %eax, 0x8(%esp)
|
||||
/* load current dealloction stack */
|
||||
movl 0xe0c(%edx), %eax
|
||||
movl %eax, 0xc(%esp)
|
||||
/* load current stack limit */
|
||||
movl 0x8(%edx), %eax
|
||||
movl %eax, 0x10(%esp)
|
||||
/* load current stack base */
|
||||
movl 0x4(%edx), %eax
|
||||
movl %eax, 0x14(%esp)
|
||||
/* load current SEH exception list */
|
||||
movl (%edx), %eax
|
||||
movl %eax, 0x18(%esp)
|
||||
|
||||
movl %edi, 0x1c(%esp) /* save EDI */
|
||||
movl %esi, 0x20(%esp) /* save ESI */
|
||||
movl %ebx, 0x24(%esp) /* save EBX */
|
||||
movl %ebp, 0x28(%esp) /* save EBP */
|
||||
|
||||
/* store ESP (pointing to context-data) in ECX */
|
||||
movl %esp, %ecx
|
||||
|
||||
/* first arg of ontop_fcontext() == fcontext to jump to */
|
||||
movl 0x30(%esp), %eax
|
||||
|
||||
/* pass parent fcontext_t */
|
||||
movl %ecx, 0x30(%eax)
|
||||
|
||||
/* second arg of ontop_fcontext() == data to be transferred */
|
||||
movl 0x34(%esp), %ecx
|
||||
|
||||
/* pass data */
|
||||
movl %ecx, 0x34(%eax)
|
||||
|
||||
/* third arg of ontop_fcontext() == ontop-function */
|
||||
movl 0x38(%esp), %ecx
|
||||
|
||||
/* restore ESP (pointing to context-data) from EDX */
|
||||
movl %eax, %esp
|
||||
|
||||
#if !defined(BOOST_USE_TSX)
|
||||
/* restore MMX control- and status-word */
|
||||
ldmxcsr (%esp)
|
||||
/* restore x87 control-word */
|
||||
fldcw 0x4(%esp)
|
||||
#endif
|
||||
|
||||
/* restore NT_TIB into EDX */
|
||||
movl %fs:(0x18), %edx
|
||||
/* restore fiber local storage */
|
||||
movl 0x8(%esp), %eax
|
||||
movl %eax, 0x10(%edx)
|
||||
/* restore current deallocation stack */
|
||||
movl 0xc(%esp), %eax
|
||||
movl %eax, 0xe0c(%edx)
|
||||
/* restore current stack limit */
|
||||
movl 0x10(%esp), %eax
|
||||
movl %eax, 0x08(%edx)
|
||||
/* restore current stack base */
|
||||
movl 0x14(%esp), %eax
|
||||
movl %eax, 0x04(%edx)
|
||||
/* restore current SEH exception list */
|
||||
movl 0x18(%esp), %eax
|
||||
movl %eax, (%edx)
|
||||
|
||||
movl 0x1c(%esp), %edi /* restore EDI */
|
||||
movl 0x20(%esp), %esi /* restore ESI */
|
||||
movl 0x24(%esp), %ebx /* restore EBX */
|
||||
movl 0x28(%esp), %ebp /* restore EBP */
|
||||
|
||||
/* prepare stack */
|
||||
leal 0x2c(%esp), %esp
|
||||
|
||||
/* keep return-address on stack */
|
||||
|
||||
/* jump to context */
|
||||
jmp *%ecx
|
||||
|
||||
.section .drectve
|
||||
.ascii " -export:\"_ontop_fcontext\""
|
131
third_party/context/src/asm/ontop_i386_ms_pe_gas.asm
vendored
Normal file
131
third_party/context/src/asm/ontop_i386_ms_pe_gas.asm
vendored
Normal file
@ -0,0 +1,131 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
Copyright Thomas Sailer 2013.
|
||||
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 | *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
* | 0h | 04h | 08h | 0ch | 010h | 014h | 018h | 01ch | *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
* | fc_mxcsr|fc_x87_cw| fc_strg |fc_deallo| limit | base | fc_seh | EDI | *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
* | 020h | 024h | 028h | 02ch | 030h | 034h | 038h | 03ch | *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
* | ESI | EBX | EBP | EIP | to | data | EH NXT |SEH HNDLR| *
|
||||
* --------------------------------------------------------------------------------- *
|
||||
**************************************************************************************/
|
||||
|
||||
.file "ontop_i386_ms_pe_gas.asm"
|
||||
.text
|
||||
.p2align 4,,15
|
||||
|
||||
/* mark as using no unregistered SEH handlers */
|
||||
.globl @feat.00
|
||||
.def @feat.00; .scl 3; .type 0; .endef
|
||||
.set @feat.00, 1
|
||||
|
||||
.globl _ontop_fcontext
|
||||
.def _ontop_fcontext; .scl 2; .type 32; .endef
|
||||
_ontop_fcontext:
|
||||
/* prepare stack */
|
||||
leal -0x2c(%esp), %esp
|
||||
|
||||
#if !defined(BOOST_USE_TSX)
|
||||
/* save MMX control- and status-word */
|
||||
stmxcsr (%esp)
|
||||
/* save x87 control-word */
|
||||
fnstcw 0x4(%esp)
|
||||
#endif
|
||||
|
||||
/* load NT_TIB */
|
||||
movl %fs:(0x18), %edx
|
||||
/* load fiber local storage */
|
||||
movl 0x10(%edx), %eax
|
||||
movl %eax, 0x8(%esp)
|
||||
/* load current dealloction stack */
|
||||
movl 0xe0c(%edx), %eax
|
||||
movl %eax, 0xc(%esp)
|
||||
/* load current stack limit */
|
||||
movl 0x8(%edx), %eax
|
||||
movl %eax, 0x10(%esp)
|
||||
/* load current stack base */
|
||||
movl 0x4(%edx), %eax
|
||||
movl %eax, 0x14(%esp)
|
||||
/* load current SEH exception list */
|
||||
movl (%edx), %eax
|
||||
movl %eax, 0x18(%esp)
|
||||
|
||||
movl %edi, 0x1c(%esp) /* save EDI */
|
||||
movl %esi, 0x20(%esp) /* save ESI */
|
||||
movl %ebx, 0x24(%esp) /* save EBX */
|
||||
movl %ebp, 0x28(%esp) /* save EBP */
|
||||
|
||||
/* store ESP (pointing to context-data) in ECX */
|
||||
movl %esp, %ecx
|
||||
|
||||
/* first arg of ontop_fcontext() == fcontext to jump to */
|
||||
movl 0x30(%esp), %eax
|
||||
|
||||
/* pass parent fcontext_t */
|
||||
movl %ecx, 0x30(%eax)
|
||||
|
||||
/* second arg of ontop_fcontext() == data to be transferred */
|
||||
movl 0x34(%esp), %ecx
|
||||
|
||||
/* pass data */
|
||||
movl %ecx, 0x34(%eax)
|
||||
|
||||
/* third arg of ontop_fcontext() == ontop-function */
|
||||
movl 0x38(%esp), %ecx
|
||||
|
||||
/* restore ESP (pointing to context-data) from EDX */
|
||||
movl %eax, %esp
|
||||
|
||||
#if !defined(BOOST_USE_TSX)
|
||||
/* restore MMX control- and status-word */
|
||||
ldmxcsr (%esp)
|
||||
/* restore x87 control-word */
|
||||
fldcw 0x4(%esp)
|
||||
#endif
|
||||
|
||||
/* restore NT_TIB into EDX */
|
||||
movl %fs:(0x18), %edx
|
||||
/* restore fiber local storage */
|
||||
movl 0x8(%esp), %eax
|
||||
movl %eax, 0x10(%edx)
|
||||
/* restore current deallocation stack */
|
||||
movl 0xc(%esp), %eax
|
||||
movl %eax, 0xe0c(%edx)
|
||||
/* restore current stack limit */
|
||||
movl 0x10(%esp), %eax
|
||||
movl %eax, 0x08(%edx)
|
||||
/* restore current stack base */
|
||||
movl 0x14(%esp), %eax
|
||||
movl %eax, 0x04(%edx)
|
||||
/* restore current SEH exception list */
|
||||
movl 0x18(%esp), %eax
|
||||
movl %eax, (%edx)
|
||||
|
||||
movl 0x1c(%esp), %edi /* restore EDI */
|
||||
movl 0x20(%esp), %esi /* restore ESI */
|
||||
movl 0x24(%esp), %ebx /* restore EBX */
|
||||
movl 0x28(%esp), %ebp /* restore EBP */
|
||||
|
||||
/* prepare stack */
|
||||
leal 0x2c(%esp), %esp
|
||||
|
||||
/* keep return-address on stack */
|
||||
|
||||
/* jump to context */
|
||||
jmp *%ecx
|
||||
|
||||
.section .drectve
|
||||
.ascii " -export:\"ontop_fcontext\""
|
124
third_party/context/src/asm/ontop_i386_ms_pe_masm.asm
vendored
Normal file
124
third_party/context/src/asm/ontop_i386_ms_pe_masm.asm
vendored
Normal file
@ -0,0 +1,124 @@
|
||||
|
||||
; Copyright Oliver Kowalke 2009.
|
||||
; 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 |
|
||||
; ---------------------------------------------------------------------------------
|
||||
; | 0h | 04h | 08h | 0ch | 010h | 014h | 018h | 01ch |
|
||||
; ---------------------------------------------------------------------------------
|
||||
; | fc_mxcsr|fc_x87_cw| fc_strg |fc_deallo| limit | base | fc_seh | EDI |
|
||||
; ---------------------------------------------------------------------------------
|
||||
; ---------------------------------------------------------------------------------
|
||||
; | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|
||||
; ---------------------------------------------------------------------------------
|
||||
; | 020h | 024h | 028h | 02ch | 030h | 034h | 038h | 03ch |
|
||||
; ---------------------------------------------------------------------------------
|
||||
; | ESI | EBX | EBP | EIP | to | data | EH NXT |SEH HNDLR|
|
||||
; ---------------------------------------------------------------------------------
|
||||
|
||||
.386
|
||||
.XMM
|
||||
.model flat, c
|
||||
.code
|
||||
|
||||
ontop_fcontext PROC BOOST_CONTEXT_EXPORT
|
||||
; prepare stack
|
||||
lea esp, [esp-02ch]
|
||||
|
||||
IFNDEF BOOST_USE_TSX
|
||||
; save MMX control- and status-word
|
||||
stmxcsr [esp]
|
||||
; save x87 control-word
|
||||
fnstcw [esp+04h]
|
||||
ENDIF
|
||||
|
||||
assume fs:nothing
|
||||
; load NT_TIB into ECX
|
||||
mov edx, fs:[018h]
|
||||
assume fs:error
|
||||
; load fiber local storage
|
||||
mov eax, [edx+010h]
|
||||
mov [esp+08h], eax
|
||||
; load current deallocation stack
|
||||
mov eax, [edx+0e0ch]
|
||||
mov [esp+0ch], eax
|
||||
; load current stack limit
|
||||
mov eax, [edx+08h]
|
||||
mov [esp+010h], eax
|
||||
; load current stack base
|
||||
mov eax, [edx+04h]
|
||||
mov [esp+014h], eax
|
||||
; load current SEH exception list
|
||||
mov eax, [edx]
|
||||
mov [esp+018h], eax
|
||||
|
||||
mov [esp+01ch], edi ; save EDI
|
||||
mov [esp+020h], esi ; save ESI
|
||||
mov [esp+024h], ebx ; save EBX
|
||||
mov [esp+028h], ebp ; save EBP
|
||||
|
||||
; store ESP (pointing to context-data) in ECX
|
||||
mov ecx, esp
|
||||
|
||||
; first arg of ontop_fcontext() == fcontext to jump to
|
||||
mov eax, [esp+030h]
|
||||
|
||||
; pass parent fcontext_t
|
||||
mov [eax+030h], ecx
|
||||
|
||||
; second arg of ontop_fcontext() == data to be transferred
|
||||
mov ecx, [esp+034h]
|
||||
|
||||
; pass data
|
||||
mov [eax+034h], ecx
|
||||
|
||||
; third arg of ontop_fcontext() == ontop-function
|
||||
mov ecx, [esp+038h]
|
||||
|
||||
; restore ESP (pointing to context-data) from EAX
|
||||
mov esp, eax
|
||||
|
||||
IFNDEF BOOST_USE_TSX
|
||||
; restore MMX control- and status-word
|
||||
ldmxcsr [esp]
|
||||
; restore x87 control-word
|
||||
fldcw [esp+04h]
|
||||
ENDIF
|
||||
|
||||
assume fs:nothing
|
||||
; load NT_TIB into EDX
|
||||
mov edx, fs:[018h]
|
||||
assume fs:error
|
||||
; restore fiber local storage
|
||||
mov eax, [esp+08h]
|
||||
mov [edx+010h], eax
|
||||
; restore current deallocation stack
|
||||
mov eax, [esp+0ch]
|
||||
mov [edx+0e0ch], eax
|
||||
; restore current stack limit
|
||||
mov eax, [esp+010h]
|
||||
mov [edx+08h], eax
|
||||
; restore current stack base
|
||||
mov eax, [esp+014h]
|
||||
mov [edx+04h], eax
|
||||
; restore current SEH exception list
|
||||
mov eax, [esp+018h]
|
||||
mov [edx], eax
|
||||
|
||||
mov edi, [esp+01ch] ; restore EDI
|
||||
mov esi, [esp+020h] ; restore ESI
|
||||
mov ebx, [esp+024h] ; restore EBX
|
||||
mov ebp, [esp+028h] ; restore EBP
|
||||
|
||||
; prepare stack
|
||||
lea esp, [esp+02ch]
|
||||
|
||||
; keep return-address on stack
|
||||
|
||||
; jump to context
|
||||
jmp ecx
|
||||
ontop_fcontext ENDP
|
||||
END
|
100
third_party/context/src/asm/ontop_i386_sysv_elf_gas.S
vendored
Normal file
100
third_party/context/src/asm/ontop_i386_sysv_elf_gas.S
vendored
Normal file
@ -0,0 +1,100 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
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 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | fc_mxcsr|fc_x87_cw| guard | EDI | ESI | EBX | EBP | EIP | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0x20 | 0x24 | 0x28 | | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | hidden | to | data | | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* *
|
||||
****************************************************************************************/
|
||||
|
||||
.file "ontop_i386_sysv_elf_gas.S"
|
||||
.text
|
||||
.globl ontop_fcontext
|
||||
.align 2
|
||||
.type ontop_fcontext,@function
|
||||
ontop_fcontext:
|
||||
leal -0x1c(%esp), %esp /* prepare stack */
|
||||
|
||||
#if !defined(BOOST_USE_TSX)
|
||||
stmxcsr (%esp) /* save MMX control- and status-word */
|
||||
fnstcw 0x4(%esp) /* save x87 control-word */
|
||||
#endif
|
||||
|
||||
#if defined(BOOST_CONTEXT_TLS_STACK_PROTECTOR)
|
||||
movl %gs:0x14, %ecx /* read stack guard from TLS record */
|
||||
movl %ecx, 0x8(%esp) /* save stack guard */
|
||||
#endif
|
||||
|
||||
movl %edi, 0xc(%esp) /* save EDI */
|
||||
movl %esi, 0x10(%esp) /* save ESI */
|
||||
movl %ebx, 0x14(%esp) /* save EBX */
|
||||
movl %ebp, 0x18(%esp) /* save EBP */
|
||||
|
||||
/* store ESP (pointing to context-data) in ECX */
|
||||
movl %esp, %ecx
|
||||
|
||||
/* first arg of ontop_fcontext() == fcontext to jump to */
|
||||
movl 0x24(%esp), %eax
|
||||
|
||||
/* pass parent fcontext_t */
|
||||
movl %ecx, 0x24(%eax)
|
||||
|
||||
/* second arg of ontop_fcontext() == data to be transferred */
|
||||
movl 0x28(%esp), %ecx
|
||||
|
||||
/* pass data */
|
||||
movl %ecx, 0x28(%eax)
|
||||
|
||||
/* third arg of ontop_fcontext() == ontop-function */
|
||||
movl 0x2c(%esp), %ecx
|
||||
|
||||
/* restore ESP (pointing to context-data) from EAX */
|
||||
movl %eax, %esp
|
||||
|
||||
/* address of returned transport_t */
|
||||
movl 0x20(%esp), %eax
|
||||
/* return parent fcontext_t */
|
||||
movl %ecx, (%eax)
|
||||
/* return data */
|
||||
movl %edx, 0x4(%eax)
|
||||
|
||||
#if !defined(BOOST_USE_TSX)
|
||||
ldmxcsr (%esp) /* restore MMX control- and status-word */
|
||||
fldcw 0x4(%esp) /* restore x87 control-word */
|
||||
#endif
|
||||
|
||||
#if defined(BOOST_CONTEXT_TLS_STACK_PROTECTOR)
|
||||
movl 0x8(%esp), %edx /* load stack guard */
|
||||
movl %edx, %gs:0x14 /* restore stack guard to TLS record */
|
||||
#endif
|
||||
|
||||
movl 0xc(%esp), %edi /* restore EDI */
|
||||
movl 0x10(%esp), %esi /* restore ESI */
|
||||
movl 0x14(%esp), %ebx /* restore EBX */
|
||||
movl 0x18(%esp), %ebp /* restore EBP */
|
||||
|
||||
leal 0x1c(%esp), %esp /* prepare stack */
|
||||
|
||||
/* jump to context */
|
||||
jmp *%ecx
|
||||
.size ontop_fcontext,.-ontop_fcontext
|
||||
|
||||
/* Mark that we don't need executable stack. */
|
||||
.section .note.GNU-stack,"",%progbits
|
81
third_party/context/src/asm/ontop_i386_sysv_macho_gas.S
vendored
Normal file
81
third_party/context/src/asm/ontop_i386_sysv_macho_gas.S
vendored
Normal file
@ -0,0 +1,81 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
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 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | fc_mxcsr|fc_x87_cw| EDI | ESI | EBX | EBP | EIP | to | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | 0x20 | | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* | data | | *
|
||||
* ---------------------------------------------------------------------------------- *
|
||||
* *
|
||||
****************************************************************************************/
|
||||
|
||||
.text
|
||||
.globl _ontop_fcontext
|
||||
.align 2
|
||||
_ontop_fcontext:
|
||||
leal -0x18(%esp), %esp /* prepare stack */
|
||||
|
||||
#if !defined(BOOST_USE_TSX)
|
||||
stmxcsr (%esp) /* save MMX control- and status-word */
|
||||
fnstcw 0x4(%esp) /* save x87 control-word */
|
||||
#endif
|
||||
|
||||
movl %edi, 0x8(%esp) /* save EDI */
|
||||
movl %esi, 0xc(%esp) /* save ESI */
|
||||
movl %ebx, 0x10(%esp) /* save EBX */
|
||||
movl %ebp, 0x14(%esp) /* save EBP */
|
||||
|
||||
/* store ESP (pointing to context-data) in ECX */
|
||||
movl %esp, %ecx
|
||||
|
||||
/* first arg of ontop_fcontext() == fcontext to jump to */
|
||||
movl 0x1c(%esp), %eax
|
||||
|
||||
/* pass parent fcontext_t */
|
||||
movl %ecx, 0x1c(%eax)
|
||||
|
||||
/* second arg of ontop_fcontext() == data to be transferred */
|
||||
movl 0x20(%esp), %ecx
|
||||
|
||||
/* pass data */
|
||||
movl %ecx, 0x20(%eax)
|
||||
|
||||
/* third arg of ontop_fcontext() == ontop-function */
|
||||
movl 0x24(%esp), %ecx
|
||||
|
||||
/* restore ESP (pointing to context-data) from EAX */
|
||||
movl %eax, %esp
|
||||
|
||||
/* return parent fcontext_t */
|
||||
movl %ecx, %eax
|
||||
/* returned data is stored in EDX */
|
||||
|
||||
#if !defined(BOOST_USE_TSX)
|
||||
ldmxcsr (%esp) /* restore MMX control- and status-word */
|
||||
fldcw 0x4(%esp) /* restore x87 control-word */
|
||||
#endif
|
||||
|
||||
movl 0x8(%esp), %edi /* restore EDI */
|
||||
movl 0xc(%esp), %esi /* restore ESI */
|
||||
movl 0x10(%esp), %ebx /* restore EBX */
|
||||
movl 0x14(%esp), %ebp /* restore EBP */
|
||||
|
||||
leal 0x18(%esp), %esp /* prepare stack */
|
||||
|
||||
/* jump to context */
|
||||
jmp *%ecx
|
16
third_party/context/src/asm/ontop_i386_x86_64_sysv_macho_gas.S
vendored
Normal file
16
third_party/context/src/asm/ontop_i386_x86_64_sysv_macho_gas.S
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
/*
|
||||
Copyright Sergue E. Leontiev 2013.
|
||||
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)
|
||||
*/
|
||||
|
||||
// Stub file for universal binary
|
||||
|
||||
#if defined(__i386__)
|
||||
#include "ontop_i386_sysv_macho_gas.S"
|
||||
#elif defined(__x86_64__)
|
||||
#include "ontop_x86_64_sysv_macho_gas.S"
|
||||
#else
|
||||
#error "No arch's"
|
||||
#endif
|
118
third_party/context/src/asm/ontop_loongarch64_sysv_elf_gas.S
vendored
Normal file
118
third_party/context/src/asm/ontop_loongarch64_sysv_elf_gas.S
vendored
Normal file
@ -0,0 +1,118 @@
|
||||
/*******************************************************
|
||||
* *
|
||||
* ------------------------------------------------- *
|
||||
* | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0 | 8 | 16 | 24 | *
|
||||
* ------------------------------------------------- *
|
||||
* | FS0 | FS1 | FS2 | FS3 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 40 | 48 | 56 | *
|
||||
* ------------------------------------------------- *
|
||||
* | FS4 | FS5 | FS6 | FS7 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 64 | 72 | 80 | 88 | *
|
||||
* ------------------------------------------------- *
|
||||
* | S0 | S1 | S2 | S3 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
|
||||
* ------------------------------------------------- *
|
||||
* | S4 | S5 | S6 | S7 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | *
|
||||
* ------------------------------------------------- *
|
||||
* | S8 | FP | RA | PC | *
|
||||
* ------------------------------------------------- *
|
||||
* *
|
||||
* *****************************************************/
|
||||
|
||||
.file "ontop_loongarch64_sysv_elf_gas.S"
|
||||
.text
|
||||
.globl ontop_fcontext
|
||||
.align 2
|
||||
.type ontop_fcontext,@function
|
||||
ontop_fcontext:
|
||||
# reserve space on stack
|
||||
addi.d $sp, $sp, -160
|
||||
|
||||
# save fs0 - fs7
|
||||
fst.d $fs0, $sp, 0
|
||||
fst.d $fs1, $sp, 8
|
||||
fst.d $fs2, $sp, 16
|
||||
fst.d $fs3, $sp, 24
|
||||
fst.d $fs4, $sp, 32
|
||||
fst.d $fs5, $sp, 40
|
||||
fst.d $fs6, $sp, 48
|
||||
fst.d $fs7, $sp, 56
|
||||
|
||||
# save s0 - s8, fp, ra
|
||||
st.d $s0, $sp, 64
|
||||
st.d $s1, $sp, 72
|
||||
st.d $s2, $sp, 80
|
||||
st.d $s3, $sp, 88
|
||||
st.d $s4, $sp, 96
|
||||
st.d $s5, $sp, 104
|
||||
st.d $s6, $sp, 112
|
||||
st.d $s7, $sp, 120
|
||||
st.d $s8, $sp, 128
|
||||
st.d $fp, $sp, 136
|
||||
st.d $ra, $sp, 144
|
||||
|
||||
# save RA as PC
|
||||
st.d $ra, $sp, 152
|
||||
|
||||
# store SP (pointing to context-data) in A3
|
||||
move $a3, $sp
|
||||
|
||||
# restore SP (pointing to context-data) from A0
|
||||
move $sp, $a0
|
||||
|
||||
# load fs0 - fs11
|
||||
fld.d $fs0, $sp, 0
|
||||
fld.d $fs1, $sp, 8
|
||||
fld.d $fs2, $sp, 16
|
||||
fld.d $fs3, $sp, 24
|
||||
fld.d $fs4, $sp, 32
|
||||
fld.d $fs5, $sp, 40
|
||||
fld.d $fs6, $sp, 48
|
||||
fld.d $fs7, $sp, 56
|
||||
|
||||
#load s0 - s11, fp, ra
|
||||
ld.d $s0, $sp, 64
|
||||
ld.d $s1, $sp, 72
|
||||
ld.d $s2, $sp, 80
|
||||
ld.d $s3, $sp, 88
|
||||
ld.d $s4, $sp, 96
|
||||
ld.d $s5, $sp, 104
|
||||
ld.d $s6, $sp, 112
|
||||
ld.d $s7, $sp, 120
|
||||
ld.d $s8, $sp, 128
|
||||
ld.d $fp, $sp, 136
|
||||
ld.d $ra, $sp, 144
|
||||
|
||||
# return transfer_t from jump
|
||||
# pass transfer_t as first arg in context function
|
||||
# a0 == FCTX, a1 == DATA
|
||||
move $a0, $a3
|
||||
|
||||
# adjust stack
|
||||
addi.d $sp, $sp, 160
|
||||
|
||||
# jump to context
|
||||
jr $a2
|
||||
.size ontop_fcontext, .-ontop_fcontext
|
||||
|
||||
/* Mark that we don't need executable stack. */
|
||||
.section .note.GNU-stack,"",%progbits
|
120
third_party/context/src/asm/ontop_mips32_o32_elf_gas.S
vendored
Normal file
120
third_party/context/src/asm/ontop_mips32_o32_elf_gas.S
vendored
Normal file
@ -0,0 +1,120 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
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 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F20 | F22 | F24 | F26 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F28 | F30 | S0 | S1 | S2 | S3 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | *
|
||||
* ------------------------------------------------- *
|
||||
* | S4 | S5 | S6 | S7 | FP |hiddn| RA | PC | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
|
||||
* ------------------------------------------------- *
|
||||
* | ABI ARGS | GP | FCTX| DATA| | *
|
||||
* ------------------------------------------------- *
|
||||
* *
|
||||
* *****************************************************/
|
||||
|
||||
.file "ontop_mips32_o32_elf_gas.S"
|
||||
.text
|
||||
.globl ontop_fcontext
|
||||
.align 2
|
||||
.type ontop_fcontext,@function
|
||||
.ent ontop_fcontext
|
||||
ontop_fcontext:
|
||||
# reserve space on stack
|
||||
addiu $sp, $sp, -96
|
||||
|
||||
sw $s0, 48($sp) # save S0
|
||||
sw $s1, 52($sp) # save S1
|
||||
sw $s2, 56($sp) # save S2
|
||||
sw $s3, 60($sp) # save S3
|
||||
sw $s4, 64($sp) # save S4
|
||||
sw $s5, 68($sp) # save S5
|
||||
sw $s6, 72($sp) # save S6
|
||||
sw $s7, 76($sp) # save S7
|
||||
sw $fp, 80($sp) # save FP
|
||||
sw $a0, 84($sp) # save hidden, address of returned transfer_t
|
||||
sw $ra, 88($sp) # save RA
|
||||
sw $ra, 92($sp) # save RA as PC
|
||||
|
||||
#if defined(__mips_hard_float)
|
||||
s.d $f20, ($sp) # save F20
|
||||
s.d $f22, 8($sp) # save F22
|
||||
s.d $f24, 16($sp) # save F24
|
||||
s.d $f26, 24($sp) # save F26
|
||||
s.d $f28, 32($sp) # save F28
|
||||
s.d $f30, 40($sp) # save F30
|
||||
#endif
|
||||
|
||||
# store SP (pointing to context-data) in A0
|
||||
move $a0, $sp
|
||||
|
||||
# restore SP (pointing to context-data) from A1
|
||||
move $sp, $a1
|
||||
|
||||
#if defined(__mips_hard_float)
|
||||
l.d $f20, ($sp) # restore F20
|
||||
l.d $f22, 8($sp) # restore F22
|
||||
l.d $f24, 16($sp) # restore F24
|
||||
l.d $f26, 24($sp) # restore F26
|
||||
l.d $f28, 32($sp) # restore F28
|
||||
l.d $f30, 40($sp) # restore F30
|
||||
#endif
|
||||
|
||||
lw $s0, 48($sp) # restore S0
|
||||
lw $s1, 52($sp) # restore S1
|
||||
lw $s2, 56($sp) # restore S2
|
||||
lw $s3, 60($sp) # restore S3
|
||||
lw $s4, 64($sp) # restore S4
|
||||
lw $s5, 68($sp) # restore S5
|
||||
lw $s6, 72($sp) # restore S6
|
||||
lw $s7, 76($sp) # restore S7
|
||||
lw $fp, 80($sp) # restore FP
|
||||
lw $v0, 84($sp) # restore hidden, address of returned transfer_t
|
||||
lw $ra, 88($sp) # restore RA
|
||||
|
||||
# load PC
|
||||
move $t9, $a3
|
||||
|
||||
# adjust stack
|
||||
addiu $sp, $sp, 96
|
||||
|
||||
# return transfer_t from jump
|
||||
sw $a0, ($v0) # fctx of transfer_t
|
||||
sw $a2, 4($v0) # data of transfer_t
|
||||
# pass transfer_t as first arg in context function
|
||||
# A0 == hidden, A1 == fctx, A2 == data
|
||||
move $a1, $a0
|
||||
move $a0, $v0
|
||||
|
||||
# jump to context
|
||||
jr $t9
|
||||
.end ontop_fcontext
|
||||
.size ontop_fcontext, .-ontop_fcontext
|
||||
|
||||
/* Mark that we don't need executable stack. */
|
||||
.section .note.GNU-stack,"",%progbits
|
123
third_party/context/src/asm/ontop_mips64_n64_elf_gas.S
vendored
Normal file
123
third_party/context/src/asm/ontop_mips64_n64_elf_gas.S
vendored
Normal file
@ -0,0 +1,123 @@
|
||||
/*
|
||||
Copyright Jiaxun Yang 2018.
|
||||
Distributed under the Boost Software License, Version 1.0.
|
||||
(See accompanying file LICENSE_1_0.txt or copy at
|
||||
http://www.boost.org/LICENSE
|
||||
*/
|
||||
|
||||
/*******************************************************
|
||||
* *
|
||||
* ------------------------------------------------- *
|
||||
* | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 0 | 8 | 16 | 24 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F24 | F25 | F26 | F27 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 40 | 48 | 56 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F28 | F29 | F30 | F31 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 64 | 72 | 80 | 88 | *
|
||||
* ------------------------------------------------- *
|
||||
* | S0 | S1 | S2 | S3 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
|
||||
* ------------------------------------------------- *
|
||||
* | S4 | S5 | S6 | S7 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
|
||||
* ------------------------------------------------- *
|
||||
* | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | *
|
||||
* ------------------------------------------------- *
|
||||
* | FP | GP | RA | PC | *
|
||||
* ------------------------------------------------- *
|
||||
* *
|
||||
* *****************************************************/
|
||||
|
||||
.file "ontop_mips64_n64_elf_gas.S"
|
||||
.text
|
||||
.globl ontop_fcontext
|
||||
.align 3
|
||||
.type ontop_fcontext,@function
|
||||
.ent ontop_fcontext
|
||||
ontop_fcontext:
|
||||
# reserve space on stack
|
||||
daddiu $sp, $sp, -160
|
||||
|
||||
sd $s0, 64($sp) # save S0
|
||||
sd $s1, 72($sp) # save S1
|
||||
sd $s2, 80($sp) # save S2
|
||||
sd $s3, 88($sp) # save S3
|
||||
sd $s4, 96($sp) # save S4
|
||||
sd $s5, 104($sp) # save S5
|
||||
sd $s6, 112($sp) # save S6
|
||||
sd $s7, 120($sp) # save S7
|
||||
sd $fp, 128($sp) # save FP
|
||||
sd $ra, 144($sp) # save RA
|
||||
sd $ra, 152($sp) # save RA as PC
|
||||
|
||||
#if defined(__mips_hard_float)
|
||||
s.d $f24, 0($sp) # save F24
|
||||
s.d $f25, 8($sp) # save F25
|
||||
s.d $f26, 16($sp) # save F26
|
||||
s.d $f27, 24($sp) # save F27
|
||||
s.d $f28, 32($sp) # save F28
|
||||
s.d $f29, 40($sp) # save F29
|
||||
s.d $f30, 48($sp) # save F30
|
||||
s.d $f31, 56($sp) # save F31
|
||||
#endif
|
||||
|
||||
# store SP (pointing to context-data) in t0
|
||||
move $t0, $sp
|
||||
|
||||
# restore SP (pointing to context-data) from a0
|
||||
move $sp, $a0
|
||||
|
||||
#if defined(__mips_hard_float)
|
||||
l.d $f24, 0($sp) # restore F24
|
||||
l.d $f25, 8($sp) # restore F25
|
||||
l.d $f26, 16($sp) # restore F26
|
||||
l.d $f27, 24($sp) # restore F27
|
||||
l.d $f28, 32($sp) # restore F28
|
||||
l.d $f29, 40($sp) # restore F29
|
||||
l.d $f30, 48($sp) # restore F30
|
||||
l.d $f31, 56($sp) # restore F31
|
||||
#endif
|
||||
|
||||
ld $s0, 64($sp) # restore S0
|
||||
ld $s1, 72($sp) # restore S1
|
||||
ld $s2, 80($sp) # restore S2
|
||||
ld $s3, 88($sp) # restore S3
|
||||
ld $s4, 96($sp) # restore S4
|
||||
ld $s5, 104($sp) # restore S5
|
||||
ld $s6, 112($sp) # restore S6
|
||||
ld $s7, 120($sp) # restore S7
|
||||
ld $fp, 128($sp) # restore FP
|
||||
ld $ra, 144($sp) # restore RA
|
||||
|
||||
# load PC
|
||||
move $t9, $a2
|
||||
|
||||
# adjust stack
|
||||
daddiu $sp, $sp, 160
|
||||
|
||||
move $a0, $t0 # move param from t0 to a0 as param
|
||||
|
||||
# jump to context
|
||||
jr $t9
|
||||
.end ontop_fcontext
|
||||
.size ontop_fcontext, .-ontop_fcontext
|
||||
|
||||
/* Mark that we don't need executable stack. */
|
||||
.section .note.GNU-stack,"",%progbits
|
16
third_party/context/src/asm/ontop_ppc32_ppc64_sysv_macho_gas.S
vendored
Normal file
16
third_party/context/src/asm/ontop_ppc32_ppc64_sysv_macho_gas.S
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
/*
|
||||
Copyright Sergue E. Leontiev 2013.
|
||||
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)
|
||||
*/
|
||||
|
||||
// Stub file for universal binary
|
||||
|
||||
#if defined(__ppc__)
|
||||
#include "ontop_ppc32_sysv_macho_gas.S"
|
||||
#elif defined(__ppc64__)
|
||||
#include "ontop_ppc64_sysv_macho_gas.S"
|
||||
#else
|
||||
#error "No arch's"
|
||||
#endif
|
193
third_party/context/src/asm/ontop_ppc32_sysv_elf_gas.S
vendored
Normal file
193
third_party/context/src/asm/ontop_ppc32_sysv_elf_gas.S
vendored
Normal file
@ -0,0 +1,193 @@
|
||||
/*
|
||||
Copyright Oliver Kowalke 2009.
|
||||
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 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | *
|
||||
* ------------------------------------------------- *
|
||||
* |bchai|hiddn| fpscr | PC | CR | R14 | R15 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R16 | R17 | R18 | R19 | R20 | R21 | R22 | R23 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | *
|
||||
* ------------------------------------------------- *
|
||||
* | R24 | R25 | R26 | R27 | R28 | R29 | R30 | R31 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F14 | F15 | F16 | F17 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F18 | F19 | F20 | F21 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F22 | F23 | F24 | F25 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------------------------------- *
|
||||
* | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | *
|
||||
* ------------------------------------------------- *
|
||||
* | F26 | F27 | F28 | F29 | *
|
||||
* ------------------------------------------------- *
|
||||
* ------------------------|------------ *
|
||||
* | 224 | 228 | 232 | 236 | 240 | 244 | *
|
||||
* ------------------------|------------ *
|
||||
* | F30 | F31 |bchai| LR | *
|
||||
* ------------------------|------------ *
|
||||
* *
|
||||
*******************************************************/
|
||||
|
||||
.file "ontop_ppc32_sysv_elf_gas.S"
|
||||
.text
|
||||
.globl ontop_fcontext
|
||||
.align 2
|
||||
.type ontop_fcontext,@function
|
||||
ontop_fcontext:
|
||||
# Linux: ontop_fcontext( hidden transfer_t * R3, R4, R5, R6)
|
||||
# Other: transfer_t R3:R4 = jump_fcontext( R3, R4, R5)
|
||||
|
||||
mflr %r0 # return address from LR
|
||||
mffs %f0 # FPSCR
|
||||
mfcr %r8 # condition register
|
||||
|
||||
stwu %r1, -240(%r1) # allocate stack space, R1 % 16 == 0
|
||||
stw %r0, 244(%r1) # save LR in caller's frame
|
||||
|
||||
#ifdef __linux__
|
||||
stw %r3, 4(%r1) # hidden pointer
|
||||
#endif
|
||||
|
||||
stfd %f0, 8(%r1) # FPSCR
|
||||
stw %r0, 16(%r1) # LR as PC
|
||||
stw %r8, 20(%r1) # CR
|
||||
|
||||
# Save registers R14 to R31.
|
||||
# Don't change R2, the thread-local storage pointer.
|
||||
# Don't change R13, the small data pointer.
|
||||
stw %r14, 24(%r1)
|
||||
stw %r15, 28(%r1)
|
||||
stw %r16, 32(%r1)
|
||||
stw %r17, 36(%r1)
|
||||
stw %r18, 40(%r1)
|
||||
stw %r19, 44(%r1)
|
||||
stw %r20, 48(%r1)
|
||||
stw %r21, 52(%r1)
|
||||
stw %r22, 56(%r1)
|
||||
stw %r23, 60(%r1)
|
||||
stw %r24, 64(%r1)
|
||||
stw %r25, 68(%r1)
|
||||
stw %r26, 72(%r1)
|
||||
stw %r27, 76(%r1)
|
||||
stw %r28, 80(%r1)
|
||||
stw %r29, 84(%r1)
|
||||
stw %r30, 88(%r1)
|
||||
stw %r31, 92(%r1)
|
||||
|
||||
# Save registers F14 to F31 in slots with 8-byte alignment.
|
||||
# 4-byte alignment may stall the pipeline of some processors.
|
||||
# Less than 4 may cause alignment traps.
|
||||
stfd %f14, 96(%r1)
|
||||
stfd %f15, 104(%r1)
|
||||
stfd %f16, 112(%r1)
|
||||
stfd %f17, 120(%r1)
|
||||
stfd %f18, 128(%r1)
|
||||
stfd %f19, 136(%r1)
|
||||
stfd %f20, 144(%r1)
|
||||
stfd %f21, 152(%r1)
|
||||
stfd %f22, 160(%r1)
|
||||
stfd %f23, 168(%r1)
|
||||
stfd %f24, 176(%r1)
|
||||
stfd %f25, 184(%r1)
|
||||
stfd %f26, 192(%r1)
|
||||
stfd %f27, 200(%r1)
|
||||
stfd %f28, 208(%r1)
|
||||
stfd %f29, 216(%r1)
|
||||
stfd %f30, 224(%r1)
|
||||
stfd %f31, 232(%r1)
|
||||
|
||||
# store RSP (pointing to context-data) in R7/R6
|
||||
# restore RSP (pointing to context-data) from R4/R3
|
||||
#ifdef __linux__
|
||||
mr %r7, %r1
|
||||
mr %r1, %r4
|
||||
lwz %r3, 4(%r1) # hidden pointer
|
||||
#else
|
||||
mr %r6, %r1
|
||||
mr %r1, %r3
|
||||
#endif
|
||||
|
||||
# ignore PC at 16(%r1)
|
||||
lfd %f0, 8(%r1) # FPSCR
|
||||
lwz %r8, 20(%r1) # CR
|
||||
|
||||
mtfsf 0xff, %f0 # restore FPSCR
|
||||
mtcr %r8 # restore CR
|
||||
|
||||
# restore R14 to R31
|
||||
lwz %r14, 24(%r1)
|
||||
lwz %r15, 28(%r1)
|
||||
lwz %r16, 32(%r1)
|
||||
lwz %r17, 36(%r1)
|
||||
lwz %r18, 40(%r1)
|
||||
lwz %r19, 44(%r1)
|
||||
lwz %r20, 48(%r1)
|
||||
lwz %r21, 52(%r1)
|
||||
lwz %r22, 56(%r1)
|
||||
lwz %r23, 60(%r1)
|
||||
lwz %r24, 64(%r1)
|
||||
lwz %r25, 68(%r1)
|
||||
lwz %r26, 72(%r1)
|
||||
lwz %r27, 76(%r1)
|
||||
lwz %r28, 80(%r1)
|
||||
lwz %r29, 84(%r1)
|
||||
lwz %r30, 88(%r1)
|
||||
lwz %r31, 92(%r1)
|
||||
|
||||
# restore F14 to F31
|
||||
lfd %f14, 96(%r1)
|
||||
lfd %f15, 104(%r1)
|
||||
lfd %f16, 112(%r1)
|
||||
lfd %f17, 120(%r1)
|
||||
lfd %f18, 128(%r1)
|
||||
lfd %f19, 136(%r1)
|
||||
lfd %f20, 144(%r1)
|
||||
lfd %f21, 152(%r1)
|
||||
lfd %f22, 160(%r1)
|
||||
lfd %f23, 168(%r1)
|
||||
lfd %f24, 176(%r1)
|
||||
lfd %f25, 184(%r1)
|
||||
lfd %f26, 192(%r1)
|
||||
lfd %f27, 200(%r1)
|
||||
lfd %f28, 208(%r1)
|
||||
lfd %f29, 216(%r1)
|
||||
lfd %f30, 224(%r1)
|
||||
lfd %f31, 232(%r1)
|
||||
|
||||
# restore LR from caller's frame
|
||||
lwz %r0, 244(%r1)
|
||||
mtlr %r0
|
||||
|
||||
# adjust stack
|
||||
addi %r1, %r1, 240
|
||||
|
||||
# see tail_ppc32_sysv_elf_gas.cpp
|
||||
# Linux: fcontext_ontop_tail( hidden transfer_t * R3, R4, R5, R6, R7)
|
||||
# Other: transfer_t R3:R4 = fcontext_ontop_tail( R3, R4, R5, R6)
|
||||
b ontop_fcontext_tail
|
||||
.size ontop_fcontext, .-ontop_fcontext
|
||||
|
||||
/* Mark that we don't need executable stack. */
|
||||
.section .note.GNU-stack,"",%progbits
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user