|
9 | 9 | #include <asm/ppc_asm.h> |
10 | 10 |
|
11 | 11 | /* |
12 | | - * The macros sets two stack frames, one for the caller and one for the callee |
| 12 | + * The macro sets two stack frames, one for the caller and one for the callee |
13 | 13 | * because there are no requirement for the caller to set a stack frame when |
14 | 14 | * calling VDSO so it may have omitted to set one, especially on PPC64 |
15 | 15 | */ |
16 | 16 |
|
17 | | -.macro cvdso_call funct |
| 17 | +.macro cvdso_call funct call_time=0 |
18 | 18 | .cfi_startproc |
19 | 19 | PPC_STLU r1, -PPC_MIN_STKFRM(r1) |
20 | 20 | mflr r0 |
|
25 | 25 | PPC_STL r2, PPC_MIN_STKFRM + STK_GOT(r1) |
26 | 26 | #endif |
27 | 27 | get_datapage r5 |
| 28 | + .ifeq \call_time |
28 | 29 | addi r5, r5, VDSO_DATA_OFFSET |
| 30 | + .else |
| 31 | + addi r4, r5, VDSO_DATA_OFFSET |
| 32 | + .endif |
29 | 33 | bl DOTSYM(\funct) |
30 | 34 | PPC_LL r0, PPC_MIN_STKFRM + PPC_LR_STKOFF(r1) |
31 | 35 | #ifdef __powerpc64__ |
32 | 36 | PPC_LL r2, PPC_MIN_STKFRM + STK_GOT(r1) |
33 | 37 | #endif |
| 38 | + .ifeq \call_time |
34 | 39 | cmpwi r3, 0 |
| 40 | + .endif |
35 | 41 | mtlr r0 |
36 | 42 | .cfi_restore lr |
37 | 43 | addi r1, r1, 2 * PPC_MIN_STKFRM |
38 | 44 | crclr so |
| 45 | + .ifeq \call_time |
39 | 46 | beqlr+ |
40 | 47 | crset so |
41 | 48 | neg r3, r3 |
42 | | - blr |
43 | | - .cfi_endproc |
44 | | -.endm |
45 | | - |
46 | | -.macro cvdso_call_time funct |
47 | | - .cfi_startproc |
48 | | - PPC_STLU r1, -PPC_MIN_STKFRM(r1) |
49 | | - mflr r0 |
50 | | - .cfi_register lr, r0 |
51 | | - PPC_STLU r1, -PPC_MIN_STKFRM(r1) |
52 | | - PPC_STL r0, PPC_MIN_STKFRM + PPC_LR_STKOFF(r1) |
53 | | -#ifdef __powerpc64__ |
54 | | - PPC_STL r2, PPC_MIN_STKFRM + STK_GOT(r1) |
55 | | -#endif |
56 | | - get_datapage r4 |
57 | | - addi r4, r4, VDSO_DATA_OFFSET |
58 | | - bl DOTSYM(\funct) |
59 | | - PPC_LL r0, PPC_MIN_STKFRM + PPC_LR_STKOFF(r1) |
60 | | -#ifdef __powerpc64__ |
61 | | - PPC_LL r2, PPC_MIN_STKFRM + STK_GOT(r1) |
62 | | -#endif |
63 | | - crclr so |
64 | | - mtlr r0 |
65 | | - .cfi_restore lr |
66 | | - addi r1, r1, 2 * PPC_MIN_STKFRM |
| 49 | + .endif |
67 | 50 | blr |
68 | 51 | .cfi_endproc |
69 | 52 | .endm |
|
0 commit comments