On Jan 31, 2011, at 9:17 AM, jahanian wrote: > > On Jan 31, 2011, at 7:26 AM, Douglas Gregor wrote: > >> >> 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. > > Yes. We have have the documentation of what -fapple-kext does after al pieces > are known and are in place.
Okay! >> >>> 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? > > We are adding a null entry after all other entries. So, last entry is > nullified. Oh, of course, sorry. I blame Monday! - Doug
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
