about summary refs log tree commit diff
path: root/src/rt/arch/arm
AgeCommit message (Collapse)AuthorLines
2015-08-10Remove morestack supportAlex Crichton-126/+0
This commit removes all morestack support from the compiler which entails: * Segmented stacks are no longer emitted in codegen. * We no longer build or distribute libmorestack.a * The `stack_exhausted` lang item is no longer required The only current use of the segmented stack support in LLVM is to detect stack overflow. This is no longer really required, however, because we already have guard pages for all threads and registered signal handlers watching for a segfault on those pages (to print out a stack overflow message). Additionally, major platforms (aka Windows) already don't use morestack. This means that Rust is by default less likely to catch stack overflows because if a function takes up more than one page of stack space it won't hit the guard page. This is what the purpose of morestack was (to catch this case), but it's better served with stack probes which have more cross platform support and no runtime support necessary. Until LLVM supports this for all platform it looks like morestack isn't really buying us much. cc #16012 (still need stack probes) Closes #26458 (a drive-by fix to help diagnostics on stack overflow)
2014-12-22Removed unused context-switching assembly code.Maya Nitu-69/+0
2014-06-13Cosmetic fixes & commentsValerii Hiora-1/+5
2014-06-12Runtime support for arm on iOSValerii Hiora-34/+74
2014-02-13Remove two allocations from spawning a green taskAlex Crichton-0/+8
Two unfortunate allocations were wrapping a proc() in a proc() with GreenTask::build_start_wrapper, and then boxing this proc in a ~proc() inside of Context::new(). Both of these allocations were a direct result from two conditions: 1. The Context::new() function has a nice api of taking a procedure argument to start up a new context with. This inherently required an allocation by build_start_wrapper because extra code needed to be run around the edges of a user-provided proc() for a new task. 2. The initial bootstrap code only understood how to pass one argument to the next function. By modifying the assembly and entry points to understand more than one argument, more information is passed through in registers instead of allocating a pointer-sized context. This is sadly where I end up throwing mips under a bus because I have no idea what's going on in the mips context switching code and don't know how to modify it. Closes #7767 cc #11389
2013-11-18rt: Namespace all C functions under rust_Brian Anderson-2/+2
2013-11-06Fixes for compilation to iOS:kud1ing-2/+8
- remove /usr/include from the include path since the iOS SDK provides the correct version - `_NSGetEnviron()` is private and not available on iOS - `.align` without an argument is not allowed with the Apple tools. 2^2 should be the default alignment - ignore error messages for XCode < 5 - pass include path to libuv
2013-10-19Use __morestack to detect stack overflowAlex Crichton-239/+5
This commit resumes management of the stack boundaries and limits when switching between tasks. This additionally leverages the __morestack function to run code on "stack overflow". The current behavior is to abort the process, but this is probably not the best behavior in the long term (for deails, see the comment I wrote up in the stack exhaustion routine).
2013-08-04Add support for vanilla linux on arm.Luqman Aden-0/+14
2013-05-22fix arm stack alignmentJyun-Yan You-2/+4
2013-05-07preliminary Linux ARM supportJyun-Yan You-0/+8
2013-05-03add gitattributes and fix whitespace issuesDaniel Micay-9/+2
2013-04-10add unwind information on morestackILyoan-14/+19
2013-04-10rust morestack assembly for armILyoan-42/+60
Conflicts: src/rt/arch/arm/morestack.S
2013-04-01rt/arch/arm: fix syntax used for noexec stackDaniel Micay-4/+4
2013-03-31mark the assembly object stacks as non-executableDaniel Micay-8/+27
Closes #5643 This also removes the need to pass noexecstack to gcc, but that wasn't actually working anymore.
2013-03-25auto merge of #5424 : luqmana/rust/inline-rt, r=brsonbors-0/+29
As per #2521. Inlining seems to improve performance slightly: Inlined Not Inlined x86: 13.5482 14.4112 x86_64: 17.4712 18.0696 (Average of 5 runs timed with `time`) ```Rust fn foo() -> int { int::from_str(~"28098").unwrap() } fn main() { for 1000000.times { foo(); foo(); foo(); foo(); foo(); } } ``` All run on: Linux 3.2.0-0.bpo.4-amd64 #1 SMP Debian 3.2.35-2~bpo60+1 x86_64 GNU/Linux The MIPS and ARM bits I didn't inline since I'm not as familiar with them and I also can't test them. All green on try.
2013-03-19Rewrite arm/ccall.sILyoan-15/+10
2013-03-17rt: Inline get_sp_limit/set_sp_limit/get_sp for x86_64.Luqman Aden-0/+29
2013-02-27mk: rewrite make filesYoung-il Choi-0/+8
2013-01-17Add a license check to tidy. #4018Brian Anderson-0/+7
2013-01-13Support ARM and Androidkyeongwoon-0/+273
Conflicts: src/libcore/os.rs src/librustc/back/link.rs src/librustc/driver/driver.rs src/librustc/metadata/loader.rs src/librustc/middle/trans/base.rs