diff options
author | kswaroop <krathmar@in.ibm.com> | 2019-01-31 03:27:56 -0600 |
---|---|---|
committer | RAJA DAS <rajadas2@in.ibm.com> | 2019-02-21 22:39:50 -0600 |
commit | 81c84876585779e9c0d7484cca9e61e5351ed872 (patch) | |
tree | 74a3e07ad7c4aed91a87479b2f30b29b5955dbb3 | |
parent | 4529a95e14de37b40ece0c1c0b3894a5bdbf6f58 (diff) | |
download | talos-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>
-rw-r--r-- | src/boot/Makefile | 4 | ||||
-rw-r--r-- | src/build/Makefile | 108 | ||||
-rw-r--r-- | src/build/img_defs.mk | 4 | ||||
-rw-r--r-- | src/build/linkerscripts/power_axone/linksbe.cmd | 103 | ||||
-rw-r--r-- | src/build/linkerscripts/power_axone/linkseeprom.cmd | 78 | ||||
-rwxr-xr-x | src/build/parsAndCutElf.py | 15 | ||||
-rw-r--r-- | src/build/utils/base_ppe_header.S | 6 |
7 files changed, 133 insertions, 185 deletions
diff --git a/src/boot/Makefile b/src/boot/Makefile index c1d1b808..fde735c3 100644 --- a/src/boot/Makefile +++ b/src/boot/Makefile @@ -5,7 +5,7 @@ # # OpenPOWER sbe Project # -# Contributors Listed Below - COPYRIGHT 2016,2018 +# Contributors Listed Below - COPYRIGHT 2016,2019 # [+] International Business Machines Corp. # # @@ -33,8 +33,10 @@ OBJS := $(addprefix $(OBJDIR)/, $(BOOT_OBJECTS)) LINK_SCRIPT_LOADER = $(addprefix $(OBJDIR)/, linkscriptloader) LINK_SCRIPT_OTPROM = $(addprefix $(OBJDIR)/, linkscriptotprom) +ifneq ($(img), pibmem) all: $(OBJS) \ $(IMG_DIR)/$(IMAGE_LOADER_NAME).bin $(IMG_DIR)/$(IMAGE_OTPROM_NAME).bin +endif $(OBJS) $(OBJS:.o=.d): | $(OBJDIR) 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 |