summaryrefslogtreecommitdiffstats
path: root/src/build
diff options
context:
space:
mode:
authorkswaroop <krathmar@in.ibm.com>2019-01-31 03:27:56 -0600
committerRAJA DAS <rajadas2@in.ibm.com>2019-02-21 22:39:50 -0600
commit81c84876585779e9c0d7484cca9e61e5351ed872 (patch)
tree74a3e07ad7c4aed91a87479b2f30b29b5955dbb3 /src/build
parent4529a95e14de37b40ece0c1c0b3894a5bdbf6f58 (diff)
downloadtalos-sbe-81c84876585779e9c0d7484cca9e61e5351ed872.tar.gz
talos-sbe-81c84876585779e9c0d7484cca9e61e5351ed872.zip
PIBMEM only image
pibmem only image can be built for axone with the following command. 'make axone img=pibmem' Change-Id: I2daa352c54aa7ca5483f0c9f43b5a5de2d2bb115 Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/71130 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: RAJA DAS <rajadas2@in.ibm.com>
Diffstat (limited to 'src/build')
-rw-r--r--src/build/Makefile108
-rw-r--r--src/build/img_defs.mk4
-rw-r--r--src/build/linkerscripts/power_axone/linksbe.cmd103
-rw-r--r--src/build/linkerscripts/power_axone/linkseeprom.cmd78
-rwxr-xr-xsrc/build/parsAndCutElf.py15
-rw-r--r--src/build/utils/base_ppe_header.S6
6 files changed, 130 insertions, 184 deletions
diff --git a/src/build/Makefile b/src/build/Makefile
index 48a3235c..eec4cef1 100644
--- a/src/build/Makefile
+++ b/src/build/Makefile
@@ -43,6 +43,14 @@ include img_defs.mk
include $(BOOT_SRCDIR)/bootfiles.mk
include $(BUILDDATA_SRCDIR)/utils.mk
+ifeq ($(img), pibmem)
+IMAGE_NAME = $(IMAGE_SBE_NAME)
+endif
+
+ifeq ($(img), seeprom)
+IMAGE_NAME = $(IMAGE_SEEPROM_NAME)
+endif
+
SUBDIRS := $(PK_SRCDIR)/$(PPE_TYPE)
LIB_DIRS += -L$(OBJDIR)/pk
PKLIB := $(OBJDIR)/pk/libpk.a
@@ -138,51 +146,33 @@ LINK_OBJS = $(OBJS)
OBJS := $(addprefix $(OBJDIR)/, $(TOP_OBJECTS))
LINK_OBJS += $(OBJS) $(GCCLIBS)
-LINK_SCRIPT_SEEPROM = $(addprefix $(OBJDIR)/build/linkerscripts, linkscriptseeprom_$(IMAGE_SUFFIX))
-LINK_SCRIPT_SBE = $(addprefix $(OBJDIR)/build/linkerscripts, linkscriptsbe)
+ifeq ($(img),seeprom)
+IN_LINK_SCRIPT = linkseeprom.cmd
+OUT_LINK_SCRIPT = $(addprefix $(OBJDIR)/build/linkerscripts, linkscriptseeprom_$(IMAGE_SUFFIX))
+endif
+
+ifeq ($(img),pibmem)
+IN_LINK_SCRIPT = linkseeprom.cmd
+OUT_LINK_SCRIPT = $(addprefix $(OBJDIR)/build/linkerscripts, linkscriptsbe)
+endif
-# ---- SEEPROM Image ------
pre_sbe_image: xml ppe_trace_bin buildInfo linker_seeprom $(SBE_TOOLS) $(SBE_IPL_TOOLS) $(P9_XIP_TOOL) security
build_sbe_image: $(SUBDIRS) $(SEEPROM_SUBDIRS)
output_sbe_image:
- $(C2) "Generating $(IMG_DIR)/$(IMAGE_SEEPROM_NAME).out"
- $(C1)$(LD) -e __system_reset -n -T$(LINK_SCRIPT_SEEPROM) -Map $(IMG_DIR)/$(IMAGE_SEEPROM_NAME).map \
- -Bstatic -o $(IMG_DIR)/$(IMAGE_SEEPROM_NAME).out $(addprefix $(BOOT_OBJDIR)/, $(BOOT_OBJECTS)) $(BUILDDATA_OBJDIR)/$(IMAGE_BASE_PPE_HEADER).o $(OBJS) $(LIB_DIRS) \
+ $(C2) "Generating $(IMG_DIR)/$(IMAGE_NAME).out"
+ $(C1)$(LD) -e __system_reset -n -T$(OUT_LINK_SCRIPT) -Map $(IMG_DIR)/$(IMAGE_NAME).map \
+ -Bstatic -o $(IMG_DIR)/$(IMAGE_NAME).out $(addprefix $(BOOT_OBJDIR)/, $(BOOT_OBJECTS)) $(BUILDDATA_OBJDIR)/$(IMAGE_BASE_PPE_HEADER).o $(OBJS) $(LIB_DIRS) \
--start-group $(LLIBS) --end-group --gc-sections
- $(C1)./parsAndCutElf.py $(IMAGE_SUFFIX) $(IMG_DIR)
- $(C1)$(OBJDUMP) -S $(IMG_DIR)/$(IMAGE_SEEPROM_NAME).out > $(IMG_DIR)/$(IMAGE_SEEPROM_NAME).dis
+ $(C1)./parsAndCutElf.py $(IMAGE_SUFFIX) $(IMG_DIR) $(img)
+ $(C1)$(OBJDUMP) -S $(IMG_DIR)/$(IMAGE_NAME).out > $(IMG_DIR)/$(IMAGE_NAME).dis
# pass the link command file through the C preprocessor to evaluate macros
# and remove comments
linker_seeprom:
@mkdir -p $(OBJDIR)/build
- $(C1)$(CPP) -I $(INCLUDES) -E -x c++ -P $(DEFS) $(LINKER_DIR)/linkseeprom.cmd -o $(LINK_SCRIPT_SEEPROM)
+ $(C1)$(CPP) -I $(INCLUDES) -E -x c++ -P $(DEFS) $(LINKER_DIR)/$(IN_LINK_SCRIPT) -o $(OUT_LINK_SCRIPT)
-ifeq ($(img), pibmem)
-# ---- PIBMEM Image ------
-#This removes all unecessary headers from the ELF executable
-$(IMG_DIR)/$(IMAGE_SBE_NAME).bin $(IMG_DIR)/$(IMAGE_SBE_NAME).dis: $(IMG_DIR)/$(IMAGE_SBE_NAME).out
- $(OBJCOPY) -O binary $< $(IMG_DIR)/$(IMAGE_SBE_NAME).bin --pad-to \
- 0x`/usr/bin/nm $(IMG_DIR)/$(IMAGE_SBE_NAME).out | grep "A _sbe_end" \
- | cut -d " " -f 1`
- $(OBJDUMP) -S $< > $(IMG_DIR)/$(IMAGE_SBE_NAME).dis
-
-# create a linked ELF executable
-$(IMG_DIR)/$(IMAGE_SBE_NAME).out: ppe_trace_bin buildInfo $(SUBDIRS) $(SEEPROM_SUBDIRS) $(LINK_OBJS) $(LINK_SCRIPT_SBE)
- $(LD) -e __system_reset -T$(LINK_SCRIPT_SBE) -Map $(IMG_DIR)/$(IMAGE_SBE_NAME).map -Bstatic -o $(IMG_DIR)/$(IMAGE_SBE_NAME).out $(LIB_DIRS) $(BUILDDATA_OBJDIR)/base_sbe_fixed.o --start-group $(LLIBS) --end-group
-
-# pass the link command file through the C preprocessor to evaluate macros and remove comments
-$(LINK_SCRIPT_SBE): $(LINKER_DIR)/linksbe.cmd
- $(C2) " CMD $(notdir $<)"
- $(C1)$(CPP) -E -x c++ -I $(INCLUDES) -P $(DEFS) $(LINKER_DIR)/linksbe.cmd -o $(LINK_SCRIPT_SBE)
-endif
-
-ifeq ($(img), pibmem)
-all: $(OBJDIR) xml security\
- $(IMG_DIR)/$(IMAGE_SBE_NAME).bin \
- symbols tracehash
-endif
ifeq ($(img), seeprom)
all:
$(MAKE) $(OBJDIR)
@@ -196,6 +186,27 @@ all:
$(MAKE) add_LoaderAddr
$(MAKE) symbols tracehash buildtag
$(MAKE) report
+
+add_LoaderAddr:
+ $(P9_XIP_TOOL) $(IMG_DIR)/$(IMAGE_NAME).bin set L1_LoaderAddr 0x`nm $(IMG_DIR)/$(IMAGE_NAME).out | grep __l1Loader | cut -f 1 -d " "`
+ $(P9_XIP_TOOL) $(IMG_DIR)/$(IMAGE_NAME).bin set L2_LoaderAddr 0x`nm $(IMG_DIR)/$(IMAGE_LOADER_NAME).out | grep __l2_loader_setup | cut -f 1 -d " "`
+ $(P9_XIP_TOOL) $(IMG_DIR)/$(IMAGE_NAME).bin set kernelAddr 0x`nm $(IMG_DIR)/$(IMAGE_NAME).out | grep __pk_boot | cut -f 1 -d " "`
+endif
+
+ifeq ($(img), pibmem)
+all:
+ $(MAKE) $(OBJDIR)
+ $(MAKE) pre_sbe_image
+ $(MAKE) build_sbe_image
+ $(MAKE) output_sbe_image
+ $(MAKE) normalize
+ $(MAKE) defaultset
+ $(MAKE) add_LoaderAddr
+ $(MAKE) symbols tracehash buildtag
+ $(MAKE) report
+
+add_LoaderAddr:
+ $(P9_XIP_TOOL) $(IMG_DIR)/$(IMAGE_NAME).bin set L1_LoaderAddr 0x`nm $(IMG_DIR)/$(IMAGE_NAME).out | grep __vectors | cut -f 1 -d " "`
endif
tar:
@@ -217,30 +228,25 @@ tar:
appendoverrides xml security tracehash topfixedheaders \
tar install
-add_LoaderAddr:
- $(P9_XIP_TOOL) $(IMG_DIR)/$(IMAGE_SEEPROM_NAME).bin set L1_LoaderAddr 0x`nm $(IMG_DIR)/$(IMAGE_SEEPROM_NAME).out | grep __l1Loader | cut -f 1 -d " "`
- $(P9_XIP_TOOL) $(IMG_DIR)/$(IMAGE_SEEPROM_NAME).bin set L2_LoaderAddr 0x`nm $(IMG_DIR)/$(IMAGE_LOADER_NAME).out | grep __l2_loader_setup | cut -f 1 -d " "`
- $(P9_XIP_TOOL) $(IMG_DIR)/$(IMAGE_SEEPROM_NAME).bin set kernelAddr 0x`nm $(IMG_DIR)/$(IMAGE_SEEPROM_NAME).out | grep __pk_boot | cut -f 1 -d " "`
-
ifeq ($(img), seeprom)
symbols:
- $(C1)$(NM) $(IMG_DIR)/$(IMAGE_SEEPROM_NAME).out > $(IMG_DIR)/$(SBE_SYMBOLS_NAME)
+ $(C1)$(NM) $(IMG_DIR)/$(IMAGE_NAME).out > $(IMG_DIR)/$(SBE_SYMBOLS_NAME)
$(C1)$(NM) $(IMG_DIR)/$(IMAGE_LOADER_NAME).out >> $(IMG_DIR)/$(SBE_SYMBOLS_NAME)
endif
ifeq ($(img), pibmem)
-symbols: $(IMG_DIR)/$(IMAGE_SBE_NAME).out
- $(NM) $(IMG_DIR)/$(IMAGE_SBE_NAME).out > $(IMG_DIR)/$(SBE_SYMBOLS_NAME)
+symbols:
+ $(C1)$(NM) $(IMG_DIR)/$(IMAGE_NAME).out > $(IMG_DIR)/$(SBE_SYMBOLS_NAME)
endif
-report: $(P9_XIP_TOOL) $(IMG_DIR)/$(IMAGE_SEEPROM_NAME).bin
- $(P9_XIP_TOOL) $(IMG_DIR)/$(IMAGE_SEEPROM_NAME).bin report > $(IMG_DIR)/$(IMAGE_SEEPROM_NAME).rpt
+report: $(P9_XIP_TOOL) $(IMG_DIR)/$(IMAGE_NAME).bin
+ $(P9_XIP_TOOL) $(IMG_DIR)/$(IMAGE_NAME).bin report > $(IMG_DIR)/$(IMAGE_NAME).rpt
# Create build Info file
buildInfo:
python buildInfo.py $(GENFILES_DIR)
buildtag:
- ./updateBuildTag.py $(P9_XIP_TOOL) $(IMG_DIR) $(IMAGE_SEEPROM_NAME)
+ ./updateBuildTag.py $(P9_XIP_TOOL) $(IMG_DIR) $(IMAGE_NAME)
#Create an obj directory if needed
@@ -298,13 +304,13 @@ $(P9_XIP_TOOL):
cp -f $(P9_XIP_TOOL) $(IMG_DIR)/
normalize:
- $(P9_XIP_TOOL) $(IMG_DIR)/$(IMAGE_SEEPROM_NAME).bin normalize
+ $(P9_XIP_TOOL) $(IMG_DIR)/$(IMAGE_NAME).bin normalize
-compress: $(IMG_DIR)/$(IMAGE_SEEPROM_NAME).bin
- $(BOOT_SRCDIR)/sbeCompression.py -l $(IMG_DIR) -i $(IMAGE_SEEPROM_NAME).bin
+compress: $(IMG_DIR)/$(IMAGE_NAME).bin
+ $(BOOT_SRCDIR)/sbeCompression.py -l $(IMG_DIR) -i $(IMAGE_NAME).bin
defaultset:
- $(TOOLS_ATTR_DIR)/ppeSetFixed.pl $(IMG_DIR) $(IMG_DIR)/$(IMAGE_SEEPROM_NAME).bin $(IMPORT_XML_DIR)/attribute_info/p9_sbe_attributes.xml $(ATTRFILES)
+ $(TOOLS_ATTR_DIR)/ppeSetFixed.pl $(IMG_DIR) $(IMG_DIR)/$(IMAGE_NAME).bin $(IMPORT_XML_DIR)/attribute_info/p9_sbe_attributes.xml $(ATTRFILES)
# Build the trace utilities
ppe_trace_bin:
@@ -324,11 +330,11 @@ xml: $(FAPI_RC)
$(FAPI_RC): $(IMPORT_TOOLS_DIR)/parseErrorInfo.pl $(ERROR_XML_FILES)
$(IMPORT_TOOLS_DIR)/parseErrorInfo.pl --local-ffdc --output-dir=$(GENFILES_DIR) $(ERROR_XML_FILES)
-$(IMG_DIR)/fixed.bin: $(P9_XIP_TOOL) $(IMG_DIR)/$(IMAGE_SEEPROM_NAME).bin
- $(P9_XIP_TOOL) $(IMG_DIR)/$(IMAGE_SEEPROM_NAME).bin extract .fixed $(IMG_DIR)/fixed.bin
+$(IMG_DIR)/fixed.bin: $(P9_XIP_TOOL) $(IMG_DIR)/$(IMAGE_NAME).bin
+ $(P9_XIP_TOOL) $(IMG_DIR)/$(IMAGE_NAME).bin extract .fixed $(IMG_DIR)/fixed.bin
appendloader:
- $(P9_XIP_TOOL) $(IMG_DIR)/$(IMAGE_SEEPROM_NAME).bin append .baseloader $(IMG_DIR)/$(IMAGE_LOADER_NAME).bin
+ $(P9_XIP_TOOL) $(IMG_DIR)/$(IMAGE_NAME).bin append .baseloader $(IMG_DIR)/$(IMAGE_LOADER_NAME).bin
# collect all of the trace hash files for this image into a single sbeStringFile
tracehash:
diff --git a/src/build/img_defs.mk b/src/build/img_defs.mk
index 5ddad6ae..4bd4113b 100644
--- a/src/build/img_defs.mk
+++ b/src/build/img_defs.mk
@@ -470,9 +470,9 @@ GCC-CFLAGS += -fdata-sections
GCC-CFLAGS += -fstack-usage
endif
-ifeq ($(img), seeprom)
+# Since pibmem is bigger in axone, we will build everything for pibmem image.
GCC-DEFS += -DSEEPROM_IMAGE
-endif
+
ifeq ($(img), pibmem)
GCC-DEFS += -DPIBMEM_ONLY_IMAGE
endif
diff --git a/src/build/linkerscripts/power_axone/linksbe.cmd b/src/build/linkerscripts/power_axone/linksbe.cmd
deleted file mode 100644
index 8efb0fee..00000000
--- a/src/build/linkerscripts/power_axone/linksbe.cmd
+++ /dev/null
@@ -1,103 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG */
-/* This is an automatically generated prolog. */
-/* */
-/* $Source: src/build/linkerscripts/power_axone/linksbe.cmd $ */
-/* */
-/* OpenPOWER sbe Project */
-/* */
-/* Contributors Listed Below - COPYRIGHT 2019 */
-/* */
-/* */
-/* 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/power_axone/linkseeprom.cmd b/src/build/linkerscripts/power_axone/linkseeprom.cmd
index 73fe74ab..3edc47e1 100644
--- a/src/build/linkerscripts/power_axone/linkseeprom.cmd
+++ b/src/build/linkerscripts/power_axone/linkseeprom.cmd
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER sbe Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2015,2018 */
+/* Contributors Listed Below - COPYRIGHT 2015,2019 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -34,12 +34,27 @@ OUTPUT_FORMAT(elf32-powerpc);
MEMORY
{
pibmem : ORIGIN = SBE_BASE_ORIGIN, LENGTH = SBE_BASE_LENGTH
+ #ifndef PIBMEM_ONLY_IMAGE
seeprom : ORIGIN = SBE_SEEPROM_BASE_ORIGIN, LENGTH = 0x40000
+ #endif
}
+//MEMORY_REGION is a substitute constant used for pibmem or seeprom. Its value
+//would be pibmem for pibmem_only image. Else it would be seeprom.
+
+#ifdef PIBMEM_ONLY_IMAGE
+//Everything should get in to pibmem
+#define MEMORY_REGION pibmem
+BASE_ORIGIN = SBE_BASE_ORIGIN;
+
+#else
+#define MEMORY_REGION seeprom
+BASE_ORIGIN = SBE_SEEPROM_BASE_ORIGIN;
+#endif
+
SECTIONS
{
- . = SBE_SEEPROM_BASE_ORIGIN;
+ . = BASE_ORIGIN;
_sbe_image_start_addr = . + SIZEOF_HEADERS;
// TODO via RTC 149153
@@ -51,16 +66,23 @@ SECTIONS
// Get the image offset after elf header
_sbe_image_start_offset = _sbe_image_start_addr - .;
- _seeprom_origin = . - 0;
+ _origin = . - 0;
_pibmem_origin = SBE_BASE_ORIGIN;
////////////////////////////////
// Header
////////////////////////////////
.header : {
- _header_origin = .; _header_offset = . - _seeprom_origin; KEEP(*(.header));
- } > seeprom
+ _header_origin = .; _header_offset = . - _origin; KEEP(*(.header));
+ } > MEMORY_REGION
_header_size = . - _header_origin;
+
+ #ifdef PIBMEM_ONLY_IMAGE
+ //pkVector should be at top of pibmem memory after XIP header.
+ .pkVectors ALIGN(0x200) : {
+ *(.vectors)
+ } > pibmem
+ #endif
// @TODO via RTC 136215
// We have used allignment 0x200 so that it can be found
@@ -71,15 +93,18 @@ SECTIONS
// LOADER_TEXT
////////////////////////////////
.loader_text ALIGN(0x200): {
- _loader_text_origin = .; _loader_text_offset = . - _seeprom_origin;
+ _loader_text_origin = .; _loader_text_offset = . - _origin;
+ //Loader text should not be loaded for pibmem only image
+ #ifndef PIBMEM_ONLY_IMAGE
KEEP(*(.loader_text));
- } > seeprom
+ #endif
+ } > MEMORY_REGION
_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
+ // have shared MEMORY_REGION 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
@@ -88,44 +113,47 @@ SECTIONS
// FIXED
////////////////////////////////
.fixed ALIGN(0x200) : {
- _fixed_origin = .; _fixed_offset = . - _seeprom_origin;
+ _fixed_origin = .; _fixed_offset = . - _origin;
KEEP(*(.fixed))
- } > seeprom
+ } > MEMORY_REGION
_fixed_size = . - _fixed_origin;
////////////////////////////////
// text
////////////////////////////////
.text ALIGN(8): {
- _text_origin = .; _text_offset = . - _seeprom_origin;
- } > seeprom
+ _text_origin = .; _text_offset = . - _origin;
+ } > MEMORY_REGION
_text_size = . - _text_origin;
////////////////////////////////
// FIXED_TOC
////////////////////////////////
.fixed_toc ALIGN(8) : {
- _fixed_toc_origin = .; _fixed_toc_offset = . - _seeprom_origin; KEEP(*(.fixed_toc));
- } > seeprom
+ _fixed_toc_origin = .; _fixed_toc_offset = . - _origin; KEEP(*(.fixed_toc));
+ } > MEMORY_REGION
_fixed_toc_size = . - _fixed_toc_origin;
////////////////////////////////
// TOC
////////////////////////////////
.toc ALIGN(4): {
- _toc_origin = .; _toc_offset = . - _seeprom_origin; KEEP(*(.toc));
- } > seeprom
+ _toc_origin = .; _toc_offset = . - _origin; KEEP(*(.toc));
+ } > MEMORY_REGION
_toc_size = . - _toc_origin;
////////////////////////////////
// STRING
////////////////////////////////
.strings : {
- _strings_origin = .; _strings_offset = . - _seeprom_origin; KEEP(*(.strings));
- } > seeprom
+ _strings_origin = .; _strings_offset = . - _origin; KEEP(*(.strings));
+ } > MEMORY_REGION
_strings_size = . - _strings_origin;
- _seeprom_size = . - _seeprom_origin;
+ //No need to calculate seeprom size, if pibmem only image is being built
+ #ifndef PIBMEM_ONLY_IMAGE
+ _seeprom_origin = _origin;
+ _seeprom_size = . - _origin;
// TODO via RTC 149153
// It seems when we jump across memory region, elf creates 32 byte offset.
@@ -136,12 +164,22 @@ SECTIONS
. = _pibmem_origin;
+
+ #else
+ _seeprom_size = 0;
+ . = ALIGN(4);
+ #endif
+
_base_origin = .;
_base_offset = . - _base_origin + _seeprom_size;
+ //We are at the beginning of the pibmem memory if seeprom image is being
+ //built. So add .pkVector section here.
+ #ifndef PIBMEM_ONLY_IMAGE
.pkVectors ALIGN(32) : {
*(.vectors)
} > pibmem
+ #endif
.base . : {
*(.text*) *(.eh_frame) *(.dtors*);
@@ -176,7 +214,7 @@ SECTIONS
.sdata . : { *(.sdata*) } > pibmem
. = ALIGN(8);
- // We do not want to store bss section in sbe image as laoder will take
+ // We do not want to store bss section in sbe image as loader 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.
diff --git a/src/build/parsAndCutElf.py b/src/build/parsAndCutElf.py
index 49192014..2413f4c5 100755
--- a/src/build/parsAndCutElf.py
+++ b/src/build/parsAndCutElf.py
@@ -6,7 +6,7 @@
#
# OpenPOWER sbe Project
#
-# Contributors Listed Below - COPYRIGHT 2016,2018
+# Contributors Listed Below - COPYRIGHT 2016,2019
# [+] International Business Machines Corp.
#
#
@@ -34,14 +34,15 @@ def parserElf(argv):
try:
ddlevel = argv[1]
outdir = argv[2]
+ img = argv[3]
except:
- print "Missing argument : arg[0] ddlevel; arg[1] output directory"
+ print "Missing argument : arg[0] ddlevel; arg[1] output directory; arg[2] img (seeprom/pibmem)"
exit(-1)
- SBE_SEEPROM_OUT = outdir+"/sbe_seeprom_"+ddlevel+".out"
- SBE_SEEPROM_BIN = outdir+"/sbe_seeprom_"+ddlevel+".bin"
- cmd = "readelf -S "+SBE_SEEPROM_OUT
+ SBE_OUT = outdir+"/sbe_"+img+"_"+ddlevel+".out"
+ SBE_BIN = outdir+"/sbe_"+img+"_"+ddlevel+".bin"
+ cmd = "readelf -S "+SBE_OUT
firstSection = ".header"
- cmd1 = "nm "+SBE_SEEPROM_OUT+" | grep _sbe_image_size"
+ cmd1 = "nm "+SBE_OUT+" | grep _sbe_image_size"
output = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
i = 0;
for line in output.stdout:
@@ -68,7 +69,7 @@ def parserElf(argv):
exit(-1)
# cut the image
- cmd1 = "dd skip=" + str(startSize) + " count=" + str(endSize) + " if="+SBE_SEEPROM_OUT+" of="+SBE_SEEPROM_BIN+" bs=1"
+ cmd1 = "dd skip=" + str(startSize) + " count=" + str(endSize) + " if="+SBE_OUT+" of="+SBE_BIN+" bs=1"
rc = os.system(cmd1)
if ( rc ):
print "ERROR running %s: %d "%( cmd1, rc )
diff --git a/src/build/utils/base_ppe_header.S b/src/build/utils/base_ppe_header.S
index 2064a2da..7e9411f2 100644
--- a/src/build/utils/base_ppe_header.S
+++ b/src/build/utils/base_ppe_header.S
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER sbe Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2016,2018 */
+/* Contributors Listed Below - COPYRIGHT 2016,2019 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -137,7 +137,11 @@ __header_string_reserved:
.section .strings, "aS", @progbits
.section .base, "a", @progbits
+ #ifdef PIBMEM_ONLY_IMAGE
+ P9XipHeader P9_XIP_MAGIC_SEEPROM, SBE_BASE_ORIGIN, _sbe_image_size
+ #else
P9XipHeader P9_XIP_MAGIC_SEEPROM, SBE_SEEPROM_BASE_ORIGIN, _sbe_image_size
+ #endif
// Create the .fixed section
.proc_sbe_fixed_system
OpenPOWER on IntegriCloud