summaryrefslogtreecommitdiffstats
path: root/src/usr/fapi2
diff options
context:
space:
mode:
authorArtem Senichev <a.senichev@yadro.com>2019-09-30 13:41:12 +0300
committerDaniel M Crowell <dcrowell@us.ibm.com>2019-10-03 12:32:06 -0500
commitad8653d6a2db95816c5f36d9bfabad959e8a4427 (patch)
tree9f97083fa0365aaf4e165d1f0702ffcae892876e /src/usr/fapi2
parent3e7974342ab8082bc9b5fd6cb6faabc8df67a40e (diff)
downloadtalos-hostboot-ad8653d6a2db95816c5f36d9bfabad959e8a4427.tar.gz
talos-hostboot-ad8653d6a2db95816c5f36d9bfabad959e8a4427.zip
errl: Fix data reading from unaligned pointers
Some architectures (like an ARM used in OpenBMC) do not support unaligned memory access. On these systems, reading an integral value from an unaligned pointer leads to undefined behavior. This patch doesn't change existing functionality, but forces the compiler to generate extra instructions to satisfy architectural alignment requirements. Resolves #185 Signed-off-by: Artem Senichev <a.senichev@yadro.com> Change-Id: I6e75044b93c26cca76336d17bb3886fab403253a Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/84520 Reviewed-by: Matt Derksen <mderkse1@us.ibm.com> Reviewed-by: Christian R Geddes <crgeddes@us.ibm.com> Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Daniel M Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/usr/fapi2')
-rwxr-xr-xsrc/usr/fapi2/platCreateHwpErrParser.pl8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/usr/fapi2/platCreateHwpErrParser.pl b/src/usr/fapi2/platCreateHwpErrParser.pl
index e54f26a13..84fc84316 100755
--- a/src/usr/fapi2/platCreateHwpErrParser.pl
+++ b/src/usr/fapi2/platCreateHwpErrParser.pl
@@ -9,6 +9,7 @@
# Contributors Listed Below - COPYRIGHT 2015,2019
# [+] Google Inc.
# [+] International Business Machines Corp.
+# [+] YADRO
#
#
# Licensed under the Apache License, Version 2.0 (the "License");
@@ -78,13 +79,14 @@ print TGFILE "// This file is generated by perl script platCreateHwpErrParser.pl
print TGFILE "#ifndef HBFWPLATHWPERRPARSER_H_\n";
print TGFILE "#define HBFWPLATHWPERRPARSER_H_\n\n";
print TGFILE "#if defined(PARSER) || defined(LOGPARSER)\n\n";
+print TGFILE "#include \"errluserdetails.H\"\n\n";
print TGFILE "namespace fapi2\n";
print TGFILE "{\n\n";
print TGFILE "void hbfwParseHwpRc(ErrlUsrParser & i_parser,\n";
print TGFILE " void * i_pBuffer,\n";
print TGFILE " const uint32_t i_buflen)\n";
print TGFILE "{\n";
-print TGFILE " uint32_t l_rc = ntohl(*(static_cast<uint32_t *>(i_pBuffer)));\n";
+print TGFILE " uint32_t l_rc = ntohl(ERRORLOG::UINT32_FROM_PTR(i_pBuffer));\n";
print TGFILE " switch(l_rc)\n";
print TGFILE " {\n";
@@ -244,7 +246,7 @@ print TGFILE " uint8_t * l_pBuffer = static_cast<uint8_t *>(i_pBuffer);\n";
print TGFILE " uint32_t l_buflen = i_buflen;\n\n";
print TGFILE " // The first uint32_t is the FFDC ID\n";
print TGFILE " uint32_t * l_pFfdcId = static_cast<uint32_t *>(i_pBuffer);\n";
-print TGFILE " uint32_t l_ffdcId = ntohl(*l_pFfdcId);\n";
+print TGFILE " uint32_t l_ffdcId = ntohl(ERRORLOG::UINT32_FROM_PTR(l_pFfdcId));\n";
print TGFILE " l_pBuffer += sizeof(l_ffdcId);\n";
print TGFILE " l_buflen -= sizeof(l_ffdcId);\n";
print TGFILE " switch(l_ffdcId)\n";
@@ -365,7 +367,7 @@ foreach my $argnum (1 .. $#ARGV)
print TGFILE " if (l_buflen >= POS_LEN)\n";
print TGFILE " {\n";
print TGFILE " uint32_t * l_pBufferTemp = reinterpret_cast<uint32_t *>(l_pBuffer);\n";
- print TGFILE " i_parser.PrintNumber(\"Chip Position:\",\"%X\",ntohl(*l_pBufferTemp));\n";
+ print TGFILE " i_parser.PrintNumber(\"Chip Position:\",\"%X\",ntohl(ERRORLOG::UINT32_FROM_PTR(l_pBufferTemp)));\n";
print TGFILE " l_pBufferTemp = NULL;\n";
print TGFILE " l_pBuffer+= POS_LEN;\n";
print TGFILE " l_buflen -= POS_LEN;\n";
OpenPOWER on IntegriCloud