1081 Commits

Author SHA1 Message Date
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
Brian Anderson
9e6ff44d93 rt: Make __morestack work on win32 2011-12-08 16:47:33 -08:00
Brian Anderson
94b0fee6f1 rt: Reorganize and add documentation for rust_upcall.cpp 2011-12-07 18:50:23 -08:00
Brian Anderson
31fe5d0bd8 rt: Run most upcalls on the C stack 2011-12-07 18:50:23 -08:00
Brian Anderson
81f932e7d7 rt: Fix alignment of stacks generated by __morestack 2011-12-07 14:06:46 -08:00
Brian Anderson
9656ceac60 rt: Put 16 guard bytes at the end of the stack 2011-12-06 22:35:42 -08:00
Brian Anderson
5d1a1dc420 rt: Rename stk_seg.limit to stk_seg.end
rust_task is using the word limit it two ways, so one has to change.
2011-12-06 21:45:53 -08:00
Brian Anderson
3d7b89bc4d rt: Reorganize rust_upcall.cpp a bit 2011-12-06 21:44:19 -08:00
Brian Anderson
00636e3155 rt: Convert log_type and cmp_type upcalls to shim form 2011-12-06 21:44:19 -08:00
Brian Anderson
c11d0b0aa0 rt: Move upcall_cmp_type/upcall_log_type to rust_upcall.cpp 2011-12-06 21:44:18 -08:00
Niko Matsakis
9b7347dd96 modify upcalls to take structs as args 2011-12-06 21:44:18 -08:00
Brian Anderson
9a738fd61d rt: Various tweaks to make __morestack unwinding work on linux
When unwinding through __morestack the stack limit in the TLS is invalidated
and must be reset. Instead of actually landing at __morestack we're
just going to make all our Rust landing pads call upcall_reset_stack_limit,
which will find the stack segment that corresponds to the current stack
pointer and put the limit in the TLS.

Also massively expand the stack segment red zone to make more room for the
dynamic linker. Will fix in the future.
2011-12-06 16:32:41 -08:00
Austin Seipp
b513a5a500 Make valgrind usage more consistent and less error prone.
I was still having issues with the build system somehow getting confused
as to which set of valgrind headers to use when compiling rt.

This commit moves all the valgrind headers into their own directory
under rt and makes the usage more consistent. The compiler is now passed
the -DNVALGRIND flag when valgrind is not installed, as opposed to
passing -DHAVE_VALGRIND.

We also pass -I src/rt to the compiler when building rt so you can more
easily import what you want. I also cleaned up some erroneous #includes
along the way.

It should be safe to always just import the local valgrind headers and use
them without question. NVALGRIND turns the operations to no-ops when it
is active, and the build and tests run cleanly with or without.
2011-12-06 01:15:29 -06:00
Brian Anderson
58844aee42 rt: Make stack unwinding work more correctly with stack growth 2011-12-05 17:42:58 -08:00
Brian Anderson
a731f165df test: Test hitting the dynamic linker in the red zone 2011-12-05 17:20:59 -08:00
Brian Anderson
3b8bfaf534 rt: Use an out pointer for rust_new_stack
upcall_call_shim_on_c_stack does not handle return values
2011-12-05 17:11:35 -08:00
Brian Anderson
98cd96ce96 test: Add more tests for stack growth 2011-12-05 14:44:15 -08:00
Brian Anderson
1720bc2e81 rt: Unwind through __morestack on 32-bit linux 2011-12-05 12:10:55 -08:00
Brian Anderson
52d7dc5e0a rt: Update 32-bit __morestack for recent LLVM changes 2011-12-04 20:40:34 -08:00
Brian Anderson
292663b8ef rt: Implement 32-bit __morestack for mac 2011-12-02 17:44:23 -08:00
Brian Anderson
c254936f32 rt: Fix __morestack prologue on x86_64 mac 2011-12-02 15:32:51 -08:00
Brian Anderson
691b517fb9 rt: Fix 64-bit linux __morestack 2011-12-01 20:56:05 -08:00
Brian Anderson
3e5b314c0b rt: Implement __morestack for 64-bit mac. Doesn't unwind yet 2011-12-01 19:44:14 -08:00
Brian Anderson
8bf3d85b9d rt: Implement record_sp for 64-bit mac 2011-12-01 19:44:13 -08:00
Brian Anderson
1974cf9a81 rt: Move RED_ZONE_SIZE to rust_task.cpp 2011-12-01 15:50:00 -08:00
Brian Anderson
249f017bf2 rt: Add FIXME's about future changes to LLVM's __morestack impl 2011-12-01 15:33:15 -08:00
Brian Anderson
6da1a3fcd6 rt: Refactor record_sp into task::record_stack_limit 2011-12-01 15:26:42 -08:00
Brian Anderson
7476a39e47 stdlib: Implement some preliminary libuv bindings
std::uv is intended to be low-level, exactly mirroring the C API.
Difficult to continue the implementation now without scheduler
improvements.
2011-12-01 10:24:21 -08:00
Brian Anderson
f2de42c39a rt: Reorganize stack growth code 2011-11-30 20:31:33 -08:00
Brian Anderson
dd48a1af58 rt: Remove redundant defs of RUST_DEL_STACK 2011-11-30 20:31:33 -08:00
Brian Anderson
e6ef4d929c rt: Remove the stack pointer field of stk_seg 2011-11-30 20:31:33 -08:00
Brian Anderson
408d4ec0ef rt: Remove upcall_alloc_c_stack/call_c_stack, et. al.
We are using upcall_call_shim_on_c_stack now
2011-11-30 20:31:32 -08:00
Brian Anderson
037ca7f7cb rt: Rewrite 32-bit __morestack to use the shim upcall 2011-11-30 20:31:32 -08:00
Brian Anderson
777c3584b9 rt: Request the correct number of bytes on the C stack 2011-11-29 23:01:19 -08:00
Brian Anderson
06f4cb43f6 rt: Delete the entire stack chain on task destruction
Unwinding through __morestack on 64-bit Linux seems to be no big deal, and
all we have to do is free the stacks to make unwinding work with split stacks.
2011-11-29 22:22:49 -08:00
Brian Anderson
72baf70748 rt: Conditionalize out the 32-bit __morestack for everything but Linux
Currently broken everywhere else
2011-11-29 13:52:34 -08:00
Brian Anderson
8cbba79208 rt: Fix the name of the linux macro in x86_64/morestack.S 2011-11-29 13:50:34 -08:00