summaryrefslogtreecommitdiffstats
path: root/src/usr/targeting
diff options
context:
space:
mode:
authorPriti Bavaria <pbavari@us.ibm.com>2013-12-11 13:15:16 -0600
committerA. Patrick Williams III <iawillia@us.ibm.com>2013-12-12 15:25:29 -0600
commitb8bd7e40b69ba88c6a32dd7d2fed9b765d7e3be7 (patch)
tree67e17e6a8131dd79bd146782eb8e9483fdebba53 /src/usr/targeting
parent2d18b3d85929710092cb401727a2dca102a99990 (diff)
downloadtalos-hostboot-b8bd7e40b69ba88c6a32dd7d2fed9b765d7e3be7.tar.gz
talos-hostboot-b8bd7e40b69ba88c6a32dd7d2fed9b765d7e3be7.zip
Segmentation fault in x86 targeting library
- 56 bits to 8 bit swap Change-Id: I6f09f5b37e475440aebb1438f98bfd20a3fc73ec CQ: SW236046 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/7680 Reviewed-by: Andrew J. Geissler <andrewg@us.ibm.com> Tested-by: Jenkins Server Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/targeting')
-rwxr-xr-xsrc/usr/targeting/common/xmltohb/xmltohb.pl29
1 files changed, 25 insertions, 4 deletions
diff --git a/src/usr/targeting/common/xmltohb/xmltohb.pl b/src/usr/targeting/common/xmltohb/xmltohb.pl
index c0216658b..a79655409 100755
--- a/src/usr/targeting/common/xmltohb/xmltohb.pl
+++ b/src/usr/targeting/common/xmltohb/xmltohb.pl
@@ -3488,7 +3488,6 @@ sub pack8byte {
my($quad) = @_;
my $value = unhexify($quad);
-
my $binaryData;
if($cfgBigEndian)
{
@@ -3505,6 +3504,20 @@ sub pack8byte {
return $binaryData;
}
+sub pack64bitsDecimal {
+ my($quad) = @_;
+
+ my $package = unpack("H*", pack8byte($quad));
+ if(!$cfgBigEndian)
+ {
+ my $val1 = sprintf("%08x", ((hex($package) >> 32) & 0xFFFFFFFF));
+ my $val2 = sprintf("%08x", (hex($package) & 0xFFFFFFFF));
+ $package = $val1.$val2;
+ }
+ return hex($package);
+}
+
+
################################################################################
# Pack 4 byte value into a buffer using configured endianness
################################################################################
@@ -4892,12 +4905,20 @@ sub updateTargetAssociationPointers
"offsetToPtrTo" . $associationType . "Associations"};
my $pointer = $targetAddrHashRef->{$id}{ $associationType . "Ptr" };
ASSOC_DBG("Seeking to offset: $seek");
- ASSOC_DBG("Writing pointer value of: " . toDecAndHex($pointer) );
+ # Keeping the actual pointer as it is, making a copy of it and
+ # using it for inversion if little endian
+ my $myPointer = pack64bitsDecimal($pointer);
+ ASSOC_IMP("Writing pointer value of: " . toDecAndHex($pointer) );
+ ASSOC_IMP("Writing myPointer value of: " . toDecAndHex($myPointer));
+
for(my $pointerByte=0; $pointerByte<8; ++$pointerByte)
{
+ my $val = sprintf("%02x",(($myPointer >>
+ ((BYTE_RIGHT_BIT_INDEX-$pointerByte)*BITS_PER_BYTE)) &
+ LOW_BYTE_MASK));
+ ASSOC_IMP("Writing byte value : $val");
vec($$targetsBinDataRef, $seek+$pointerByte,BITS_PER_BYTE) =
- (($pointer >> ((BYTE_RIGHT_BIT_INDEX-$pointerByte)
- *BITS_PER_BYTE)) & LOW_BYTE_MASK);
+ hex($val);
}
}
}
OpenPOWER on IntegriCloud