Differences From Artifact [05632c83d2]:
- File
src/forwarding-x86-elf.S
— part of check-in
[9713ad857d]
at
2013-07-26 15:21:45
on branch trunk
— Add support for objc_msg_lookup_stret.
The assembly implementations of the lookup and forwarding still need to
be adjusted. Those just alias to the non-stret version for now so that
linking works, meaning the behaviour is still the same as without
support for objc_msg_lookup_stret for now. (user: js, size: 1991) [annotate] [blame] [check-ins using]
To Artifact [c6695dc060]:
- File src/forwarding-x86-elf.S — part of check-in [0379a04a1b] at 2013-07-28 01:12:29 on branch trunk — Add of_forward_stret for x86/ELF. (user: js, size: 2652) [annotate] [blame] [check-ins using]
︙ | ︙ | |||
15 16 17 18 19 20 21 | */ .globl of_forward .globl of_forward_stret .section .text of_forward: | < | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | */ .globl of_forward .globl of_forward_stret .section .text of_forward: pushl %ebp movl %esp, %ebp pushl %ebx subl $20, %esp call get_eip |
︙ | ︙ | |||
51 52 53 54 55 56 57 58 | call *%eax addl $20, %esp popl %ebx popl %ebp jmp *%eax | > > > > > > > > > | > | > > > > > | > > > > > > > > > > > > > > > > > > > > | | | | | > > > > | 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 126 127 | call *%eax addl $20, %esp popl %ebx popl %ebp jmp *%eax .type of_forward, %function .size of_forward, .-of_forward of_forward_stret: pushl %ebp movl %esp, %ebp pushl %ebx subl $20, %esp call get_eip .L1: movl 12(%ebp), %eax movl %eax, (%esp) leal sel_forwardingTargetForSelector_-.L1(%ebx), %eax movl %eax, 4(%esp) leal objc_msg_lookup-.L1(%ebx), %eax call *%eax movl 12(%ebp), %edx movl %edx, (%esp) leal sel_forwardingTargetForSelector_-.L1(%ebx), %edx movl %edx, 4(%esp) movl 16(%ebp), %edx movl %edx, 8(%esp) call *%eax movl %eax, 12(%ebp) movl %eax, (%esp) movl 16(%ebp), %eax movl %eax, 4(%esp) leal objc_msg_lookup-.L1(%ebx), %eax call *%eax addl $20, %esp popl %ebx popl %ebp jmp *%eax .type of_forward_stret, %function .size of_forward_stret, .-of_forward_stret init: pushl %ebp movl %esp, %ebp pushl %ebx subl $4, %esp call get_eip .L2: leal module-.L2(%ebx), %eax movl %eax, (%esp) leal __objc_exec_class-.L2(%ebx), %eax call *%eax addl $4, %esp popl %ebx popl %ebp ret get_eip: movl (%esp), %ebx ret .section .ctors, "a", %progbits .long init .section .rodata str_forwardingTargetForSelector_: .asciz "forwardingTargetForSelector:" |
︙ | ︙ |