Mercurial > pub > dyncall > dyncall
diff dyncall/dyncall_call_ppc64.S @ 7:7ca57dbefed4
- ppc64 update from Masanori
author | cslag |
---|---|
date | Sun, 19 Jul 2015 13:05:34 +0200 |
parents | 3e629dc19168 |
children | c607d67cd6b8 |
line wrap: on
line diff
--- a/dyncall/dyncall_call_ppc64.S Thu Jul 09 20:51:11 2015 +0200 +++ b/dyncall/dyncall_call_ppc64.S Sun Jul 19 13:05:34 2015 +0200 @@ -23,7 +23,7 @@ */ -#include "../portasm/portasm-ppc.S" +#include "../portasm/portasm-ppc64.S" /* Call Kernel Implementations for PowerPC64. @@ -37,6 +37,7 @@ dcCall_ppc64(DCpointer target, struct DCRegData* pRegData, DCsize stacksize, DCptr stackdata); ChangeLog: + 2015-07-08: Added support for system calls 2014-08-07: Initial Support */ @@ -60,7 +61,6 @@ - Parameter Area (min. v1:64 Bytes v2:0 Byte) - Frame Header Area (v1:48 Bytes v2:32 Bytes) - Frame structure: on entry, parent frame layout: @@ -92,25 +92,9 @@ #endif .text - .global dcCall_ppc64 - .type dcCall_ppc64, @function -#if DC__ABI_PPC64_ELF_V != 2 - .section .opd, "aw" - .align 3 -#endif - -dcCall_ppc64: -#if DC__ABI_PPC64_ELF_V != 2 - .quad .dcCall_ppc64, .TOC.@tocbase, 0 - .previous - .global .dcCall_ppc64 - -.dcCall_ppc64: -#else -0: addis r2, r12,.TOC.-0b@ha - addi r2, r2,.TOC.-0b@l - .localentry dcCall_ppc64,.-dcCall_ppc64 -#endif +.align 2 +GLOBAL_C(dcCall_ppc64) +ENTRY_C(dcCall_ppc64) mflr r0 /* r0 = return address */ std r0,16(r1) /* store r0 to link-area */ std r31,-8(r1) @@ -195,3 +179,32 @@ mtlr r0 /* setup link register */ blr /* return */ +.align 2 +GLOBAL_C(dcCall_ppc64_syscall) +ENTRY_C(dcCall_ppc64_syscall) + mflr r0 /* r0 = return address */ + std r0,16(r1) /* store r0 to link-area */ + std r31,-8(r1) + li r0, -STACK_MIN + stdux r1,r1,r0 /* store r1 and decrement */ + + mr r0, r3 /* r0 = syscall number ( passed as 'target function' ) */ + mr r11, r4 /* r11 = reg data */ + + /* load 5 integer registers */ + ld r3 , 0(r11) + ld r4 , 8(r11) + ld r5 ,16(r11) + ld r6 ,24(r11) + ld r7 ,32(r11) + + sc /* system call */ + + /* epilog */ + + ld r2,TOC_SAVE(r1) + ld r1, 0(r1) /* restore stack */ + ld r31,-8(r1) + ld r0,16(r1) /* r0 = return address */ + mtlr r0 /* setup link register */ + blr /* return */