|
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