Overview
Comment: | Add forwardingTargetForSelector: for ARM64/ELF
This has only been tested on Android so far. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
7e6bad326c59ef00d1055a004eb1233a |
User & Date: | js on 2016-01-20 00:19:46 |
Other Links: | manifest | tags |
Context
2016-01-20
| ||
00:25 | PLATFORMS.md: Add ARM64/ELF to "Forwarding" check-in: 7296d769bd user: js tags: trunk | |
00:19 | Add forwardingTargetForSelector: for ARM64/ELF check-in: 7e6bad326c user: js tags: trunk | |
2016-01-06
| ||
00:08 | Add lookup-asm-arm64-elf.S check-in: fd4a416f66 user: js tags: trunk | |
Changes
Added src/forwarding/forwarding-arm64-elf.S version [6eed7d193d].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 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 126 127 128 129 130 131 132 | /* * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 * Jonathan Schleifer <js@heap.zone> * * All rights reserved. * * This file is part of ObjFW. It may be distributed under the terms of the * Q Public License 1.0, which can be found in the file LICENSE.QPL included in * the packaging of this file. * * Alternatively, it may be distributed under the terms of the GNU General * Public License, either version 2 or 3, which can be found in the file * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this * file. */ #include "config.h" #include "platform.h" .globl of_forward .globl of_forward_stret .section .text of_forward: of_forward_stret: stp fp, lr, [sp, #-208]! mov fp, sp sub sp, sp, #208 /* Save all arguments, x8 and x19 */ stp x0, x1, [sp] stp x2, x3, [sp, #16] stp x4, x5, [sp, #32] stp x6, x7, [sp, #48] stp x8, x19, [sp, #64] /* Save all foating point arguments */ stp q0, q1, [sp, #80] stp q2, q3, [sp, #112] stp q4, q5, [sp, #144] stp q6, q7, [sp, #176] bl object_getClass adrp x19, sel_forwardingTargetForSelector_ add x19, x19, :lo12:sel_forwardingTargetForSelector_ mov x1, x19 bl class_respondsToSelector cbz x0, 0f ldr x0, [sp] mov x1, x19 bl objc_msg_lookup mov x1, x19 mov x19, x0 ldp x0, x2, [sp] blr x19 cbz x0, 0f ldr x1, [sp] cmp x0, x1 b.eq 0f mov x19, x0 ldr x1, [sp, #8] bl objc_msg_lookup mov x16, x0 mov x0, x19 /* Restore all arguments, x8 and x19, but not x0 */ ldr x1, [sp, #8] ldp x2, x3, [sp, #16] ldp x4, x5, [sp, #32] ldp x6, x7, [sp, #48] ldp x8, x19, [sp, #64] /* Restore all foating point arguments */ ldp q0, q1, [sp, #80] ldp q2, q3, [sp, #112] ldp q4, q5, [sp, #144] ldp q6, q7, [sp, #176] mov sp, fp ldp fp, lr, [sp], #208 br x16 0: ldp x0, x1, [sp] ldr x19, [sp, #72] mov sp, fp ldp fp, lr, [sp], #208 b of_method_not_found .type of_forward, %function .size of_forward, .-of_forward .type of_forward_stret, %function .size of_forward_stret, .-of_forward_stret init: adrp x0, module add x0, x0, :lo12:module b __objc_exec_class .section .init_array, "aw", %init_array .xword init .section .rodata str_forwardingTargetForSelector_: .asciz "forwardingTargetForSelector:" .section .data sel_forwardingTargetForSelector_: .xword str_forwardingTargetForSelector_, 0 .xword 0, 0 symtab: .xword 0, sel_forwardingTargetForSelector_ .short 0, 0 .long 4 .xword 0 module: .xword 8, 32, 0, symtab #ifdef OF_LINUX .section .note.GNU-stack, "", %progbits #endif |
Modified src/forwarding/forwarding.S from [746d84a02a] to [c140baeab8].
︙ | ︙ | |||
32 33 34 35 36 37 38 39 40 41 42 43 44 45 | # endif #else # if defined(OF_ELF) # if defined(OF_X86_64) # include "forwarding-x86_64-elf.S" # elif defined(OF_X86) # include "forwarding-x86-elf.S" # elif defined(OF_ARM) # include "forwarding-arm-elf.S" # elif defined(OF_POWERPC) # include "forwarding-ppc-elf.S" # elif defined(OF_MIPS) # include "forwarding-mips-elf.S" # endif | > > | 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | # endif #else # if defined(OF_ELF) # if defined(OF_X86_64) # include "forwarding-x86_64-elf.S" # elif defined(OF_X86) # include "forwarding-x86-elf.S" # elif defined(OF_ARM64) # include "forwarding-arm64-elf.S" # elif defined(OF_ARM) # include "forwarding-arm-elf.S" # elif defined(OF_POWERPC) # include "forwarding-ppc-elf.S" # elif defined(OF_MIPS) # include "forwarding-mips-elf.S" # endif |
︙ | ︙ |
Modified src/macros.h from [9f039167db] to [f5907cb050].
︙ | ︙ | |||
249 250 251 252 253 254 255 | defined(OF_ARM) || defined(OF_POWERPC) # define OF_HAVE_FORWARDING_TARGET_FOR_SELECTOR # define OF_HAVE_FORWARDING_TARGET_FOR_SELECTOR_STRET # endif #else # if defined(OF_ELF) # if defined(OF_X86_64) || defined(OF_X86) || \ | | > | 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 | defined(OF_ARM) || defined(OF_POWERPC) # define OF_HAVE_FORWARDING_TARGET_FOR_SELECTOR # define OF_HAVE_FORWARDING_TARGET_FOR_SELECTOR_STRET # endif #else # if defined(OF_ELF) # if defined(OF_X86_64) || defined(OF_X86) || \ defined(OF_ARM64) || defined(OF_ARM) || defined(OF_POWERPC) || \ defined(OF_MIPS) # define OF_HAVE_FORWARDING_TARGET_FOR_SELECTOR # if __OBJFW_RUNTIME_ABI__ >= 800 # define OF_HAVE_FORWARDING_TARGET_FOR_SELECTOR_STRET # endif # endif # elif defined(OF_WINDOWS) # if defined(OF_X86_64) || defined(OF_X86) |
︙ | ︙ |