diff options
author | Priti Bavaria <pbavari@us.ibm.com> | 2013-12-11 13:15:16 -0600 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2013-12-12 15:25:29 -0600 |
commit | b8bd7e40b69ba88c6a32dd7d2fed9b765d7e3be7 (patch) | |
tree | 67e17e6a8131dd79bd146782eb8e9483fdebba53 /src/usr/targeting | |
parent | 2d18b3d85929710092cb401727a2dca102a99990 (diff) | |
download | talos-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-x | src/usr/targeting/common/xmltohb/xmltohb.pl | 29 |
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); } } } |