On Jan 28, 2011, at 3:42 PM, Fariborz Jahanian wrote:

> Author: fjahanian
> Date: Fri Jan 28 17:42:29 2011
> New Revision: 124507
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=124507&view=rev
> Log:
> More work to support -fapple-kext regarding 
> indirect vf calls and addition of extra entry
> at bottom of vtbls.
> 
> Added:
>    cfe/trunk/test/CodeGenCXX/apple-kext-indirect-call-2.C
> Modified:
>    cfe/trunk/lib/CodeGen/CGCXX.cpp
>    cfe/trunk/lib/CodeGen/CGExprCXX.cpp
>    cfe/trunk/lib/CodeGen/CGVTables.cpp
> 
> Modified: cfe/trunk/lib/CodeGen/CGCXX.cpp
> URL: 
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGCXX.cpp?rev=124507&r1=124506&r2=124507&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGCXX.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGCXX.cpp Fri Jan 28 17:42:29 2011
> @@ -329,7 +329,9 @@
>   assert(VTable && "BuildVirtualCall = kext vtbl pointer is null");
>   MD = MD->getCanonicalDecl();
>   uint64_t VTableIndex = CGM.getVTables().getMethodVTableIndex(MD);
> -  VTableIndex += 2;
> +  uint64_t AddressPoint = 
> +    CGM.getVTables().getAddressPoint(BaseSubobject(RD, 0), RD);
> +  VTableIndex += AddressPoint;
>   llvm::Value *VFuncPtr = 
>     CGF.Builder.CreateConstInBoundsGEP1_64(VTable, VTableIndex, "vfnkxt");
>   return CGF.Builder.CreateLoad(VFuncPtr);

Ah, I think I understand this now. We'll want to document what we're doing 
somewhere.

> Modified: cfe/trunk/lib/CodeGen/CGVTables.cpp
> URL: 
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGVTables.cpp?rev=124507&r1=124506&r2=124507&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGVTables.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGVTables.cpp Fri Jan 28 17:42:29 2011
> @@ -2758,7 +2758,14 @@
> 
>   // Add the VTable layout.
>   uint64_t NumVTableComponents = Builder.getNumVTableComponents();
> +  // -fapple-kext adds an extra entry at end of vtbl.
> +  bool IsAppleKext = CGM.getContext().getLangOptions().AppleKext;
> +  if (IsAppleKext)
> +    NumVTableComponents += 1;
> +
>   uint64_t *LayoutData = new uint64_t[NumVTableComponents + 1];
> +  if (IsAppleKext)
> +    LayoutData[NumVTableComponents] = 0;
>   Entry.setPointer(LayoutData);

NumVTableComponents-1?

        - Doug

_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to