summaryrefslogtreecommitdiffstats
path: root/src/build/linker/linker.C
diff options
context:
space:
mode:
authorDean Sanner <dsanner@us.ibm.com>2019-06-17 07:14:35 -0500
committerWilliam G Hoffa <wghoffa@us.ibm.com>2019-10-03 10:55:14 -0500
commitc4e7bcba07ccefc7f8094172def49a7e2a2cedcc (patch)
treebe05692eff8ea2b49258e22e2b3ab22c0ca1c007 /src/build/linker/linker.C
parentae388288d7cf86e7cc3c0370b6d0ca3aa1d9e9a3 (diff)
downloadtalos-hostboot-c4e7bcba07ccefc7f8094172def49a7e2a2cedcc.tar.gz
talos-hostboot-c4e7bcba07ccefc7f8094172def49a7e2a2cedcc.zip
Compile Hostboot with -Os
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>
Diffstat (limited to 'src/build/linker/linker.C')
-rw-r--r--src/build/linker/linker.C16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/build/linker/linker.C b/src/build/linker/linker.C
index e5e53ad8a..ba498d8a9 100644
--- a/src/build/linker/linker.C
+++ b/src/build/linker/linker.C
@@ -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
@@ -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))
{
@@ -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) &&
OpenPOWER on IntegriCloud