@@ -12,7 +12,7 @@ use object::{Object as _, ObjectSection as _, ObjectSymbol as _};
12
12
13
13
use crate :: {
14
14
arch:: { Arch , RelocationOverride , RelocationOverrideTarget , new_arch} ,
15
- diff:: DiffObjConfig ,
15
+ diff:: { DiffObjConfig , DiffSide } ,
16
16
obj:: {
17
17
FlowAnalysisResult , Object , Relocation , RelocationFlags , Section , SectionData , SectionFlag ,
18
18
SectionKind , Symbol , SymbolFlag , SymbolFlagSet , SymbolKind ,
@@ -74,6 +74,14 @@ fn map_symbol(
74
74
{
75
75
flags |= SymbolFlag :: Hidden ;
76
76
}
77
+ if file. format ( ) == object:: BinaryFormat :: Coff
78
+ && let Ok ( name) = symbol. name ( )
79
+ && ( name. starts_with ( "except_data_" )
80
+ || name. starts_with ( "__unwind" )
81
+ || name. starts_with ( "__catch" ) )
82
+ {
83
+ flags |= SymbolFlag :: Hidden ;
84
+ }
77
85
78
86
let kind = match symbol. kind ( ) {
79
87
object:: SymbolKind :: Text => SymbolKind :: Function ,
@@ -967,21 +975,25 @@ fn do_combine_sections(
967
975
}
968
976
969
977
#[ cfg( feature = "std" ) ]
970
- pub fn read ( obj_path : & std:: path:: Path , config : & DiffObjConfig ) -> Result < Object > {
978
+ pub fn read (
979
+ obj_path : & std:: path:: Path ,
980
+ config : & DiffObjConfig ,
981
+ diff_side : DiffSide ,
982
+ ) -> Result < Object > {
971
983
let ( data, timestamp) = {
972
984
let file = std:: fs:: File :: open ( obj_path) ?;
973
985
let timestamp = filetime:: FileTime :: from_last_modification_time ( & file. metadata ( ) ?) ;
974
986
( unsafe { memmap2:: Mmap :: map ( & file) } ?, timestamp)
975
987
} ;
976
- let mut obj = parse ( & data, config) ?;
988
+ let mut obj = parse ( & data, config, diff_side ) ?;
977
989
obj. path = Some ( obj_path. to_path_buf ( ) ) ;
978
990
obj. timestamp = Some ( timestamp) ;
979
991
Ok ( obj)
980
992
}
981
993
982
- pub fn parse ( data : & [ u8 ] , config : & DiffObjConfig ) -> Result < Object > {
994
+ pub fn parse ( data : & [ u8 ] , config : & DiffObjConfig , diff_side : DiffSide ) -> Result < Object > {
983
995
let obj_file = object:: File :: parse ( data) ?;
984
- let mut arch = new_arch ( & obj_file) ?;
996
+ let mut arch = new_arch ( & obj_file, diff_side ) ?;
985
997
let split_meta = parse_split_meta ( & obj_file) ?;
986
998
let ( mut sections, section_indices) =
987
999
map_sections ( arch. as_ref ( ) , & obj_file, split_meta. as_ref ( ) ) ?;
0 commit comments