|
11 | 11 | NESTED_ENTRY InvokeForwarder |
12 | 12 |
|
13 | 13 | ; Save enregistered args |
14 | | - PROLOG_SAVE_REG_PAIR fp, lr, #-64! |
15 | | - PROLOG_SAVE_REG_PAIR x19, x20, #16 |
16 | | - PROLOG_NOP stp x0, x1, [sp, #32] |
17 | | - PROLOG_NOP stp x2, x3, [sp, #48] |
| 14 | + PROLOG_SAVE_REG_PAIR fp, lr, #-48! |
| 15 | + PROLOG_NOP stp x0, x1, [sp, #16] |
| 16 | + PROLOG_NOP stp x2, x3, [sp, #32] |
18 | 17 |
|
19 | 18 | ; Replace forwarder abi with owner abi |
20 | 19 | ldr x1, [x0, #8] |
|
26 | 25 |
|
27 | 26 | ; Get method address from owner abi vtable |
28 | 27 | ldr x0, [x1] |
29 | | - ldr x19, [x0, x12, lsl #3] |
30 | | - mov x0, x19 |
| 28 | + ldr x15, [x0, x12, lsl #3] |
31 | 29 | |
32 | 30 | ; Verify indirect call target |
33 | 31 | adrp x12, __guard_check_icall_fptr |
34 | 32 | ldr x12, [x12, __guard_check_icall_fptr] |
35 | 33 | blr x12 |
36 | 34 |
|
37 | | - ; Restore method address, return address, and args |
38 | | - mov x12, x19 |
39 | | - EPILOG_NOP ldp x2, x3, [sp, #48] |
40 | | - EPILOG_NOP ldp x0, x1, [sp, #32] |
41 | | - EPILOG_RESTORE_REG_PAIR x19, x20, #16 |
42 | | - EPILOG_RESTORE_REG_PAIR fp, lr, #64! |
| 35 | + ; Restore return address, and args |
| 36 | + EPILOG_NOP ldp x2, x3, [sp, #32] |
| 37 | + EPILOG_NOP ldp x0, x1, [sp, #16] |
| 38 | + EPILOG_RESTORE_REG_PAIR fp, lr, #48! |
43 | 39 |
|
44 | 40 | ; Jump to method |
45 | | - EPILOG_NOP br x12 |
| 41 | + EPILOG_NOP br x15 |
46 | 42 |
|
47 | 43 | NESTED_END InvokeForwarder |
48 | 44 |
|
|
0 commit comments