forked from rust-lang/rust
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
iOS: makefiles and runtime for new archs
- Loading branch information
Showing
8 changed files
with
336 additions
and
51 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
# armv7-apple-ios configuration | ||
CFG_SDK_NAME_armv7-apple-ios := iphoneos | ||
CFG_SDK_ARCHS_armv7-apple-ios := armv7 | ||
ifneq ($(findstring darwin,$(CFG_OSTYPE)),) | ||
CFG_IOS_SDK_armv7-apple-ios := $(shell xcrun --show-sdk-path -sdk iphoneos 2>/dev/null) | ||
CFG_IOS_SDK_FLAGS_armv7-apple-ios := -target armv7-apple-ios -isysroot $(CFG_IOS_SDK_armv7-apple-ios) -mios-version-min=7.0 | ||
CC_armv7-apple-ios = $(shell xcrun -find -sdk iphoneos clang) | ||
CXX_armv7-apple-ios = $(shell xcrun -find -sdk iphoneos clang++) | ||
CPP_armv7-apple-ios = $(shell xcrun -find -sdk iphoneos clang++) | ||
AR_armv7-apple-ios = $(shell xcrun -find -sdk iphoneos ar) | ||
endif | ||
CFG_LIB_NAME_armv7-apple-ios = lib$(1).a | ||
CFG_LIB_GLOB_armv7-apple-ios = lib$(1)-*.a | ||
CFG_LIB_SKIP_INSTALL_armv7-apple-ios = 1 #lib$(1)-*.a | ||
CFG_STATIC_LIB_NAME_armv7-apple-ios=lib$(1).a | ||
CFG_LIB_DSYM_GLOB_armv7-apple-ios = lib$(1)-*.a.dSYM | ||
CFG_JEMALLOC_CFLAGS_armv7-apple-ios := -arch armv7 -mfpu=vfp3 $(CFG_IOS_SDK_FLAGS_armv7-apple-ios) | ||
CFG_GCCISH_CFLAGS_armv7-apple-ios := -Wall -Werror -g -fPIC $(CFG_IOS_SDK_FLAGS_armv7-apple-ios) -mfpu=vfp3 -arch armv7 | ||
CFG_GCCISH_CXXFLAGS_armv7-apple-ios := -fno-rtti $(CFG_IOS_SDK_FLAGS_armv7-apple-ios) -I$(CFG_IOS_SDK_armv7-apple-ios)/usr/include/c++/4.2.1 | ||
CFG_GCCISH_LINK_FLAGS_armv7-apple-ios := -lpthread -syslibroot $(CFG_IOS_SDK_armv7-apple-ios) -Wl,-no_compact_unwind | ||
CFG_GCCISH_DEF_FLAG_armv7-apple-ios := -Wl,-exported_symbols_list, | ||
CFG_GCCISH_PRE_LIB_FLAGS_armv7-apple-ios := | ||
CFG_GCCISH_POST_LIB_FLAGS_armv7-apple-ios := | ||
CFG_DEF_SUFFIX_armv7-apple-ios := .darwin.def | ||
CFG_LLC_FLAGS_armv7-apple-ios := -mattr=+vfp3,+v7,+neon -march=arm | ||
CFG_INSTALL_NAME_armv7-apple-ios = -Wl,-install_name,@rpath/$(1) | ||
CFG_EXE_SUFFIX_armv7-apple-ios := | ||
CFG_WINDOWSY_armv7-apple-ios := | ||
CFG_UNIXY_armv7-apple-ios := 1 | ||
CFG_PATH_MUNGE_armv7-apple-ios := true | ||
CFG_LDPATH_armv7-apple-ios := | ||
CFG_RUN_armv7-apple-ios = $(2) | ||
CFG_RUN_TARG_armv7-apple-ios = $(call CFG_RUN_armv7-apple-ios,,$(2)) | ||
CFG_GNU_TRIPLE_armv7-apple-ios := armv7-apple-ios |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
# armv7s-apple-ios configuration | ||
CFG_SDK_NAME_armv7s-apple-ios := iphoneos | ||
CFG_SDK_ARCHS_armv7s-apple-ios := armv7s | ||
ifneq ($(findstring darwin,$(CFG_OSTYPE)),) | ||
CFG_IOS_SDK_armv7s-apple-ios := $(shell xcrun --show-sdk-path -sdk iphoneos 2>/dev/null) | ||
CFG_IOS_SDK_FLAGS_armv7s-apple-ios := -target armv7s-apple-ios -isysroot $(CFG_IOS_SDK_armv7s-apple-ios) -mios-version-min=7.0 | ||
CC_armv7s-apple-ios = $(shell xcrun -find -sdk iphoneos clang) | ||
CXX_armv7s-apple-ios = $(shell xcrun -find -sdk iphoneos clang++) | ||
CPP_armv7s-apple-ios = $(shell xcrun -find -sdk iphoneos clang++) | ||
AR_armv7s-apple-ios = $(shell xcrun -find -sdk iphoneos ar) | ||
endif | ||
CFG_LIB_NAME_armv7s-apple-ios = lib$(1).a | ||
CFG_LIB_GLOB_armv7s-apple-ios = lib$(1)-*.a | ||
CFG_LIB_SKIP_INSTALL_armv7s-apple-ios = 1 #lib$(1)-*.a | ||
CFG_STATIC_LIB_NAME_armv7s-apple-ios=lib$(1).a | ||
CFG_LIB_DSYM_GLOB_armv7s-apple-ios = lib$(1)-*.a.dSYM | ||
CFG_JEMALLOC_CFLAGS_armv7s-apple-ios := -arch armv7s -mfpu=vfp4 $(CFG_IOS_SDK_FLAGS_armv7s-apple-ios) | ||
CFG_GCCISH_CFLAGS_armv7s-apple-ios := -Wall -Werror -g -fPIC $(CFG_IOS_SDK_FLAGS_armv7s-apple-ios) -mfpu=vfp4 -arch armv7s | ||
CFG_GCCISH_CXXFLAGS_armv7s-apple-ios := -fno-rtti $(CFG_IOS_SDK_FLAGS_armv7s-apple-ios) -I$(CFG_IOS_SDK_armv7s-apple-ios)/usr/include/c++/4.2.1 | ||
CFG_GCCISH_LINK_FLAGS_armv7s-apple-ios := -lpthread -syslibroot $(CFG_IOS_SDK_armv7s-apple-ios) -Wl,-no_compact_unwind | ||
CFG_GCCISH_DEF_FLAG_armv7s-apple-ios := -Wl,-exported_symbols_list, | ||
CFG_GCCISH_PRE_LIB_FLAGS_armv7s-apple-ios := | ||
CFG_GCCISH_POST_LIB_FLAGS_armv7s-apple-ios := | ||
CFG_DEF_SUFFIX_armv7s-apple-ios := .darwin.def | ||
CFG_LLC_FLAGS_armv7s-apple-ios := -mattr=+vfp4,+v7,+neon | ||
CFG_INSTALL_NAME_armv7s-apple-ios = -Wl,-install_name,@rpath/$(1) | ||
CFG_EXE_SUFFIX_armv7s-apple-ios := | ||
CFG_WINDOWSY_armv7s-apple-ios := | ||
CFG_UNIXY_armv7s-apple-ios := 1 | ||
CFG_PATH_MUNGE_armv7s-apple-ios := true | ||
CFG_LDPATH_armv7s-apple-ios := | ||
CFG_RUN_armv7s-apple-ios = $(2) | ||
CFG_RUN_TARG_armv7s-apple-ios = $(call CFG_RUN_armv7s-apple-ios,,$(2)) | ||
CFG_GNU_TRIPLE_armv7s-apple-ios := armv7s-apple-ios |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
// Mark stack as non-executable | ||
#if defined(__linux__) && defined(__ELF__) | ||
.section .note.GNU-stack, "", %progbits | ||
#endif | ||
|
||
/* See i386/morestack.S for the lengthy, general explanation. */ | ||
|
||
.text | ||
.code 32 | ||
.arm | ||
#if defined(__APPLE__) | ||
.align 2 | ||
#else | ||
.align | ||
#endif | ||
|
||
#if defined(__APPLE__) | ||
#define MORESTACK ___morestack | ||
#define STACK_EXHAUSTED _rust_stack_exhausted | ||
#else | ||
#define MORESTACK __morestack | ||
#define STACK_EXHAUSTED rust_stack_exhausted | ||
#endif | ||
|
||
.global STACK_EXHAUSTED | ||
.global MORESTACK | ||
|
||
// Unfortunately LLVM yet doesn't support emitting correct debug | ||
// DWARF information for non-ELF targets so to make it compile | ||
// on iOS all that directives are simply commented out | ||
#if defined(__APPLE__) | ||
#define UNWIND @ | ||
#else | ||
#define UNWIND | ||
#endif | ||
|
||
#if defined(__APPLE__) | ||
.private_extern MORESTACK | ||
#else | ||
.hidden MORESTACK | ||
#endif | ||
|
||
#if !defined(__APPLE__) | ||
.type MORESTACK,%function | ||
#endif | ||
|
||
// r4 and r5 are scratch registers for __morestack due to llvm | ||
// ARMFrameLowering::adjustForSegmentedStacks() implementation. | ||
MORESTACK: | ||
UNWIND .fnstart | ||
|
||
// Save frame pointer and return address | ||
UNWIND .save {r4, r5} | ||
UNWIND .save {lr} | ||
UNWIND .save {r6, fp, lr} | ||
push {r6, fp, lr} | ||
|
||
UNWIND .movsp r6 | ||
mov r6, sp | ||
UNWIND .setfp fp, sp, #4 | ||
add fp, sp, #4 | ||
|
||
// Save argument registers of the original function | ||
push {r0, r1, r2, r3, lr} | ||
|
||
// Create new stack | ||
bl STACK_EXHAUSTED@plt | ||
|
||
// the above function ensures that it never returns | ||
UNWIND .fnend |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
// Do not compile anything here for iOS because split stacks | ||
// are disabled at all and do not need any runtime support. | ||
// | ||
// See also comments in librustrt/stack.rs about why it was | ||
// disabled and how it could be implemented in case of need. | ||
#if !defined(__APPLE__) | ||
// Mark stack as non-executable | ||
#if defined(__linux__) && defined(__ELF__) | ||
.section .note.GNU-stack, "", %progbits | ||
#endif | ||
|
||
.text | ||
.code 32 | ||
.arm | ||
.align | ||
|
||
#define RECORD_SP_LIMIT record_sp_limit | ||
#define GET_SP_LIMIT get_sp_limit | ||
|
||
.globl RECORD_SP_LIMIT | ||
.globl GET_SP_LIMIT | ||
|
||
RECORD_SP_LIMIT: | ||
// First, try to read TLS address from coprocessor | ||
mrc p15, #0, r3, c13, c0, #3 | ||
cmp r3, #0 | ||
// Otherwise, try to read from magic address 0xFFFF0FF0 | ||
mvneq r3, #0xF000 | ||
ldreq r3, [r3, #-15] | ||
|
||
#if __ANDROID__ | ||
add r3, r3, #252 | ||
#elif __linux__ | ||
add r3, r3, #4 | ||
#endif // ANDROID | ||
|
||
str r0, [r3] | ||
mov pc, lr | ||
|
||
GET_SP_LIMIT: | ||
// First, try to read TLS address from coprocessor | ||
mrc p15, #0, r3, c13, c0, #3 | ||
cmp r3, #0 | ||
// Otherwise, try to read from magic address 0xFFFF0FF0 | ||
mvneq r3, #0xF000 | ||
ldreq r3, [r3, #-15] | ||
|
||
#if __ANDROID__ | ||
add r3, r3, #252 | ||
#elif __linux__ | ||
add r3, r3, #4 | ||
#endif // __ANDROID__ | ||
|
||
ldr r0, [r3] | ||
mov pc, lr | ||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
// Mark stack as non-executable | ||
#if defined(__linux__) && defined(__ELF__) | ||
.section .note.GNU-stack, "", %progbits | ||
#endif | ||
|
||
/* See i386/morestack.S for the lengthy, general explanation. */ | ||
|
||
.text | ||
.code 32 | ||
.arm | ||
#if defined(__APPLE__) | ||
.align 2 | ||
#else | ||
.align | ||
#endif | ||
|
||
#if defined(__APPLE__) | ||
#define MORESTACK ___morestack | ||
#define STACK_EXHAUSTED _rust_stack_exhausted | ||
#else | ||
#define MORESTACK __morestack | ||
#define STACK_EXHAUSTED rust_stack_exhausted | ||
#endif | ||
|
||
.global STACK_EXHAUSTED | ||
.global MORESTACK | ||
|
||
// Unfortunately LLVM yet doesn't support emitting correct debug | ||
// DWARF information for non-ELF targets so to make it compile | ||
// on iOS all that directives are simply commented out | ||
#if defined(__APPLE__) | ||
#define UNWIND @ | ||
#else | ||
#define UNWIND | ||
#endif | ||
|
||
#if defined(__APPLE__) | ||
.private_extern MORESTACK | ||
#else | ||
.hidden MORESTACK | ||
#endif | ||
|
||
#if !defined(__APPLE__) | ||
.type MORESTACK,%function | ||
#endif | ||
|
||
// r4 and r5 are scratch registers for __morestack due to llvm | ||
// ARMFrameLowering::adjustForSegmentedStacks() implementation. | ||
MORESTACK: | ||
UNWIND .fnstart | ||
|
||
// Save frame pointer and return address | ||
UNWIND .save {r4, r5} | ||
UNWIND .save {lr} | ||
UNWIND .save {r6, fp, lr} | ||
push {r6, fp, lr} | ||
|
||
UNWIND .movsp r6 | ||
mov r6, sp | ||
UNWIND .setfp fp, sp, #4 | ||
add fp, sp, #4 | ||
|
||
// Save argument registers of the original function | ||
push {r0, r1, r2, r3, lr} | ||
|
||
// Create new stack | ||
bl STACK_EXHAUSTED@plt | ||
|
||
// the above function ensures that it never returns | ||
UNWIND .fnend |
Oops, something went wrong.