Differences From Artifact [4341f730bd]:
- File src/runtime/lookup-asm/lookup-asm-x86-elf.S — part of check-in [da242983b2] at 2023-08-29 22:48:02 on branch trunk — Add .note.GNU-stack on Haiku (user: js, size: 2345) [annotate] [blame] [check-ins using] [more...]
To Artifact [a240f9cb41]:
- File
src/runtime/lookup-asm/lookup-asm-x86-elf.S
— part of check-in
[a338982b3b]
at
2023-10-25 22:26:18
on branch trunk
— Move x86/ELF assembly back to Intel syntax
This used to be in Intel syntax, but was moved back to AT&T syntax for
consistency with the Mach-O version, where the assembler doesn't support
the Intel syntax properly. However, it makes more sense to use Intel
syntax where possible. (user: js, size: 2408) [annotate] [blame] [check-ins using]
︙ | ︙ | |||
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | * file. */ #include "config.h" #include "platform.h" .globl objc_msg_lookup .globl objc_msg_lookup_stret .globl objc_msg_lookup_super .globl objc_msg_lookup_super_stret .section .text .macro GENERATE_LOOKUP name notFound \name: | > > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 | * file. */ #include "config.h" #include "platform.h" .intel_syntax noprefix .globl objc_msg_lookup .globl objc_msg_lookup_stret .globl objc_msg_lookup_super .globl objc_msg_lookup_super_stret .section .text .macro GENERATE_LOOKUP name notFound \name: mov edx, [esp + 4] test edx, edx jz short returnNilMethod test dl, 1 jnz short .LtaggedPointer_\name mov edx, [edx] mov edx, [edx + 32] .Lmain_\name: mov eax, [esp + 8] #ifdef OF_SELUID24 movzx ecx, byte ptr [eax + 2] mov edx, [edx + 4 * ecx] #endif movzx ecx, byte ptr [eax + 1] mov edx, [edx + 4 * ecx] movzx ecx, byte ptr [eax] mov eax, [edx + 4 * ecx] test eax, eax jz short 0f ret 0: call getEIP add eax, offset _GLOBAL_OFFSET_TABLE_ mov eax, [eax + \notFound@GOT] jmp eax .LtaggedPointer_\name: call getEIP add eax, offset _GLOBAL_OFFSET_TABLE_ mov ecx, [eax + objc_taggedPointerSecret@GOT] xor edx, [ecx] and dl, 0xE movzx edx, dl mov eax, [eax + objc_taggedPointerClasses@GOT] mov edx, [eax + 2 * edx] mov edx, [edx + 32] jmp short .Lmain_\name .type \name, %function .size \name, .-\name .endm .macro GENERATE_LOOKUP_SUPER name lookup \name: mov edx, [esp + 4] mov eax, [edx] test eax, eax jz short returnNilMethod mov [esp + 4], eax mov edx, [edx + 4] mov edx, [edx + 32] jmp short .Lmain_\lookup .type \name, %function .size \name, .-\name .endm GENERATE_LOOKUP objc_msg_lookup objc_methodNotFound GENERATE_LOOKUP objc_msg_lookup_stret objc_methodNotFound_stret GENERATE_LOOKUP_SUPER objc_msg_lookup_super objc_msg_lookup GENERATE_LOOKUP_SUPER objc_msg_lookup_super_stret objc_msg_lookup_stret returnNilMethod: call getEIP add eax, offset _GLOBAL_OFFSET_TABLE_ lea eax, [eax + nilMethod@GOTOFF] ret nilMethod: xor eax, eax ret getEIP: mov eax, [esp] ret #if defined(OF_LINUX) || defined(OF_HAIKU) || defined(OF_HURD) .section .note.GNU-stack, "", %progbits #endif |