@@ -769,17 +769,7 @@ AddressClass ObjectFileELF::GetAddressClass(addr_t file_addr) {
769
769
if (res != AddressClass::eCode)
770
770
return res;
771
771
772
- auto ub = m_address_class_map.upper_bound (file_addr);
773
- if (ub == m_address_class_map.begin ()) {
774
- // No entry in the address class map before the address. Return default
775
- // address class for an address in a code section.
776
- return AddressClass::eCode;
777
- }
778
-
779
- // Move iterator to the address class entry preceding address
780
- --ub;
781
-
782
- return ub->second ;
772
+ return symtab->GetAddressClass (file_addr);
783
773
}
784
774
785
775
size_t ObjectFileELF::SectionIndex (const SectionHeaderCollIter &I) {
@@ -2213,18 +2203,18 @@ unsigned ObjectFileELF::ParseSymbols(Symtab *symtab, user_id_t start_id,
2213
2203
switch (mapping_symbol) {
2214
2204
case ' a' :
2215
2205
// $a[.<any>]* - marks an ARM instruction sequence
2216
- m_address_class_map[ symbol.st_value ] = AddressClass::eCode;
2206
+ symtab-> SetAddressClass ( symbol.st_value , AddressClass::eCode) ;
2217
2207
break ;
2218
2208
case ' b' :
2219
2209
case ' t' :
2220
2210
// $b[.<any>]* - marks a THUMB BL instruction sequence
2221
2211
// $t[.<any>]* - marks a THUMB instruction sequence
2222
- m_address_class_map[ symbol.st_value ] =
2223
- AddressClass::eCodeAlternateISA;
2212
+ symtab-> SetAddressClass ( symbol.st_value ,
2213
+ AddressClass::eCodeAlternateISA) ;
2224
2214
break ;
2225
2215
case ' d' :
2226
2216
// $d[.<any>]* - marks a data item sequence (e.g. lit pool)
2227
- m_address_class_map[ symbol.st_value ] = AddressClass::eData;
2217
+ symtab-> SetAddressClass ( symbol.st_value , AddressClass::eData) ;
2228
2218
break ;
2229
2219
}
2230
2220
}
@@ -2238,11 +2228,11 @@ unsigned ObjectFileELF::ParseSymbols(Symtab *symtab, user_id_t start_id,
2238
2228
switch (mapping_symbol) {
2239
2229
case ' x' :
2240
2230
// $x[.<any>]* - marks an A64 instruction sequence
2241
- m_address_class_map[ symbol.st_value ] = AddressClass::eCode;
2231
+ symtab-> SetAddressClass ( symbol.st_value , AddressClass::eCode) ;
2242
2232
break ;
2243
2233
case ' d' :
2244
2234
// $d[.<any>]* - marks a data item sequence (e.g. lit pool)
2245
- m_address_class_map[ symbol.st_value ] = AddressClass::eData;
2235
+ symtab-> SetAddressClass ( symbol.st_value , AddressClass::eData) ;
2246
2236
break ;
2247
2237
}
2248
2238
}
@@ -2260,11 +2250,11 @@ unsigned ObjectFileELF::ParseSymbols(Symtab *symtab, user_id_t start_id,
2260
2250
// conjunction with symbol.st_value to produce the final
2261
2251
// symbol_value that we store in the symtab.
2262
2252
symbol_value_offset = -1 ;
2263
- m_address_class_map[ symbol.st_value ^ 1 ] =
2264
- AddressClass::eCodeAlternateISA;
2253
+ symtab-> SetAddressClass ( symbol.st_value ^ 1 ,
2254
+ AddressClass::eCodeAlternateISA) ;
2265
2255
} else {
2266
2256
// This address is ARM
2267
- m_address_class_map[ symbol.st_value ] = AddressClass::eCode;
2257
+ symtab-> SetAddressClass ( symbol.st_value , AddressClass::eCode) ;
2268
2258
}
2269
2259
}
2270
2260
}
@@ -2285,17 +2275,19 @@ unsigned ObjectFileELF::ParseSymbols(Symtab *symtab, user_id_t start_id,
2285
2275
*/
2286
2276
if (arch.IsMIPS ()) {
2287
2277
if (IS_MICROMIPS (symbol.st_other ))
2288
- m_address_class_map[symbol.st_value ] = AddressClass::eCodeAlternateISA;
2278
+ symtab->SetAddressClass (symbol.st_value ,
2279
+ AddressClass::eCodeAlternateISA);
2289
2280
else if ((symbol.st_value & 1 ) && (symbol_type == eSymbolTypeCode)) {
2290
2281
symbol.st_value = symbol.st_value & (~1ull );
2291
- m_address_class_map[symbol.st_value ] = AddressClass::eCodeAlternateISA;
2282
+ symtab->SetAddressClass (symbol.st_value ,
2283
+ AddressClass::eCodeAlternateISA);
2292
2284
} else {
2293
2285
if (symbol_type == eSymbolTypeCode)
2294
- m_address_class_map[ symbol.st_value ] = AddressClass::eCode;
2286
+ symtab-> SetAddressClass ( symbol.st_value , AddressClass::eCode) ;
2295
2287
else if (symbol_type == eSymbolTypeData)
2296
- m_address_class_map[ symbol.st_value ] = AddressClass::eData;
2288
+ symtab-> SetAddressClass ( symbol.st_value , AddressClass::eData) ;
2297
2289
else
2298
- m_address_class_map[ symbol.st_value ] = AddressClass::eUnknown;
2290
+ symtab-> SetAddressClass ( symbol.st_value , AddressClass::eUnknown) ;
2299
2291
}
2300
2292
}
2301
2293
}
@@ -3060,10 +3052,10 @@ void ObjectFileELF::ParseSymtab(Symtab &lldb_symtab) {
3060
3052
if (arch.GetMachine () == llvm::Triple::arm &&
3061
3053
(entry_point_file_addr & 1 )) {
3062
3054
symbol.GetAddressRef ().SetOffset (entry_point_addr.GetOffset () ^ 1 );
3063
- m_address_class_map[ entry_point_file_addr ^ 1 ] =
3064
- AddressClass::eCodeAlternateISA;
3055
+ lldb_symtab. SetAddressClass ( entry_point_file_addr ^ 1 ,
3056
+ AddressClass::eCodeAlternateISA) ;
3065
3057
} else {
3066
- m_address_class_map[ entry_point_file_addr] = AddressClass::eCode;
3058
+ lldb_symtab. SetAddressClass ( entry_point_file_addr, AddressClass::eCode) ;
3067
3059
}
3068
3060
lldb_symtab.AddSymbol (symbol);
3069
3061
}
0 commit comments