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