aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrey Ponomarenko <aponomarenko@rosalab.ru>2013-08-01 18:53:30 +0400
committerAndrey Ponomarenko <aponomarenko@rosalab.ru>2013-08-01 18:53:30 +0400
commitac687f969ca8bee69e9eb5e3267097f679cf283b (patch)
treeef4b0ed10fbe8e48c3186fb6d095e39effaf5b3b
parentf442c17449649492e74594fcd3d7fc3b3965bfc4 (diff)
downloadabi-compliance-checker-ac687f969ca8bee69e9eb5e3267097f679cf283b.tar.gz
Support for incomplete ABI dumps
-rwxr-xr-xabi-compliance-checker.pl3
-rw-r--r--modules/Internals/CallConv.pm12
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);
}
}