diff options
author | Patrick Williams <iawillia@us.ibm.com> | 2013-07-16 15:29:15 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2013-09-17 16:45:31 -0500 |
commit | 5652d7c0c6a8db05699f2b4334e4615e1ba22127 (patch) | |
tree | a04321010213943bc44a908a0de0e88149a7e7de /src/build/linker | |
parent | 7c3226b7ef2b3e09bd40823732f05fbf0fe6778f (diff) | |
download | talos-hostboot-5652d7c0c6a8db05699f2b4334e4615e1ba22127.tar.gz talos-hostboot-5652d7c0c6a8db05699f2b4334e4615e1ba22127.zip |
Initial Hostboot Runtime image support.
RTC: 76675
Change-Id: Ibd21cf5b555e6dcee182a2f1a292b47d4f384ba0
Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/6127
Tested-by: Jenkins Server
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/build/linker')
-rw-r--r-- | src/build/linker/linker.C | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/build/linker/linker.C b/src/build/linker/linker.C index cebfb31d5..e0ca2adc2 100644 --- a/src/build/linker/linker.C +++ b/src/build/linker/linker.C @@ -271,6 +271,7 @@ vector<ModuleTable> module_tables; map<string,size_t> weak_symbols; set<string> all_symbols; set<string> weak_symbols_to_check; +bool includes_extended_image = false; //----------------------------------------------------------------------------- // MAIN @@ -330,6 +331,7 @@ int main(int argc, char** argv) { base_addr = strtoul(fname.c_str()+11,NULL,16) * 0x1000; isOutput = true; + includes_extended_image = true; } else { @@ -423,9 +425,11 @@ int main(int argc, char** argv) // cout << "Updating last address..." << std::hex; + const Symbol& last_address_symbol = + objects[0].symbols[VFS_TOSTRING(VFS_LAST_ADDRESS)]; uint64_t last_address_entry_address = - objects[0].symbols[VFS_TOSTRING(VFS_LAST_ADDRESS)].address + - objects[0].offset + objects[0].data.vma_offset; + last_address_symbol.address + last_address_symbol.base + + objects[0].offset; fseek(objects[0].iv_output, last_address_entry_address, SEEK_SET); @@ -435,7 +439,8 @@ int main(int argc, char** argv) cout << last_address << " to " << last_address_entry_address << endl; - // Output relocation data. + // Output relocation data for single file images. (non-extended) + if (!includes_extended_image) { fseek(objects[0].iv_output, 0, SEEK_END); char temp64[sizeof(uint64_t)]; |