summaryrefslogtreecommitdiffstats
path: root/src/build/linkerscripts/z
diff options
context:
space:
mode:
authorOliver Morlok <MARQUARO@de.ibm.com>2018-02-14 20:51:35 +0100
committerSachin Gupta <sgupta2m@in.ibm.com>2018-02-16 12:50:09 -0500
commit56e408e085ca612a5bdf708edbc313fae6e6815d (patch)
tree59f258bd3ea450a6f72bda3f97055a19f4c39930 /src/build/linkerscripts/z
parentcce76062ef2fc25aa421db4d98892b5ea5b5afae (diff)
downloadtalos-sbe-56e408e085ca612a5bdf708edbc313fae6e6815d.tar.gz
talos-sbe-56e408e085ca612a5bdf708edbc313fae6e6815d.zip
Get a z compile working
Change-Id: I8ca342778fb8fb5e8019f6f50c1b36c2b675d668 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/54062 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-by: Shakeeb A. Pasha B K <shakeebbk@in.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Sachin Gupta <sgupta2m@in.ibm.com>
Diffstat (limited to 'src/build/linkerscripts/z')
-rwxr-xr-xsrc/build/linkerscripts/z/linkloader.cmd95
-rw-r--r--src/build/linkerscripts/z/linkotprom.cmd43
-rw-r--r--src/build/linkerscripts/z/linksbe.cmd104
-rw-r--r--src/build/linkerscripts/z/linkseeprom.cmd203
4 files changed, 445 insertions, 0 deletions
diff --git a/src/build/linkerscripts/z/linkloader.cmd b/src/build/linkerscripts/z/linkloader.cmd
new file mode 100755
index 00000000..61e6eecb
--- /dev/null
+++ b/src/build/linkerscripts/z/linkloader.cmd
@@ -0,0 +1,95 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/build/linkerscripts/z/linkloader.cmd $ */
+/* */
+/* OpenPOWER sbe Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2015,2018 */
+/* */
+/* */
+/* Licensed under the Apache License, Version 2.0 (the "License"); */
+/* you may not use this file except in compliance with the License. */
+/* You may obtain a copy of the License at */
+/* */
+/* http://www.apache.org/licenses/LICENSE-2.0 */
+/* */
+/* Unless required by applicable law or agreed to in writing, software */
+/* distributed under the License is distributed on an "AS IS" BASIS, */
+/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
+/* implied. See the License for the specific language governing */
+/* permissions and limitations under the License. */
+/* */
+/* IBM_PROLOG_END_TAG */
+
+// Need to do this so that elf32-powerpc is not modified!
+#undef powerpc
+
+#ifndef BASE_LOADER_STACK_SIZE
+#define BASE_LOADER_STACK_SIZE 6144
+#endif
+#include "sbe_link.H"
+
+OUTPUT_FORMAT(elf32-powerpc);
+
+MEMORY
+{
+ sram : ORIGIN = SBE_LOADER_BASE_ORIGIN, LENGTH = SBE_LOADER_BASE_LENGTH
+}
+
+SECTIONS
+{
+ . = SBE_LOADER_BASE_ORIGIN;
+
+ ////////////////////////////////
+ // Read-only Data
+ ////////////////////////////////
+
+ . = ALIGN(8);
+ _RODATA_SECTION_BASE = .;
+
+ .text . : { *(.text) } > sram
+ .data . : { *(.data) } > sram
+
+ // SDA2 constant sections .sdata2 and .sbss2 must be adjacent to each
+ // other. Our SDATA sections are small so we'll use strictly positive
+ // offsets.
+
+ _SDA2_BASE_ = .;
+ .sdata2 . : { *(.sdata2) } > sram
+ .sbss2 . : { *(.sbss2) } > sram
+
+ // Other read-only data.
+
+ .rodata . : { *(.rodata*) *(.got2) } > sram
+
+ _RODATA_SECTION_SIZE = . - _RODATA_SECTION_BASE;
+
+ ////////////////////////////////
+ // Read-write Data
+ ////////////////////////////////
+
+ . = ALIGN(8);
+ _DATA_SECTION_BASE = .;
+
+ // SDA sections .sdata and .sbss must be adjacent to each
+ // other. Our SDATA sections are small so we'll use strictly positive
+ // offsets.
+
+ _SDA_BASE_ = .;
+ .sdata . : { *(.sdata) } > sram
+ .sbss . : { *(.sbss) } > sram
+
+ // Other read-write data
+ // It's not clear why boot.S is generating empty .glink,.iplt
+
+ .rela . : { *(.rela*) } > sram
+ .rwdata . : { *(.data) *(.bss) } > sram
+
+ _BASE_LOADER_STACK_LIMIT = .;
+ _BASE_LOADER_STACK_LIMIT = . + BASE_LOADER_STACK_SIZE - 1;
+
+ . = ALIGN(8);
+ _loader_end = . - 0;
+
+}
diff --git a/src/build/linkerscripts/z/linkotprom.cmd b/src/build/linkerscripts/z/linkotprom.cmd
new file mode 100644
index 00000000..f68267be
--- /dev/null
+++ b/src/build/linkerscripts/z/linkotprom.cmd
@@ -0,0 +1,43 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/build/linkerscripts/z/linkotprom.cmd $ */
+/* */
+/* OpenPOWER sbe Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2016,2018 */
+/* */
+/* */
+/* Licensed under the Apache License, Version 2.0 (the "License"); */
+/* you may not use this file except in compliance with the License. */
+/* You may obtain a copy of the License at */
+/* */
+/* http://www.apache.org/licenses/LICENSE-2.0 */
+/* */
+/* Unless required by applicable law or agreed to in writing, software */
+/* distributed under the License is distributed on an "AS IS" BASIS, */
+/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
+/* implied. See the License for the specific language governing */
+/* permissions and limitations under the License. */
+/* */
+/* IBM_PROLOG_END_TAG */
+
+// Need to do this so that elf32-powerpc is not modified!
+#undef powerpc
+
+#include "sbe_link.H"
+
+OUTPUT_FORMAT(elf32-powerpc);
+
+MEMORY
+{
+ sram : ORIGIN = OTPROM_ORIGIN, LENGTH = OTPROM_BLOCK_SIZE
+}
+
+SECTIONS
+{
+ . = OTPROM_ORIGIN;
+ .text . : { *(.text)}
+ . = OTPROM_FIXED_SIZE;
+ .fixed . : { *(.fixed)}
+}
diff --git a/src/build/linkerscripts/z/linksbe.cmd b/src/build/linkerscripts/z/linksbe.cmd
new file mode 100644
index 00000000..e68f4688
--- /dev/null
+++ b/src/build/linkerscripts/z/linksbe.cmd
@@ -0,0 +1,104 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/build/linkerscripts/z/linksbe.cmd $ */
+/* */
+/* OpenPOWER sbe Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2015,2018 */
+/* */
+/* */
+/* Licensed under the Apache License, Version 2.0 (the "License"); */
+/* you may not use this file except in compliance with the License. */
+/* You may obtain a copy of the License at */
+/* */
+/* http://www.apache.org/licenses/LICENSE-2.0 */
+/* */
+/* Unless required by applicable law or agreed to in writing, software */
+/* distributed under the License is distributed on an "AS IS" BASIS, */
+/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
+/* implied. See the License for the specific language governing */
+/* permissions and limitations under the License. */
+/* */
+/* IBM_PROLOG_END_TAG */
+
+// Need to do this so that elf32-powerpc is not modified!
+#undef powerpc
+
+#ifndef INITIAL_STACK_SIZE
+#define INITIAL_STACK_SIZE 256
+#endif
+#include "sbe_link.H"
+
+OUTPUT_FORMAT(elf32-powerpc);
+
+MEMORY
+{
+ pibmem : ORIGIN = SBE_BASE_ORIGIN, LENGTH = SBE_BASE_LENGTH
+}
+
+SECTIONS
+{
+ . = SBE_BASE_ORIGIN;
+
+ .vectors : {. = ALIGN(512); *(.vectors)} > pibmem
+ .fixed . : {. = ALIGN(512); *(.fixed) } > pibmem
+ .text . : {. = ALIGN(512); *(.text)} > pibmem
+
+ ////////////////////////////////
+ // Read-only Data
+ ////////////////////////////////
+
+ . = ALIGN(8);
+ _RODATA_SECTION_BASE = .;
+
+ // SDA2 constant sections .sdata2 and .sbss2 must be adjacent to each
+ // other. Our SDATA sections are small so we'll use strictly positive
+ // offsets.
+
+ _SDA2_BASE_ = .;
+ .sdata2 . : { *(.sdata2*) } > pibmem
+ .sbss2 . : { *(.sbss2*) } > pibmem
+
+ // Other read-only data.
+
+ . = ALIGN(8);
+ .rodata . : { ctor_start_address = .;
+ *(.ctors) *(.ctors.*)
+ ctor_end_address = .;
+ *(rodata*) *(.got2) } > pibmem
+
+ _RODATA_SECTION_SIZE = . - _RODATA_SECTION_BASE;
+
+ ////////////////////////////////
+ // Read-write Data
+ ////////////////////////////////
+
+ . = ALIGN(8);
+ _DATA_SECTION_BASE = .;
+
+ // SDA sections .sdata and .sbss must be adjacent to each
+ // other. Our SDATA sections are small so we'll use strictly positive
+ // offsets.
+
+ _SDA_BASE_ = .;
+ .sdata . : { *(.sdata*) } > pibmem
+ _sbss_start = .;
+ .sbss . : { *(.sbss*) } > pibmem
+ _sbss_end = .;
+
+ // Other read-write data
+ // It's not clear why boot.S is generating empty .glink,.iplt
+
+ .rela . : { *(.rela*) } > pibmem
+ .rwdata . : { *(.data*) *(.bss*) } > pibmem
+
+ . = ALIGN(8);
+ _PK_INITIAL_STACK_LIMIT = .;
+ . = . + INITIAL_STACK_SIZE;
+ _PK_INITIAL_STACK = . - 1;
+
+ . = ALIGN(8);
+ _sbe_end = . - 0;
+
+}
diff --git a/src/build/linkerscripts/z/linkseeprom.cmd b/src/build/linkerscripts/z/linkseeprom.cmd
new file mode 100644
index 00000000..93d0c9e5
--- /dev/null
+++ b/src/build/linkerscripts/z/linkseeprom.cmd
@@ -0,0 +1,203 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/build/linkerscripts/z/linkseeprom.cmd $ */
+/* */
+/* OpenPOWER sbe Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2015,2018 */
+/* */
+/* */
+/* Licensed under the Apache License, Version 2.0 (the "License"); */
+/* you may not use this file except in compliance with the License. */
+/* You may obtain a copy of the License at */
+/* */
+/* http://www.apache.org/licenses/LICENSE-2.0 */
+/* */
+/* Unless required by applicable law or agreed to in writing, software */
+/* distributed under the License is distributed on an "AS IS" BASIS, */
+/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
+/* implied. See the License for the specific language governing */
+/* permissions and limitations under the License. */
+/* */
+/* IBM_PROLOG_END_TAG */
+// Need to do this so that elf32-powerpc is not modified!
+#undef powerpc
+#include "sbe_link.H"
+OUTPUT_FORMAT(elf32-powerpc);
+
+#ifndef INITIAL_STACK_SIZE
+#define INITIAL_STACK_SIZE 256
+#endif
+
+MEMORY
+{
+ pibmem : ORIGIN = SBE_BASE_ORIGIN, LENGTH = SBE_BASE_LENGTH
+ seeprom : ORIGIN = SBE_SEEPROM_BASE_ORIGIN, LENGTH = 0x40000
+}
+
+SECTIONS
+{
+ . = SBE_SEEPROM_BASE_ORIGIN;
+ _sbe_image_start_addr = . + SIZEOF_HEADERS;
+
+ // TODO via RTC 149153
+ // It seems first section in elf image is 8 byte aligned.
+ // We need to verify this assumption.
+
+ // Get 8 byte alligned address
+ _sbe_image_start_addr = ( ( _sbe_image_start_addr % 8) == 0 ) ? _sbe_image_start_addr : ( _sbe_image_start_addr + ( 8 - ( _sbe_image_start_addr % 8)));
+
+ // Get the image offset after elf header
+ _sbe_image_start_offset = _sbe_image_start_addr - .;
+ _seeprom_origin = . - 0;
+ _pibmem_origin = SBE_BASE_ORIGIN;
+
+ ////////////////////////////////
+ // Header
+ ////////////////////////////////
+ .header : {
+ _header_origin = .; _header_offset = . - _seeprom_origin; *(.header);
+ } > seeprom
+ _header_size = . - _header_origin;
+
+ // @TODO via RTC 136215
+ // We have used allignment 0x200 so that it can be found
+ // at fixed location. once otprom loader support is enabled.
+ // alligment will not be required.
+
+ ////////////////////////////////
+ // LOADER_TEXT
+ ////////////////////////////////
+ .loader_text ALIGN(0x200): {
+ _loader_text_origin = .; _loader_text_offset = . - _seeprom_origin;
+ *(.loader_text);
+ } > seeprom
+ _loader_text_size = . - _loader_text_origin;
+
+ // @TODO via RTC 136215
+ // loader_text section should come after fixed and related
+ // sections as we want fixed section at knowon offset. Currently we
+ // have shared SEEPROM start address ( IVPR register value ) with
+ // multiple teams. So keeping loader_text as first section. Once
+ // WE have otprom loader support, we will put loader_text at right
+ // position
+
+ ////////////////////////////////
+ // FIXED
+ ////////////////////////////////
+ .fixed ALIGN(0x200) : {
+ _fixed_origin = .; _fixed_offset = . - _seeprom_origin;
+ *(.fixed)
+ } > seeprom
+ _fixed_size = . - _fixed_origin;
+
+ ////////////////////////////////
+ // text
+ ////////////////////////////////
+ .text ALIGN(8): {
+ _text_origin = .; _text_offset = . - _seeprom_origin;
+ *\libistep2.a:(.text* ) *\libistep3.a:(.text* ) *\libistep4.a:(.text* ) *\libistepmpipl.a:(.text* ) *\libistep5.a:(.text* ) *\libsbecoreseeprom.a:(.text* ) *\libsbeapppowerseeprom.a:(.text* ) *\libsbeappcommonseeprom.a:(.text* ) } > seeprom
+ _text_size = . - _text_origin;
+
+ ////////////////////////////////
+ // FIXED_TOC
+ ////////////////////////////////
+ .fixed_toc ALIGN(8) : {
+ _fixed_toc_origin = .; _fixed_toc_offset = . - _seeprom_origin; *(.fixed_toc);
+ } > seeprom
+ _fixed_toc_size = . - _fixed_toc_origin;
+
+ ////////////////////////////////
+ // TOC
+ ////////////////////////////////
+ .toc ALIGN(4): {
+ _toc_origin = .; _toc_offset = . - _seeprom_origin; *(.toc);
+ } > seeprom
+ _toc_size = . - _toc_origin;
+
+ ////////////////////////////////
+ // STRING
+ ////////////////////////////////
+ .strings : {
+ _strings_origin = .; _strings_offset = . - _seeprom_origin; *(.strings);
+ } > seeprom
+ _strings_size = . - _strings_origin;
+
+ _seeprom_size = . - _seeprom_origin;
+
+ // TODO via RTC 149153
+ // It seems when we jump across memory region, elf creates 32 byte offset.
+ // We need to verify this assumption.
+
+ _seeprom_size_with_elf_hdr = _seeprom_size + _sbe_image_start_offset;
+ _seeprom_size = ( ( _seeprom_size_with_elf_hdr % 32) == 0 ) ? _seeprom_size : ( _seeprom_size + ( 32 - (_seeprom_size_with_elf_hdr % 32)));
+
+
+ . = _pibmem_origin;
+ _base_origin = .;
+ _base_offset = . - _base_origin + _seeprom_size;
+
+ .pkVectors ALIGN(32) : {
+ *(.vectors)
+ } > pibmem
+
+ .base . : {
+ *(.text*) *(.eh_frame) *(.dtors*);
+ } > pibmem
+
+ . = ALIGN(8);
+ _RODATA_SECTION_BASE = .;
+
+ // SDA2 constant sections .sdata2 and .sbss2 must be adjacent to each
+ // other. Our SDATA sections are small so we'll use strictly positive
+ // offsets.
+
+ _SDA2_BASE_ = .;
+ .sdata2 . : { *(.sdata2*) } > pibmem
+ .sbss2 . : { *(.sbss2*) } > pibmem
+
+ . = ALIGN(8);
+ .rodata . : {
+ ctor_start_address = .;
+ *(.ctors) *(.ctors.*)
+ ctor_end_address = .;
+ *(.rodata*) *(.got2);
+ } > pibmem
+ _RODATA_SECTION_SIZE = . - _RODATA_SECTION_BASE;
+
+
+ . = ALIGN(8); _DATA_SECTION_BASE = .;
+ _SDA_BASE_ = .;
+ .data . : {
+ *(.data*) *(.comment)
+ } > pibmem
+ .sdata . : { *(.sdata*) } > pibmem
+ . = ALIGN(8);
+
+ // We do not want to store bss section in sbe image as laoder will take
+ // care of it while loading image on PIBMEM. It will save us space in
+ // SEEPROM. So define XIP image related variables here so that SBE image
+ // finishes here.
+
+ _base_size = . - _base_origin;
+ _pibmem_size = . - _pibmem_origin;
+ _sbe_image_size = _seeprom_size + ( . - _pibmem_origin );
+
+ _sbss_start = .;
+ .sbss . : {
+ *(.bss*) *(.sbss*);
+ . = ALIGN(8);
+ } > pibmem
+ _sbss_end = .;
+
+ . = ALIGN(8);
+ _sbss_size = SIZEOF(.sbss);
+
+ . = ALIGN(8);
+ _PK_INITIAL_STACK_LIMIT = .;
+ . = . + INITIAL_STACK_SIZE;
+ _PK_INITIAL_STACK = . - 1;
+ . = ALIGN(8);
+
+}
OpenPOWER on IntegriCloud