diff options
author | Andrey Ponomarenko <aponomarenko@rosalab.ru> | 2013-08-01 18:53:30 +0400 |
---|---|---|
committer | Andrey Ponomarenko <aponomarenko@rosalab.ru> | 2013-08-01 18:53:30 +0400 |
commit | ac687f969ca8bee69e9eb5e3267097f679cf283b (patch) | |
tree | ef4b0ed10fbe8e48c3186fb6d095e39effaf5b3b | |
parent | f442c17449649492e74594fcd3d7fc3b3965bfc4 (diff) | |
download | abi-compliance-checker-ac687f969ca8bee69e9eb5e3267097f679cf283b.tar.gz |
Support for incomplete ABI dumps
-rwxr-xr-x | abi-compliance-checker.pl | 3 | ||||
-rw-r--r-- | modules/Internals/CallConv.pm | 12 |
2 files changed, 14 insertions, 1 deletions
diff --git a/abi-compliance-checker.pl b/abi-compliance-checker.pl index 5d23dea..b7225ed 100755 --- a/abi-compliance-checker.pl +++ b/abi-compliance-checker.pl @@ -14906,7 +14906,8 @@ sub detectTypeChange($$$$) } } } - if($Type1_Pure{"Type"} eq "Array") + if($Type1_Pure{"Type"} eq "Array" + and $Type1_Pure{"BaseType"}) { # base_type[N] -> base_type[N] # base_type: older_structure -> typedef to newer_structure my %SubProblems = detectTypeChange($Type1_Base{"Tid"}, $Type2_Base{"Tid"}, $Prefix, $Level); diff --git a/modules/Internals/CallConv.pm b/modules/Internals/CallConv.pm index 70582b2..a333a92 100644 --- a/modules/Internals/CallConv.pm +++ b/modules/Internals/CallConv.pm @@ -941,6 +941,12 @@ sub getAlignment_Model($$$) elsif($TInfo->{$Tid}{"Type"} eq "Array") { my %Base = get_OneStep_BaseType($Tid, $TInfo); + + if($Base{"Tid"} eq $Tid) + { # emergency exit + return 0; + } + return getAlignment_Model($Base{"Tid"}, $TInfo, $Arch); } elsif($TInfo->{$Tid}{"Type"}=~/Intrinsic|Enum|Pointer|FuncPtr/) @@ -950,6 +956,12 @@ sub getAlignment_Model($$$) else { my %PureType = get_PureType($Tid, $TInfo); + + if($PureType{"Tid"} eq $Tid) + { # emergency exit + return 0; + } + return getAlignment_Model($PureType{"Tid"}, $TInfo, $Arch); } } |