Brian Anderson
6443a7b513
rt: Do fewer stack canary checks
2011-12-20 13:54:47 -08:00
Brian Anderson
93fef2e113
rt: Parenthesize the red zone macros
2011-12-20 11:57:22 -08:00
Brian Anderson
784713ec68
rt: Add a canary value to the end of every stack
...
Check it on upcall entry and exit, and on stack deletion
2011-12-20 11:48:47 -08:00
Brian Anderson
56ec9cb278
rt: Run yet more task_start_wrapper cleanup on the C stack
2011-12-20 10:29:40 -08:00
Brian Anderson
25f7c844df
rt: Don't reuse stack segments when they are not big enough
2011-12-19 22:47:28 -08:00
Brian Anderson
05bf105c90
rt: Rename asm_call_on_stack to __morestack
...
Newer gdb's will backtrace through functions named __morestack even
if they change the stack.
2011-12-19 22:05:40 -08:00
Brian Anderson
edf6e1ec0e
rt: Zero the bottom frame's return address and base pointer
...
My reading of libunwind leads me to believe this is expected.
Closes #1322
2011-12-19 18:47:39 -08:00
Brian Anderson
1bfc4e2e6c
rt: Save and restore %rax/%eax in __morestack
...
This doesn't matter now since we use an out pointer for return
values but it's sure to show up mysteriously someday.
2011-12-19 18:16:21 -08:00
Brian Anderson
c3569abb8c
rt: Remove some unused stack from i386/morestack.S
2011-12-19 18:16:19 -08:00
Brian Anderson
d2e7336a01
rt: Remove unused saves from __morestack
2011-12-19 16:24:10 -08:00
Brian Anderson
50dc80f617
rt: Give upcall_new_stack the same convention as other upcalls
2011-12-19 16:24:10 -08:00
Brian Anderson
bedcaad97e
rt: Give upcall_del_stack the same convention as other upcalls
2011-12-19 16:24:10 -08:00
Brian Anderson
bd6b80c972
rt: Get rid of the rethrow in upcall_fail
...
Throwing in upcall_fail ends up running lots of code in the red zone. To avoid
it we have the personality function figure out which stack it's on and switch
as needed.
2011-12-18 17:17:31 -08:00
Brian Anderson
c73eb8ff51
rt: Create different stack-switching paths for upcalls and shims
...
Shims need to play with the stack limit, upcalls don't. Only one upcall,
upcall_fail is allowed to catch, and we need a find a way to get rid of that
catch as well because it results in _Unwind_Resume running off the end of the
Rust stack.
2011-12-18 16:17:55 -08:00
Brian Anderson
f57fd8de1f
rt: Run the cycle collector on the C stack
2011-12-18 15:23:44 -08:00
Brian Anderson
74d5faa86e
rt: Give each platform its own red zone definition
2011-12-18 15:23:41 -08:00
Brian Anderson
762d7e43a6
rt: Trim the red zone to 20k on all platforms
2011-12-18 15:22:56 -08:00
Brian Anderson
3fa930f598
rt: Remove a bogus FIXME from ~rust_task
2011-12-18 02:09:41 -08:00
Brian Anderson
1a1fdf34b1
rt: Add lots of documentation to __morestack
2011-12-18 02:02:35 -08:00
Brian Anderson
7359fa422b
Revert "rt: Turn on big stacks again. Unwinding still doesn't always succeed on mac"
...
This reverts commit 68f4849f0f52bc37fc24a36fb7e14002bdb2cd61.
2011-12-18 00:42:46 -08:00
Brian Anderson
68f4849f0f
rt: Turn on big stacks again. Unwinding still doesn't always succeed on mac
2011-12-17 17:54:43 -08:00
Brian Anderson
fe683dfb80
rt: Get rid of the valgrind guard bytes at the end of the stack
...
Preventing us from writing beyond our allocations is _what valgrind does_,
so telling valgrind not to let us write to the end of the stack isn't
buying anything.
2011-12-17 16:46:50 -08:00
Brian Anderson
471b4d6e58
rt: Use a DWARF CFI scheme that works on mac in __morestack
2011-12-17 14:10:44 -08:00
Brian Anderson
7da8ab8fab
rt: Turn on stack alignment checks for mac
2011-12-17 14:10:40 -08:00
Brian Anderson
4ac345939c
rt: Cache an extra stack segment to avoid bad behavior at stack boundaries
2011-12-17 13:45:38 -08:00
Brian Anderson
0ed5117a9d
rt: Set the default stack size to 768 bytes. Double on each alloc
2011-12-17 13:45:38 -08:00
Brian Anderson
b5b2ac0ec4
rt: Make 32-bit morestack compatible with fastcc
2011-12-16 18:18:43 -08:00
Brian Anderson
7d51961b6f
rt: Fix saved address of unwinding %rsp in __morestack
...
I haven't thought too deeply about this, but I think I was telling the
unwinder to use the stack pointer for the wrong frame when unwinding. Not sure
how that could have worked at all, but this results in the correct alignment
for cleanups.
2011-12-16 18:18:43 -08:00
Brian Anderson
9d70c1949e
rt: Fix alignment of the call to upcall_del_stack in __morestack
2011-12-16 18:18:43 -08:00
Brian Anderson
23df4de86d
rt: Fix alignment of new stack segments
2011-12-16 18:18:43 -08:00
Brian Anderson
ab4f35c1f1
rt: Only call check_stack_alignment on linux
2011-12-16 18:18:43 -08:00
Brian Anderson
121c420184
rt: Insert stack alignment checks into upcalls
2011-12-16 18:18:43 -08:00
Elly Jones
89e880d613
std: file_is_dir -> path_is_dir, add path_exists
2011-12-16 17:37:21 -05:00
Niko Matsakis
88818334b7
update to not look at descs[], which is not necessarily valid
...
if the input is a statically allocated type_desc
2011-12-16 08:06:45 -08:00
Niko Matsakis
1e3259e119
massive refactor of how closures work
2011-12-15 13:44:06 -08:00
Niko Matsakis
35fe86dab7
export upcall_clone_type_desc
2011-12-14 14:32:25 -08:00
Niko Matsakis
f512e67fb9
clone type desc into exchange heap
2011-12-14 14:32:24 -08:00
Niko Matsakis
6a8cb704d9
get basic code generation working, clone type descs for lambda[send]
2011-12-14 14:32:20 -08:00
Brian Anderson
f0254e1e0d
rt: Add a FIXME to 32-bit __morestack about trashing %eax
2011-12-13 19:13:17 -08:00
Brian Anderson
f332643e7f
rt: Use %ecx instead of %eax during the second half of __morestack
...
If Rust code made use of return values then using %eax here would clobber it
2011-12-13 18:26:56 -08:00
Brian Anderson
32087f5c2a
rt: Don't clobber fastcc argument registers in __morestack
2011-12-13 15:54:14 -08:00
Niko Matsakis
a98dec035f
fix track alloc code
2011-12-12 18:25:17 -08:00
Brian Anderson
1c1bc2f1cd
rt: Remove some duplicated code from 64-bit __morestack
2011-12-12 16:58:21 -08:00
Brian Anderson
887d970fee
rt: Make unwinding through __morestack work on mac
...
Had to bump the min stack size in some of the tests from 256 bytes
to 1024 bytes. Not sure why yet.
2011-12-12 16:15:29 -08:00
Brian Anderson
3e32f6623c
rt: Write CFI instructions that (might) work on mac in __morestack
...
The DW_CFA_val_offset_sf instruction doesn't seem to work on mac,
even after implementing it in the llvm-mc assembler, so now
I'm looking for a different way to communicate the stack pointer
adjustment to the unwinder.
2011-12-12 16:14:17 -08:00
Brian Anderson
7a8e73662d
rt: Make unwinding through __morestack work on mac
...
Had to bump the min stack size in some of the tests from 256 bytes
to 1024 bytes. Not sure why yet.
2011-12-11 18:49:04 -08:00
Brian Anderson
7bc34f63d8
rt: Write CFI instructions that (might) work on mac in __morestack
...
The DW_CFA_val_offset_sf instruction doesn't seem to work on mac,
even after implementing it in the llvm-mc assembler, so now
I'm looking for a different way to communicate the stack pointer
adjustment to the unwinder.
2011-12-11 16:32:36 -08:00
Brian Anderson
b73caec3ce
rt: Call upcall_fail on the C stack
2011-12-11 14:35:18 -08:00
Brian Anderson
5cd08586f6
rt: Add DWARF CFI info to asm_call_on_stack
...
This will allow the unwinder to unwind this function so we can call
upcall_fail on the C stack.
2011-12-11 14:35:09 -08:00
Brian Anderson
4699b6865f
build: Use llvm-mc as our assembler
...
LLVM's assembler understands .cfi pseudo-ops on the mac, which we need in
order to generate frames that can be DWARF-unwound
2011-12-10 18:51:21 -08:00