Overview
Comment: | Fix forwarding with stret. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
b490df80c48092997b51e110549be6ec |
User & Date: | js on 2012-11-17 13:26:37 |
Other Links: | manifest | tags |
Context
2012-11-17
| ||
18:23 | Implement forwarding target for Apple/PPC. check-in: 95850c4572 user: js tags: trunk | |
13:26 | Fix forwarding with stret. check-in: b490df80c4 user: js tags: trunk | |
2012-11-16
| ||
23:07 | Implement forwarding target for Apple/i386. check-in: 1ec18e57bc user: js tags: trunk | |
Changes
Modified src/apple-forwarding-i386.S from [f7e556eeea] to [af6d1eb84b].
︙ | ︙ | |||
25 26 27 28 29 30 31 | L_sel_forwardingTargetForSelector: .long L_str_forwardingTargetForSelector .section __OBJC, __image_info .long 0, 0 .section __TEXT, __text, regular, pure_instructions | | < | | | | | > | > > > | > | > > > > > > > > > > > > > > > > > > > > > | > | > > > > > > > > > | | > > > > > | | 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | L_sel_forwardingTargetForSelector: .long L_str_forwardingTargetForSelector .section __OBJC, __image_info .long 0, 0 .section __TEXT, __text, regular, pure_instructions _of_forward: pushl %ebp movl %esp, %ebp pushl 8(%ebp) call _object_getClass addl $4, %esp call get_eip L0: pushl L_sel_forwardingTargetForSelector-L0(%edx) pushl %eax call _class_respondsToSelector addl $8, %esp testl %eax, %eax jz fail pushl 12(%ebp) call get_eip L1: pushl L_sel_forwardingTargetForSelector-L1(%edx) pushl 8(%ebp) call _objc_msgSend testl %eax, %eax jz fail cmpl 8(%ebp), %eax je fail movl %eax, 8(%ebp) movl %ebp, %esp popl %ebp jmp _objc_msgSend fail: movl %ebp, %esp popl %ebp jmp _of_method_not_found _of_forward_stret: pushl %ebp movl %esp, %ebp pushl 12(%ebp) call _object_getClass addl $4, %esp call get_eip L2: pushl L_sel_forwardingTargetForSelector-L2(%edx) pushl %eax call _class_respondsToSelector addl $8, %esp testl %eax, %eax jz fail_stret pushl 16(%ebp) call get_eip L3: pushl L_sel_forwardingTargetForSelector-L3(%edx) pushl 12(%ebp) call _objc_msgSend testl %eax, %eax jz fail_stret cmpl 12(%ebp), %eax je fail_stret movl %eax, 12(%ebp) movl %ebp, %esp popl %ebp jmp _objc_msgSend_stret fail_stret: movl 12(%ebp), %eax movl %eax, 8(%ebp) movl 16(%ebp), %eax movl %eax, 12(%ebp) movl %ebp, %esp popl %ebp jmp _of_method_not_found get_eip: movl (%esp), %edx ret |
Modified src/apple-forwarding-x86_64.S from [944516a548] to [9dcfaa43d5].
︙ | ︙ | |||
25 26 27 28 29 30 31 | L_sel_forwardingTargetForSelector: .quad L_str_forwardingTargetForSelector .section __DATA, __objc_imageinfo, regular, no_dead_strip .long 0, 0 .section __TEXT, __text, regular, pure_instructions | | | 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | L_sel_forwardingTargetForSelector: .quad L_str_forwardingTargetForSelector .section __DATA, __objc_imageinfo, regular, no_dead_strip .long 0, 0 .section __TEXT, __text, regular, pure_instructions _of_forward: pushq %rbp movq %rsp, %rbp /* Save all arguments */ subq $0xC0, %rsp /* 16-byte alignment */ movq %rax, 0xA8(%rsp) movq %rdi, 0xA0(%rsp) |
︙ | ︙ | |||
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | movd %xmm3, 0x40(%rsp) movd %xmm4, 0x30(%rsp) movd %xmm5, 0x20(%rsp) movd %xmm6, 0x10(%rsp) movd %xmm7, (%rsp) call _object_getClass movq %rax, %rdi movq L_sel_forwardingTargetForSelector(%rip), %rsi call _class_respondsToSelector testq %rax, %rax jz fail movq 0xA0(%rsp), %rdi movq L_sel_forwardingTargetForSelector(%rip), %rsi movq 0x98(%rsp), %rdx | > | | 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | movd %xmm3, 0x40(%rsp) movd %xmm4, 0x30(%rsp) movd %xmm5, 0x20(%rsp) movd %xmm6, 0x10(%rsp) movd %xmm7, (%rsp) call _object_getClass movq %rax, %rdi movq L_sel_forwardingTargetForSelector(%rip), %rsi call _class_respondsToSelector testq %rax, %rax jz fail movq 0xA0(%rsp), %rdi movq L_sel_forwardingTargetForSelector(%rip), %rsi movq 0x98(%rsp), %rdx call _objc_msgSend movq %rax, %rdi testq %rdi, %rdi jz fail cmpq 0xA0(%rsp), %rdi je fail |
︙ | ︙ | |||
85 86 87 88 89 90 91 | movq 0x90(%rsp), %rdx movq 0x98(%rsp), %rsi movq 0xA8(%rsp), %rax movq %rbp, %rsp popq %rbp | > | > > > | > > > > | > > | > > > > > > > > > > > > > > > > > > > > > > > > | > > > > | > > | > > > > > > > > > > > > > > > > > > > > > > > > > | > | 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 | movq 0x90(%rsp), %rdx movq 0x98(%rsp), %rsi movq 0xA8(%rsp), %rax movq %rbp, %rsp popq %rbp jmp _objc_msgSend fail: movq 0xA0(%rsp), %rdi movq 0x98(%rsp), %rsi movq %rbp, %rsp popq %rbp jmp _of_method_not_found _of_forward_stret: pushq %rbp movq %rsp, %rbp /* Save all arguments */ subq $0xC0, %rsp /* 16-byte alignment */ movq %rax, 0xA8(%rsp) movq %rdi, 0xA0(%rsp) movq %rsi, 0x98(%rsp) movq %rdx, 0x90(%rsp) movq %rcx, 0x88(%rsp) movq %r8, 0x80(%rsp) movq %r9, 0x78(%rsp) movd %xmm0, 0x70(%rsp) movd %xmm1, 0x60(%rsp) movd %xmm2, 0x50(%rsp) movd %xmm3, 0x40(%rsp) movd %xmm4, 0x30(%rsp) movd %xmm5, 0x20(%rsp) movd %xmm6, 0x10(%rsp) movd %xmm7, (%rsp) movq %rsi, %rdi call _object_getClass movq %rax, %rdi movq L_sel_forwardingTargetForSelector(%rip), %rsi call _class_respondsToSelector testq %rax, %rax jz fail_stret movq 0x98(%rsp), %rdi movq L_sel_forwardingTargetForSelector(%rip), %rsi movq 0x90(%rsp), %rdx call _objc_msgSend movq %rax, %rsi testq %rsi, %rsi jz fail_stret cmpq 0x98(%rsp), %rsi je fail_stret /* Restore all arguments, except %rsi */ movd (%rsp), %xmm7 movd 0x10(%rsp), %xmm6 movd 0x20(%rsp), %xmm5 movd 0x30(%rsp), %xmm4 movd 0x40(%rsp), %xmm3 movd 0x50(%rsp), %xmm2 movd 0x60(%rsp), %xmm1 movd 0x70(%rsp), %xmm0 movq 0x78(%rsp), %r9 movq 0x80(%rsp), %r8 movq 0x88(%rsp), %rcx movq 0x90(%rsp), %rdx movq 0xA0(%rsp), %rdi movq 0xA8(%rsp), %rax movq %rbp, %rsp popq %rbp jmp _objc_msgSend_stret fail_stret: movq 0x98(%rsp), %rdi movq 0x90(%rsp), %rsi movq %rbp, %rsp popq %rbp jmp _of_method_not_found |