Index: src/runtime/lookup-asm/lookup-asm-x86-elf.S ================================================================== --- src/runtime/lookup-asm/lookup-asm-x86-elf.S +++ src/runtime/lookup-asm/lookup-asm-x86-elf.S @@ -31,10 +31,13 @@ \name: mov edx, [esp+4] test edx, edx jz short ret_nil + bt edx, 0 + jc short .Ltagged_pointer_\name + mov edx, [edx] mov edx, [edx+32] .Lmain_\name: mov eax, [esp+8] @@ -57,10 +60,23 @@ call get_eip 1: add eax, offset _GLOBAL_OFFSET_TABLE_ mov eax, [eax+\not_found@GOT] jmp eax + +.Ltagged_pointer_\name: + movzx edx, dl + shr edx, 1 + + call get_eip + add eax, offset _GLOBAL_OFFSET_TABLE_ + + lea eax, [eax+objc_tagged_pointer_classes@GOTOFF] + mov edx, [eax+edx*4] + mov edx, [edx+32] + + jmp short .Lmain_\name .type \name, %function .size \name, .-\name .endm .macro generate_lookup_super name lookup