Skip to content

Commit

Permalink
Compile Hostboot with -Os
Browse files Browse the repository at this point in the history
Hostboot currently spends a significant percentage of
time loading data from PNOR across a relatively slow LPC
bus.  This commit enables compilation of Hostboot with
-Os, optimized for space to reduce the amount of data required
to be transferred across the LPC bus

Rough measurements show a ~30% size reduction of the hostboot
image and a ~10% reduction (improvement) in boot time

Change-Id: Ib73863019595a24cc7d10e924bc5c92cd64af1ed
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/84436
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: William G Hoffa <wghoffa@us.ibm.com>
  • Loading branch information
sannerd authored and wghoffa committed Oct 3, 2019
1 parent ae38828 commit c4e7bcb
Show file tree
Hide file tree
Showing 6 changed files with 27 additions and 10 deletions.
16 changes: 16 additions & 0 deletions src/build/linker/linker.C
Expand Up @@ -123,6 +123,7 @@ struct Object
string name; //!< full path name of file
bfd* image; //!< bfd image of object
Section text; //!< text section of binary
Section sfpr; //!< sfpr section of binary
Section rodata; //!< rodata section of binary
Section data; //!< data section of binary
map<string, Symbol> symbols; //!< symbol map
Expand Down Expand Up @@ -594,6 +595,11 @@ bool Object::read_object(const char* i_file)
{
s = &this->text;
}
else if (string(".sfpr") ==
bfd_get_section_name(image, image_section))
{
s = &this->sfpr;
}
else if (string(".rodata") ==
bfd_get_section_name(image, image_section))
{
Expand Down Expand Up @@ -648,6 +654,16 @@ bool Object::write_object()
cout << strerror(error) << endl;
}

// Output sfpr section.
fseek(iv_output, offset + sfpr.vma_offset, SEEK_SET);
if ((0 != sfpr.size) &&
(sfpr.size != fwrite(sfpr.data, 1, sfpr.size, iv_output)))
{
int error = errno;
cout << "Error writing to output for sfpr." << endl;
cout << strerror(error) << endl;
}

// Output RODATA section.
fseek(iv_output, offset + rodata.vma_offset, SEEK_SET);
if ((0 != rodata.size) &&
Expand Down
2 changes: 1 addition & 1 deletion src/build/mkrules/cflags.env.mk
Expand Up @@ -28,7 +28,7 @@
# Description:
# Configuration of the compiler, linker, etc. flags.

OPT_LEVEL ?= -O3
OPT_LEVEL ?= -Os

ifdef MODULE
COMMONFLAGS += -fPIC -Bsymbolic -Bsymbolic-functions
Expand Down
3 changes: 2 additions & 1 deletion src/makefile
Expand Up @@ -237,7 +237,8 @@ TESTCASE_MODULES += testscan
TESTCASE_MODULES += testsecureboot
TESTCASE_MODULES += testfsiscom
TESTCASE_MODULES += testlpc
TESTCASE_MODULES += $(if $(CONFIG_HTMGT),testhtmgt)
#TODO: RTC 213102 to properly add & execute HTMGT test
#TESTCASE_MODULES += $(if $(CONFIG_HTMGT),testhtmgt)
TESTCASE_MODULES += testinitservice
TESTCASE_MODULES += testfsi
TESTCASE_MODULES += testibscom
Expand Down
12 changes: 6 additions & 6 deletions src/usr/errl/runtime/test/test_runtimeDeconfig.H
Expand Up @@ -51,8 +51,8 @@ class deconfigureTargetAtRuntimeTest : public CxxTest::TestSuite
// pass in a null target pointer
TARGETING::Target * l_target = nullptr;

errlHndl_t l_errl =
HWAS::theDeconfigGard().deconfigureTargetAtRuntime(
errlHndl_t l_errl = nullptr;
l_errl = HWAS::theDeconfigGard().deconfigureTargetAtRuntime(
l_target,
HWAS::DeconfigGard::FULLY_AT_RUNTIME,
l_errl);
Expand Down Expand Up @@ -118,8 +118,8 @@ class deconfigureTargetAtRuntimeTest : public CxxTest::TestSuite

l_target = l_cores.at(0);

errlHndl_t l_errl =
HWAS::theDeconfigGard().deconfigureTargetAtRuntime(
errlHndl_t l_errl = nullptr;
l_errl = HWAS::theDeconfigGard().deconfigureTargetAtRuntime(
l_target,
HWAS::DeconfigGard::SPEC_DECONFIG,
l_errl);
Expand Down Expand Up @@ -179,8 +179,8 @@ class deconfigureTargetAtRuntimeTest : public CxxTest::TestSuite

TARGETING::Target * l_target = l_proc.at(0);

errlHndl_t l_errl =
HWAS::theDeconfigGard().deconfigureTargetAtRuntime(
errlHndl_t l_errl = nullptr;
l_errl = HWAS::theDeconfigGard().deconfigureTargetAtRuntime(
l_target,
HWAS::DeconfigGard::FULLY_AT_RUNTIME,
l_errl);
Expand Down
2 changes: 1 addition & 1 deletion src/usr/isteps/istep16/call_mss_scrub.C
Expand Up @@ -73,7 +73,7 @@ void* call_mss_scrub (void *io_pArgs)

// Determine which target type runs the maintenance commands.
TARGETING::MODEL masterProcModel = masterProc->getAttr<ATTR_MODEL>();
TARGETING::TYPE maintTrgtType;
TARGETING::TYPE maintTrgtType = TYPE_MBA;
switch ( masterProcModel )
{
case MODEL_CUMULUS: maintTrgtType = TYPE_MBA; break;
Expand Down
2 changes: 1 addition & 1 deletion src/usr/isteps/tod/runtime/rt_todintf.C
Expand Up @@ -31,7 +31,7 @@
#include <runtime/interface.h> // g_hostInterfaces
#include <util/runtime/rt_fwreq_helper.H> // firmware_request_helper
#include <tod_init_reasoncodes.H> // TOD_RT_TOPOLOGY_RESET_BACKUP, etc
#include <errlmanager_common.C> // errlCommit
#include <errl/errlentry.H>


using namespace ERRORLOG;
Expand Down

0 comments on commit c4e7bcb

Please sign in to comment.