@@ -1265,9 +1265,6 @@ void ObjCProcessor::ProcessObjCData()
1265
1265
m_symbolQueue = new SymbolQueue ();
1266
1266
auto addrSize = m_data->GetAddressSize ();
1267
1267
1268
- m_typeNames.relativePtr = defineTypedef (m_data, {" rptr_t" }, Type::IntegerType (4 , true ));
1269
- auto rptr_t = Type::NamedType (m_data, m_typeNames.relativePtr );
1270
-
1271
1268
m_typeNames.id = defineTypedef (m_data, {" id" }, Type::PointerType (addrSize, Type::VoidType ()));
1272
1269
m_typeNames.sel = defineTypedef (m_data, {" SEL" }, Type::PointerType (addrSize, Type::IntegerType (1 , false )));
1273
1270
@@ -1276,18 +1273,28 @@ void ObjCProcessor::ProcessObjCData()
1276
1273
m_typeNames.nsuInteger = defineTypedef (m_data, {" NSUInteger" }, Type::IntegerType (addrSize, false ));
1277
1274
m_typeNames.cgFloat = defineTypedef (m_data, {" CGFloat" }, Type::FloatType (addrSize));
1278
1275
1279
- Ref<Type> relativeSelectorPtr;
1276
+ BNPointerBaseType relativeSelectorBaseType = RelativeToVariableAddressPointerBaseType;
1277
+ uint64_t relativeSelectorBaseOffset = 0 ;
1280
1278
auto reader = GetReader ();
1281
1279
if (auto objCRelativeMethodsBaseAddr = GetObjCRelativeMethodBaseAddress (reader.get ())) {
1282
1280
m_logger->LogDebug (" RelativeMethodSelector Base: 0x%llx" , objCRelativeMethodsBaseAddr);
1283
-
1284
- auto type = TypeBuilder::PointerType (4 , Type::PointerType (addrSize, Type::IntegerType (1 , false )))
1285
- .SetPointerBase (RelativeToConstantPointerBaseType, objCRelativeMethodsBaseAddr)
1286
- .Finalize ();
1287
- auto relativeSelectorPtrName = defineTypedef (m_data, {" relative_SEL" }, type);
1288
- relativeSelectorPtr = Type::NamedType (m_data, relativeSelectorPtrName);
1281
+ relativeSelectorBaseType = RelativeToConstantPointerBaseType;
1282
+ relativeSelectorBaseOffset = objCRelativeMethodsBaseAddr;
1289
1283
}
1290
1284
1285
+ auto relativeSelectorPtrName = defineTypedef (m_data, {" rel_SEL" },
1286
+ TypeBuilder::PointerType (4 , Type::PointerType (addrSize, Type::IntegerType (1 , false )))
1287
+ .SetPointerBase (relativeSelectorBaseType, relativeSelectorBaseOffset)
1288
+ .Finalize ());
1289
+ auto relativeCharPtrName = defineTypedef (m_data, {" rel_cstr" },
1290
+ TypeBuilder::PointerType (4 , Type::PointerType (addrSize, Type::IntegerType (1 , false )))
1291
+ .SetPointerBase (RelativeToVariableAddressPointerBaseType, 0 )
1292
+ .Finalize ());
1293
+ auto relativeIMPPtrName = defineTypedef (m_data, {" rel_IMP" },
1294
+ TypeBuilder::PointerType (4 , Type::VoidType ())
1295
+ .SetPointerBase (RelativeToVariableAddressPointerBaseType, 0 )
1296
+ .Finalize ());
1297
+
1291
1298
// https://github.com/apple-oss-distributions/objc4/blob/196363c165b175ed925ef6b9b99f558717923c47/runtime/objc-abi.h
1292
1299
EnumerationBuilder imageInfoFlagBuilder;
1293
1300
imageInfoFlagBuilder.AddMemberWithValue (" IsReplacement" , 1 << 0 );
@@ -1323,9 +1330,9 @@ void ObjCProcessor::ProcessObjCData()
1323
1330
m_typeNames.imageInfo = imageInfoType.first ;
1324
1331
1325
1332
StructureBuilder methodEntry;
1326
- methodEntry.AddMember (relativeSelectorPtr ? relativeSelectorPtr : rptr_t , " name" );
1327
- methodEntry.AddMember (rptr_t , " types" );
1328
- methodEntry.AddMember (rptr_t , " imp" );
1333
+ methodEntry.AddMember (Type::NamedType (m_data, relativeSelectorPtrName) , " name" );
1334
+ methodEntry.AddMember (Type::NamedType (m_data, relativeCharPtrName) , " types" );
1335
+ methodEntry.AddMember (Type::NamedType (m_data, relativeIMPPtrName) , " imp" );
1329
1336
auto type = finalizeStructureBuilder (m_data, methodEntry, " objc_method_entry_t" );
1330
1337
m_typeNames.methodEntry = type.first ;
1331
1338
0 commit comments