| 1261 | } |
| 1262 | |
| 1263 | void ObjCProcessor::ProcessObjCData() |
| 1264 | { |
| 1265 | m_symbolQueue = new SymbolQueue(); |
| 1266 | auto addrSize = m_data->GetAddressSize(); |
| 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 | m_typeNames.id = defineTypedef(m_data, {"id"}, Type::PointerType(addrSize, Type::VoidType())); |
| 1272 | m_typeNames.sel = defineTypedef(m_data, {"SEL"}, Type::PointerType(addrSize, Type::IntegerType(1, false))); |
| 1273 | |
| 1274 | m_typeNames.BOOL = defineTypedef(m_data, {"BOOL"}, Type::IntegerType(1, false)); |
| 1275 | m_typeNames.nsInteger = defineTypedef(m_data, {"NSInteger"}, Type::IntegerType(addrSize, true)); |
| 1276 | m_typeNames.nsuInteger = defineTypedef(m_data, {"NSUInteger"}, Type::IntegerType(addrSize, false)); |
| 1277 | m_typeNames.cgFloat = defineTypedef(m_data, {"CGFloat"}, Type::FloatType(addrSize)); |
| 1278 | |
| 1279 | Ref<Type> relativeSelectorPtr; |
| 1280 | auto reader = GetReader(); |
| 1281 | if (auto objCRelativeMethodsBaseAddr = GetObjCRelativeMethodBaseAddress(reader.get())) { |
| 1282 | 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); |
| 1289 | } |
| 1290 | |
| 1291 | // https://github.com/apple-oss-distributions/objc4/blob/196363c165b175ed925ef6b9b99f558717923c47/runtime/objc-abi.h |
| 1292 | EnumerationBuilder imageInfoFlagBuilder; |
| 1293 | imageInfoFlagBuilder.AddMemberWithValue("IsReplacement", 1 << 0); |
| 1294 | imageInfoFlagBuilder.AddMemberWithValue("SupportsGC", 1 << 1); |
| 1295 | imageInfoFlagBuilder.AddMemberWithValue("RequiresGC", 1 << 2); |
| 1296 | imageInfoFlagBuilder.AddMemberWithValue("OptimizedByDyld", 1 << 3); |
| 1297 | imageInfoFlagBuilder.AddMemberWithValue("CorrectedSynthesize", 1 << 4); |
| 1298 | imageInfoFlagBuilder.AddMemberWithValue("IsSimulated", 1 << 5); |
| 1299 | imageInfoFlagBuilder.AddMemberWithValue("HasCategoryClassProperties", 1 << 6); |
| 1300 | imageInfoFlagBuilder.AddMemberWithValue("OptimizedByDyldClosure", 1 << 7); |
| 1301 | imageInfoFlagBuilder.AddMemberWithValue("SwiftUnstableVersionMask", 0xff << 8); |
| 1302 | imageInfoFlagBuilder.AddMemberWithValue("SwiftStableVersionMask", 0xFFFF << 16); |
| 1303 | auto imageInfoFlagType = finalizeEnumerationBuilder(m_data, imageInfoFlagBuilder, 4, {"objc_image_info_flags"}); |
| 1304 | m_typeNames.imageInfoFlags = imageInfoFlagType.first; |
| 1305 | |
| 1306 | EnumerationBuilder swiftVersionBuilder; |
| 1307 | swiftVersionBuilder.AddMemberWithValue("SwiftVersion1", 1); |
| 1308 | swiftVersionBuilder.AddMemberWithValue("SwiftVersion1_2", 2); |
| 1309 | swiftVersionBuilder.AddMemberWithValue("SwiftVersion2", 3); |
| 1310 | swiftVersionBuilder.AddMemberWithValue("SwiftVersion3", 4); |
| 1311 | swiftVersionBuilder.AddMemberWithValue("SwiftVersion4", 5); |
| 1312 | swiftVersionBuilder.AddMemberWithValue("SwiftVersion4_1", 6); // [sic] |
| 1313 | swiftVersionBuilder.AddMemberWithValue("SwiftVersion4_2", 6); |
| 1314 | swiftVersionBuilder.AddMemberWithValue("SwiftVersion5", 7); |
| 1315 | auto swiftVersionType = |
| 1316 | finalizeEnumerationBuilder(m_data, swiftVersionBuilder, 4, {"objc_image_info_swift_version"}); |
| 1317 | m_typeNames.imageInfoSwiftVersion = swiftVersionType.first; |
| 1318 | |
| 1319 | StructureBuilder imageInfoBuilder; |
| 1320 | imageInfoBuilder.AddMember(Type::IntegerType(4, false), "version"); |
no test coverage detected