diff options
| author | Niko Matsakis <niko@alum.mit.edu> | 2011-11-10 22:15:50 -0800 |
|---|---|---|
| committer | Niko Matsakis <niko@alum.mit.edu> | 2011-11-16 15:16:40 -0800 |
| commit | 59e2a0a9c1434db65afc6c94752de3cf2ab761a0 (patch) | |
| tree | f953d937b1913018b169870caa3dc6318025a3d4 /src/rt | |
| parent | 4fc34e23faddf02c2ed85ee97ae929b36a9aaa1b (diff) | |
| download | rust-59e2a0a9c1434db65afc6c94752de3cf2ab761a0.tar.gz rust-59e2a0a9c1434db65afc6c94752de3cf2ab761a0.zip | |
add shim upcall func
Diffstat (limited to 'src/rt')
| -rw-r--r-- | src/rt/arch/x86_64/ccall.S | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/rt/arch/x86_64/ccall.S b/src/rt/arch/x86_64/ccall.S index d9221067175..7a69aecedbf 100644 --- a/src/rt/arch/x86_64/ccall.S +++ b/src/rt/arch/x86_64/ccall.S @@ -56,3 +56,19 @@ upcall_call_c_stack_float: pop %rbp ret +#if defined(__APPLE__) || defined(_WIN32) +.globl _upcall_call_c_stack_shim +_upcall_call_c_stack_shim: +#else +.globl upcall_call_c_stack_shim +upcall_call_c_stack_shim +#endif + push %rbp + mov %rsp,%rbp // save rsp + mov ARG1,%rsp // switch stack + mov ARG0,%r11 // Remember target address + mov ARG1,ARG0 // setup the parameter shim expects + call *%r11 + mov %rbp,%rsp + pop %rbp + ret |
