summaryrefslogtreecommitdiffstats
path: root/src/build/utils
diff options
context:
space:
mode:
Diffstat (limited to 'src/build/utils')
-rw-r--r--src/build/utils/Makefile43
-rw-r--r--src/build/utils/base_ppe_header.S209
-rw-r--r--src/build/utils/base_sbe_fixed.S67
-rw-r--r--src/build/utils/p9_sbe.H52
-rw-r--r--src/build/utils/proc_sbe_fixed.H211
-rw-r--r--src/build/utils/sbe_common.H600
-rw-r--r--src/build/utils/sbe_link.H102
-rw-r--r--src/build/utils/utils.mk27
8 files changed, 1311 insertions, 0 deletions
diff --git a/src/build/utils/Makefile b/src/build/utils/Makefile
new file mode 100644
index 00000000..163984cf
--- /dev/null
+++ b/src/build/utils/Makefile
@@ -0,0 +1,43 @@
+# IBM_PROLOG_BEGIN_TAG
+# This is an automatically generated prolog.
+#
+# $Source: src/build/utils/Makefile $
+#
+# OpenPOWER sbe Project
+#
+# Contributors Listed Below - COPYRIGHT 2016
+# [+] International Business Machines Corp.
+#
+#
+# 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
+export SUB_OBJDIR = /build/utils
+
+include img_defs.mk
+include utils.mk
+
+OBJS := $(addprefix $(OBJDIR)/, $(BUILDDATA_OBJECTS))
+BUILDDATA_OBJECTS := $(OBJS)
+
+.PHONY: clean all
+
+all:$(OBJS)
+
+$(OBJS) $(OBJS:.o=.d): | $(OBJDIR)
+
+$(OBJDIR):
+ mkdir -p $(OBJDIR)
+
+clean:
+ rm -rf $(OBJDIR)
diff --git a/src/build/utils/base_ppe_header.S b/src/build/utils/base_ppe_header.S
new file mode 100644
index 00000000..c99cc08f
--- /dev/null
+++ b/src/build/utils/base_ppe_header.S
@@ -0,0 +1,209 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/build/utils/base_ppe_header.S $ */
+/* */
+/* OpenPOWER sbe Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2016 */
+/* */
+/* */
+/* 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 */
+//-----------------------------------------------------------------------------
+// *! (C) Copyright International Business Machines Corp. 2014
+// *! All Rights Reserved -- Property of IBM
+// *! *** IBM Confidential ***
+//-----------------------------------------------------------------------------
+
+/// \file base_ppe_header.S
+/// \brief code to create header, toc, strings, fixed and fixed_toc sections
+///
+/// function P9XipHeader creates header section, function .proc_sbe_fixed
+/// creates fixed, fixed_toc sections
+#include "p9_xip_image.h"
+#include "proc_sbe_fixed.H"
+
+
+#define IMAGE_SPACE_UNDEFINED 0xffff
+#define IMAGE_SPACE_OCI 0x8000
+#define IMAGE_SPACE_PNOR 0x800b
+#define IMAGE_SPACE_OTPROM 0x0001
+#define IMAGE_SPACE_SEEPROM 0x800c
+#define IMAGE_SPACE_BASE 0x0008
+
+
+
+ .macro ..checku, x:req, bits:req, err="Unsigned value too large"
+
+ .if (((\bits) <= 0) || ((\bits) > 63))
+ .error "The number of bits must be in the range 0 < bits < 64"
+ .endif
+
+ .iflt (\x)
+ .error "An unsigned value is required here"
+ .endif
+
+ .ifgt ((\x) - (0xffffffffffffffff >> (64 - (\bits))))
+ .error "\err"
+ .endif
+
+ .endm
+
+ .macro ..check_u16, u16
+ ..checku (\u16), 16, "Unsigned immediate is larger than 16 bits"
+ .endm
+
+
+ .macro ..set_default_space, s
+ ..check_u16 (\s)
+ .set _PGAS_DEFAULT_SPACE, (\s)
+ .endm
+
+ .macro ..check_default_space
+ .if (_PGAS_DEFAULT_SPACE == IMAGE_SPACE_UNDEFINED)
+ .error "The PGAS default address space has not been defined"
+ .endif
+ .endm
+
+
+ .macro .quada, offset:req
+ ..check_default_space
+ .long _PGAS_DEFAULT_SPACE
+ .long (\offset)
+ .endm
+
+
+ .macro P9XipHeader, magic, link_address, entry_point, image_size
+
+ .section .header, "a", @progbits
+
+
+ //////////////////////////////////////////////////////////////////////
+ // Identification - 8-byte aligned; 8 Entries; TOC-Indexed
+ //////////////////////////////////////////////////////////////////////
+
+__magic:
+ .quad (\magic)
+__L1_LoaderAddr:
+ .quad 0
+__L2_LoaderAddr:
+ .quad 0
+__kernelAddr:
+ .quad 0
+__link_address:
+ .quada (\link_address)
+__header_64_reserved:
+ .quad 0, 0, 0
+
+ .xip_toc magic, P9_XIP_UINT64, __magic
+ .xip_toc L1_LoaderAddr, P9_XIP_UINT64, __L1_LoaderAddr
+ .xip_toc L2_LoaderAddr, P9_XIP_UINT64, __L2_LoaderAddr
+ .xip_toc kernelAddr, P9_XIP_UINT64, __kernelAddr
+ .xip_toc link_address, P9_XIP_UINT64, __link_address
+
+ //////////////////////////////////////////////////////////////////////
+ // Section Table - Not TOC-Indexed
+ //////////////////////////////////////////////////////////////////////
+
+ .xip_section header
+ .xip_section fixed, 8
+ .xip_section fixed_toc, 8
+ .xip_section toc, 4
+ .xip_section strings
+ .xip_section loader_text, 4
+ .xip_section loader_data, 8, empty=1
+ .xip_section text, 4
+ .xip_section data, 8, empty=1
+ .xip_section base, 4
+ .xip_section baseloader, 8, empty=1
+ .xip_section overrides, 8, empty=1
+ .xip_section rings, 8, empty=1
+ .xip_section overlay, 8, empty=1
+ .xip_section hbbl, 8, empty=1
+
+
+ //////////////////////////////////////////////////////////////////////
+ // Other Information - 4-byte aligned; 8 entries; TOC-Indexed
+ //////////////////////////////////////////////////////////////////////
+
+__image_size:
+ .long (\image_size)
+__build_date:
+ .long 0
+__build_time:
+ .long 0
+__header_32_reserved:
+ .long 0, 0, 0, 0, 0
+
+ .xip_toc image_size, P9_XIP_UINT32, __image_size
+ .xip_toc build_date, P9_XIP_UINT32, __build_date
+ .xip_toc build_time, P9_XIP_UINT32, __build_time
+
+
+ //////////////////////////////////////////////////////////////////////
+ // Other Information - 1-byte aligned; 8 entries; TOC-Indexed
+ //////////////////////////////////////////////////////////////////////
+
+__header_version:
+ .byte P9_XIP_HEADER_VERSION
+__toc_normalized:
+ .byte 0
+__toc_sorted:
+ .byte 0
+__header_8_reserved:
+ .byte 0, 0, 0, 0, 0
+
+ .xip_toc header_version, P9_XIP_UINT8, __header_version
+ .xip_toc toc_normalized, P9_XIP_UINT8, __toc_normalized
+ .xip_toc toc_sorted, P9_XIP_UINT8, __toc_sorted
+
+
+ //////////////////////////////////////////////////////////////////////
+ // Strings; 64 characters allocated; TOC-Indexed
+ //////////////////////////////////////////////////////////////////////
+
+__build_user:
+ .asciz "unknown " # 16 Characters allocated
+__build_host:
+ .asciz "unknown " # 24 characters allocated
+__header_string_reserved:
+ .space 24, 0
+
+ .xip_toc build_user, P9_XIP_STRING, __build_user
+ .xip_toc build_host, P9_XIP_STRING, __build_host
+
+
+ .endm
+
+
+ .section .fixed, "a", @progbits
+ .section .fixed_toc, "a", @progbits
+ .section .loader_data, "a", @progbits
+ .section .loader_text, "a", @progbits
+
+ .section .toc, "a", @progbits
+ .section .strings, "aS", @progbits
+ .section .base, "a", @progbits
+
+ ..set_default_space IMAGE_SPACE_SEEPROM
+ P9XipHeader P9_XIP_MAGIC_SEEPROM, 0x80000000, 0x00000000, _sbe_image_size
+
+ // Create the .fixed section
+ .proc_sbe_fixed_system
+ .proc_sbe_fixed_proc_chip
+ .proc_sbe_fixed_perv
+ .proc_sbe_fixed_core
+ .proc_sbe_fixed_ex
+ .proc_sbe_fixed_eq
diff --git a/src/build/utils/base_sbe_fixed.S b/src/build/utils/base_sbe_fixed.S
new file mode 100644
index 00000000..7474a38b
--- /dev/null
+++ b/src/build/utils/base_sbe_fixed.S
@@ -0,0 +1,67 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/build/utils/base_sbe_fixed.S $ */
+/* */
+/* OpenPOWER sbe Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2016 */
+/* */
+/* */
+/* 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 */
+/// \file sbefixed.S
+/// \brief code to generated fixed section in pibmem image
+///
+#include "p9_xip_image.h"
+#include "proc_sbe_fixed.H"
+
+
+ .macro ..checku, x:req, bits:req, err="Unsigned value too large"
+
+ .if (((\bits) <= 0) || ((\bits) > 63))
+ .error "The number of bits must be in the range 0 < bits < 64"
+ .endif
+
+ .iflt (\x)
+ .error "An unsigned value is required here"
+ .endif
+
+ .ifgt ((\x) - (0xffffffffffffffff >> (64 - (\bits))))
+ .error "\err"
+ .endif
+
+ .endm
+
+
+ .macro ..check_u16, u16
+ ..checku (\u16), 16, "Unsigned immediate is larger than 16 bits"
+ .endm
+
+
+ .macro ..set_default_space, s
+ ..check_u16 (\s)
+ .set _PGAS_DEFAULT_SPACE, (\s)
+ .endm
+
+ .section .fixed, "a", @progbits
+
+
+ // Create the .fixed section
+ .proc_sbe_fixed_system
+ .proc_sbe_fixed_proc_chip
+ .proc_sbe_fixed_perv
+ .proc_sbe_fixed_core
+ .proc_sbe_fixed_ex
+ .proc_sbe_fixed_eq
diff --git a/src/build/utils/p9_sbe.H b/src/build/utils/p9_sbe.H
new file mode 100644
index 00000000..36c281eb
--- /dev/null
+++ b/src/build/utils/p9_sbe.H
@@ -0,0 +1,52 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/build/utils/p9_sbe.H $ */
+/* */
+/* OpenPOWER sbe Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2016 */
+/* */
+/* */
+/* 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 */
+#ifndef __P9_SBE_H
+#define __P9_SBE_H
+
+/// \file p9_sbe.H
+/// \brief A header to be included into all SBE assembler files and C++
+/// hardware procedures that interact with SBE images.
+///
+/// This header #include-s all generally useful headers required for SBE code
+/// development as well as defining other needed facilities. Note that any
+/// sub-includes must be done in an assembler-safe way.
+
+#include "sbe_common.H"
+//#include "p9_scom_addresses.H"
+//#include "p9_istep_num.H"
+
+// The #include of fapiHwpReturnCodes.H must be made here (instead of in
+// sbe_common.H) to guarantee that the P9-local copy is used.
+//#include "fapiHwpReturnCodes.H"
+
+#ifdef __ASSEMBLER__
+
+ // p9_sbe.H 'recursively' inserts itself into any hook code extracted
+ // from an assembly context that includes p9_sbe.H.
+
+ ##`#include "p9_sbe.H"
+
+#endif // __ASSEMBLER__
+
+#endif // __P9_SBE_H
diff --git a/src/build/utils/proc_sbe_fixed.H b/src/build/utils/proc_sbe_fixed.H
new file mode 100644
index 00000000..9b06fb6f
--- /dev/null
+++ b/src/build/utils/proc_sbe_fixed.H
@@ -0,0 +1,211 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/build/utils/proc_sbe_fixed.H $ */
+/* */
+/* OpenPOWER sbe Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2016 */
+/* */
+/* */
+/* 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 */
+//-----------------------------------------------------------------------------
+// *! (C) Copyright International Business Machines Corp. 2014
+// *! All Rights Reserved -- Property of IBM
+// *! *** IBM Confidential ***
+//-----------------------------------------------------------------------------
+
+/// \file proc_sbe_fixed.H
+/// \brief Define the layout of fixed-position data in the P9 SBE reference
+/// and IPL images
+///
+/// Contains struct ProcSbeFixed which contains functions, rings and
+/// attributes whose pointers are stored in the fixed and fixed_toc section
+///
+/// This file defines the layout of the special .fixed data section of P9 SBE
+/// reference and IPL images. The .fixed section is guaranteed to appear at a
+/// fixed offset from the beginning of the image, containing data required to
+/// be manipulated when images are resident in non-volatile memories, thereby
+/// avoiding having to search the TOC. Data manipulated during in-memory image
+/// processing can always be easily located using the SBE-XIP TOC APIs. All
+/// of the data stored in .fixed can also still be referenced via the SBE-XIP
+/// TOC.
+///
+/// This header file can be #include-ed into either C or SBE assembly language
+/// source code. In C, it creates simple structures 'ProcChipAttributes',
+/// 'PervAttributes', 'CoreAttributes', 'EQAttributes' and 'EXAttributes' that
+/// contain attribute information that are sized per XML definition per entry.
+///
+/// PPE image data is always stored big-endian, so applications on little-endian
+/// hosts will need to perform the appropriate endian converison when reading or
+/// writing images via this header.
+///
+/// In assembler code, this header creates macros '.proc_sbe_fixed_proc_chip',
+/// '.proc_sbe_fixed_perv', '.proc_sbe_fixed_core', '.proc_sbe_fixed_ex',
+/// '.proc_sbe_fixed_eq', that is expanded exactly once in the file
+/// 'sbe_base_header.S', creating the actual data allocation of the data
+/// equivalent to the C structure. Assembler code references the data symbols
+/// as normal.
+///
+/// To simplify programming a 'mini-TOC' is also provided for this data in
+/// the .fixed_toc section. This section is comprised of SbeXipHashedToc
+/// structures. When a symbol is indedxed in .fixed, a blank SbeXipHashedToc
+/// stucture is added to .fixed_toc. During image normalization the array of
+/// SbeXipHashedToc is filled in as each symbol in .fixed is re-indexed into
+/// .fixed_toc.
+
+#ifndef __PROC_SBE_FIXED_H__
+#define __PROC_SBE_FIXED_H__
+
+#include "p9_sbe.H"
+#include "plat_target_parms.H"
+#include "fapi2AttributeIds.H"
+
+#ifdef __ASSEMBLER__
+ .macro .proc_sbe_fixed_system
+ .section .fixed, "a", @progbits
+ .balign 8
+ .global G_system_attributes
+G_system_attributes:
+#else
+
+extern "C" {
+namespace fapi2attr {
+typedef struct SystemAttributes_t {
+#endif
+
+#include "proc_sbe_fixed_system.H"
+
+#ifdef __ASSEMBLER__
+ .endm
+#else
+} SystemAttributes;
+} // fapi2
+} // C
+#endif
+
+#ifdef __ASSEMBLER__
+ .macro .proc_sbe_fixed_proc_chip
+ .section .fixed, "a", @progbits
+ .balign 8
+ .global G_proc_chip_attributes
+G_proc_chip_attributes:
+#else
+
+extern "C" {
+namespace fapi2attr {
+typedef struct ProcChipAttributes_t {
+#endif
+
+#include "proc_sbe_fixed_proc_chip.H"
+
+#ifdef __ASSEMBLER__
+ .endm
+#else
+} ProcChipAttributes;
+} // fapi2
+} // C
+#endif
+
+///
+/// Pervasive Target Attributes
+#ifdef __ASSEMBLER__
+ .macro .proc_sbe_fixed_perv
+ .section .fixed, "a", @progbits
+ .balign 8
+ .global G_perv_attributes
+G_perv_attributes:
+#else
+namespace fapi2attr {
+typedef struct PervAttributes_t {
+#endif
+
+#include "proc_sbe_fixed_perv.H"
+
+#ifdef __ASSEMBLER__
+ .endm
+#else
+} PervAttributes;
+} // fapi2
+#endif
+
+///
+/// Core (EC) Target Attributes
+#ifdef __ASSEMBLER__
+ .macro .proc_sbe_fixed_core
+ .section .fixed, "a", @progbits
+ .balign 8
+ .global G_core_attributes
+G_core_attributes:
+#else
+namespace fapi2attr {
+typedef struct CoreAttributes_t {
+#endif
+
+#include "proc_sbe_fixed_core.H"
+
+#ifdef __ASSEMBLER__
+ .endm
+#else
+} CoreAttributes;
+} // fapi2
+#endif
+
+///
+/// EX Target Attributes
+#ifdef __ASSEMBLER__
+ .macro .proc_sbe_fixed_ex
+ .section .fixed, "a", @progbits
+ .balign 8
+ .global G_ex_attributes
+G_ex_attributes:
+#else
+namespace fapi2attr {
+typedef struct EXAttributes_t {
+#endif
+
+#include "proc_sbe_fixed_ex.H"
+
+#ifdef __ASSEMBLER__
+ .endm
+#else
+} EXAttributes;
+} // fapi2
+#endif
+
+///
+/// EQ Target Attributes
+#ifdef __ASSEMBLER__
+ .macro .proc_sbe_fixed_eq
+ .section .fixed, "a", @progbits
+ .balign 8
+ .global G_eq_attributes
+G_eq_attributes:
+#else
+namespace fapi2attr {
+typedef struct EQAttributes_t {
+#endif
+
+#include "proc_sbe_fixed_eq.H"
+
+#ifdef __ASSEMBLER__
+ .endm
+#else
+} EQAttributes;
+} // fapi2
+#endif
+
+
+#endif // __PROC_SBE_FIXED_H__
diff --git a/src/build/utils/sbe_common.H b/src/build/utils/sbe_common.H
new file mode 100644
index 00000000..3cd8a0a0
--- /dev/null
+++ b/src/build/utils/sbe_common.H
@@ -0,0 +1,600 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/build/utils/sbe_common.H $ */
+/* */
+/* OpenPOWER sbe Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2016 */
+/* */
+/* */
+/* 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 */
+#ifndef __SBE_COMMON_H
+#define __SBE_COMMON_H
+
+// $Id: Exp $
+
+/// \file sbe_common.H
+
+/// \brief This header contains #include-s and macro definitions common to P8
+/// and Centaur SBE code development. It is #include-ed into p8_sbe.H and
+/// cen_sbe.H which have other setup specific to each environment.
+
+
+#include "sbe_link.H"
+#include "p9_xip_image.h"
+//#include "sbe_xip_header.H"
+
+/// Macros for generating the .fixed section
+///
+/// The CPP macros PROC_SBE_FIXED_UINT64[_VECTOR] generate equivalent code
+/// depending on whether they are being called from assembler (where they
+/// actually create the .fixed section data) or from C (where they specifiy a
+/// C-structure form of the contents of the .fixed section.
+///
+/// In assembler each invocation also creates space in the .fixed_toc section
+/// for a fixed TOC entry. Unlike the normal TOC no data is generated for
+/// .fixed_toc by the data declaration. Instead, the fixed TOC table is
+/// filled in during image normalization by normalizeToc (p9_xip_image.c)
+/// which requires that there be one and only one fixed TOC entery allocated
+/// per TOC entry referencing the .fixed section. This means that in the
+/// current implementation it is not possible to create .fixed_toc entries
+/// for addresses or for data stored in sections other than .fixed.
+
+#ifdef __ASSEMBLER__
+
+ .macro proc_sbe_fixed_uint8, symbol:req, tnumber=1, elements=1
+ .global \symbol
+\symbol\():
+ .rept ((\tnumber)*(\elements))
+ .byte 0
+ .endr
+
+ .xip_toc \symbol, P9_XIP_UINT8, \symbol, ((\tnumber)*(\elements))
+
+ .pushsection .fixed_toc
+ .space 8
+ .popsection
+
+ .endm
+
+ .macro proc_sbe_fixed_int8, symbol:req, tnumber=1, elements=1
+ .global \symbol
+\symbol\():
+ .rept ((\tnumber)*(\elements))
+ .byte 0
+ .endr
+
+ .xip_toc \symbol, P9_XIP_INT8, \symbol, ((\tnumber)*(\elements))
+
+ .pushsection .fixed_toc
+ .space 8
+ .popsection
+
+ .endm
+
+ .macro proc_sbe_fixed_uint16, symbol:req, tnumber=1, elements=1
+ .balign 2
+ .global \symbol
+\symbol\():
+
+ .rept ((\tnumber)*(\elements))
+ .byte 0,0
+ .endr
+
+ .xip_toc \symbol, P9_XIP_UINT16, \symbol, ((\tnumber)*(\elements))
+
+ .pushsection .fixed_toc
+ .space 8
+ .popsection
+
+ .endm
+
+ .macro proc_sbe_fixed_int16, symbol:req, tnumber=1, elements=1
+ .balign 2
+ .global \symbol
+\symbol\():
+
+ .rept ((\tnumber)*(\elements))
+ .byte 0,0
+ .endr
+
+ .xip_toc \symbol, P9_XIP_INT16, \symbol, ((\tnumber)*(\elements))
+
+ .pushsection .fixed_toc
+ .space 8
+ .popsection
+
+ .endm
+
+ .macro proc_sbe_fixed_uint32, symbol:req, tnumber=1, elements=1
+ .balign 4
+ .global \symbol
+\symbol\():
+
+ .rept ((\tnumber)*(\elements))
+ .long 0
+ .endr
+
+ .xip_toc \symbol, P9_XIP_UINT32, \symbol, ((\tnumber)*(\elements))
+
+ .pushsection .fixed_toc
+ .space 8
+ .popsection
+
+ .endm
+
+ .macro proc_sbe_fixed_int32, symbol:req, tnumber=1, elements=1
+ .balign 4
+ .global \symbol
+\symbol\():
+
+ .rept ((\tnumber)*(\elements))
+ .long 0
+ .endr
+
+ .xip_toc \symbol, P9_XIP_INT32, \symbol, ((\tnumber)*(\elements))
+
+ .pushsection .fixed_toc
+ .space 8
+ .popsection
+
+ .endm
+
+ .macro proc_sbe_fixed_uint64, symbol:req, tnumber=1, elements=1
+ .balign 8
+ .global \symbol
+\symbol\():
+ .rept ((\tnumber)*(\elements))
+ .quad 0
+ .endr
+
+ .xip_toc \symbol, P9_XIP_UINT64, \symbol, ((\tnumber)*(\elements))
+
+ .pushsection .fixed_toc
+ .space 8
+ .popsection
+
+ .endm
+
+ .macro proc_sbe_fixed_int64, symbol:req, tnumber=1, elements=1
+ .balign 8
+ .global \symbol
+\symbol\():
+ .rept ((\tnumber)*(\elements))
+ .quad 0
+ .endr
+
+ .xip_toc \symbol, P9_XIP_INT64, \symbol, ((\tnumber)*(\elements))
+
+ .pushsection .fixed_toc
+ .space 8
+ .popsection
+
+ .endm
+
+ .macro proc_sbe_fixed_quadia, symbol:req, space:req, address:req
+ .global \symbol
+\symbol\():
+ .quadia (\space), (\address)
+
+ .xip_toc \symbol, P9_XIP_UINT64, \symbol
+
+ .pushsection .fixed_toc
+ .space 8
+ .popsection
+
+ .endm
+
+
+#define PROC_SBE_FIXED_UINT8(symbol) \
+ proc_sbe_fixed_uint8 symbol
+
+#define PROC_SBE_FIXED_INT8(symbol) \
+ proc_sbe_fixed_int8 symbol
+
+#define PROC_SBE_FIXED_UINT16(symbol) \
+ proc_sbe_fixed_uint16 symbol
+
+#define PROC_SBE_FIXED_INT16(symbol) \
+ proc_sbe_fixed_int16 symbol
+
+#define PROC_SBE_FIXED_UINT32(symbol) \
+ proc_sbe_fixed_uint32 symbol
+
+#define PROC_SBE_FIXED_INT32(symbol) \
+ proc_sbe_fixed_int32 symbol
+
+#define PROC_SBE_FIXED_UINT64(symbol) \
+ proc_sbe_fixed_uint64 symbol
+
+#define PROC_SBE_FIXED_INT64(symbol) \
+ proc_sbe_fixed_int64 symbol
+
+#define PROC_SBE_FIXED_UINT8_VECTOR(symbol, elements) \
+ proc_sbe_fixed_uint8 symbol, 1, elements
+
+#define PROC_SBE_FIXED_INT8_VECTOR(symbol, elements) \
+ proc_sbe_fixed_int8 symbol, 1, elements
+
+#define PROC_SBE_FIXED_UINT16_VECTOR(symbol, elements) \
+ proc_sbe_fixed_uint16 symbol, 1, elements
+
+#define PROC_SBE_FIXED_INT16_VECTOR(symbol, elements) \
+ proc_sbe_fixed_int16 symbol, 1, elements
+
+#define PROC_SBE_FIXED_UINT32_VECTOR(symbol, elements) \
+ proc_sbe_fixed_uint32 symbol, 1, elements
+
+#define PROC_SBE_FIXED_INT32_VECTOR(symbol, elements) \
+ proc_sbe_fixed_int32 symbol, 1, elements
+
+#define PROC_SBE_FIXED_UINT64_VECTOR(symbol, elements) \
+ proc_sbe_fixed_uint64 symbol, 1, elements
+
+#define PROC_SBE_FIXED_INT64_VECTOR(symbol, elements) \
+ proc_sbe_fixed_int64 symbol, 1, elements
+
+#define PROC_SBE_FIXED_UINT8_VECTOR_2(symbol, dim1, dim2 ) \
+ proc_sbe_fixed_uint8 symbol, 1, dim1 * dim2
+
+#define PROC_SBE_FIXED_INT8_VECTOR_2(symbol, dim1, dim2 ) \
+ proc_sbe_fixed_int8 symbol, 1, dim1 * dim2
+
+#define PROC_SBE_FIXED_UINT16_VECTOR_2(symbol, dim1, dim2 ) \
+ proc_sbe_fixed_uint16 symbol, 1, dim1 * dim2
+
+#define PROC_SBE_FIXED_INT16_VECTOR_2(symbol, dim1, dim2 ) \
+ proc_sbe_fixed_int16 symbol, 1, dim1 * dim2
+
+#define PROC_SBE_FIXED_UINT32_VECTOR_2(symbol, dim1, dim2 ) \
+ proc_sbe_fixed_uint32 symbol, 1, dim1 * dim2
+
+#define PROC_SBE_FIXED_INT32_VECTOR_2(symbol, dim1, dim2 ) \
+ proc_sbe_fixed_int32 symbol, 1, dim1 * dim2
+
+#define PROC_SBE_FIXED_UINT64_VECTOR_2(symbol, dim1, dim2 ) \
+ proc_sbe_fixed_uint64 symbol, 1, dim1 * dim2
+
+#define PROC_SBE_FIXED_INT64_VECTOR_2(symbol, dim1, dim2 ) \
+ proc_sbe_fixed_int64 symbol, 1, dim1 * dim2
+
+#define PROC_SBE_FIXED_UINT8_VECTOR_3(symbol, dim1, dim2, dim3 ) \
+ proc_sbe_fixed_uint8 symbol, 1, dim1 * dim2 * dim3
+
+#define PROC_SBE_FIXED_INT8_VECTOR_3(symbol, dim1, dim2, dim3 ) \
+ proc_sbe_fixed_uint8 symbol, 1, dim1 * dim2 * dim3
+
+#define PROC_SBE_FIXED_UINT16_VECTOR_3(symbol, dim1, dim2, dim3 ) \
+ proc_sbe_fixed_uint16 symbol, 1, dim1 * dim2 * dim3
+
+#define PROC_SBE_FIXED_INT16_VECTOR_3(symbol, dim1, dim2, dim3 ) \
+ proc_sbe_fixed_uint16 symbol, 1, dim1 * dim2 * dim3
+
+#define PROC_SBE_FIXED_UINT32_VECTOR_3(symbol, dim1, dim2, dim3 ) \
+ proc_sbe_fixed_uint32 symbol, 1, dim1 * dim2 * dim3
+
+#define PROC_SBE_FIXED_INT32_VECTOR_3(symbol, dim1, dim2, dim3 ) \
+ proc_sbe_fixed_uint32 symbol, 1, dim1 * dim2 * dim3
+
+#define PROC_SBE_FIXED_UINT64_VECTOR_3(symbol, dim1, dim2, dim3 ) \
+ proc_sbe_fixed_uint64 symbol, 1, dim1 * dim2 * dim3
+
+#define PROC_SBE_FIXED_INT64_VECTOR_3(symbol, dim1, dim2, dim3 ) \
+ proc_sbe_fixed_uint64 symbol, 1, dim1 * dim2 * dim3
+
+// Non-Chip Target Attributes
+
+#define PROC_SBE_FIXED_TARGET_UINT8(symbol, tnumber) \
+ proc_sbe_fixed_uint8 symbol, tnumber
+
+#define PROC_SBE_FIXED_TARGET_INT8(symbol, tnumber) \
+ proc_sbe_fixed_int8 symbol, tnumber
+
+#define PROC_SBE_FIXED_TARGET_UINT16(symbol, tnumber) \
+ proc_sbe_fixed_uint16 symbol, tnumber
+
+#define PROC_SBE_FIXED_TARGET_INT16(symbol, tnumber) \
+ proc_sbe_fixed_int16 symbol, tnumber
+
+#define PROC_SBE_FIXED_TARGET_UINT32(symbol, tnumber) \
+ proc_sbe_fixed_uint32 symbol, tnumber
+
+#define PROC_SBE_FIXED_TARGET_INT32(symbol, tnumber) \
+ proc_sbe_fixed_int32 symbol, tnumber
+
+#define PROC_SBE_FIXED_TARGET_UINT64(symbol, tnumber) \
+ proc_sbe_fixed_uint64 symbol, tnumber
+
+#define PROC_SBE_FIXED_TARGET_INT64(symbol, tnumber) \
+ proc_sbe_fixed_int64 symbol, tnumber
+
+#define PROC_SBE_FIXED_TARGET_UINT8_VECTOR(symbol, tnumber, elements) \
+ proc_sbe_fixed_uint8 symbol, tnumber, elements
+
+#define PROC_SBE_FIXED_TARGET_INT8_VECTOR(symbol, tnumber, elements) \
+ proc_sbe_fixed_int8 symbol, tnumber, elements
+
+#define PROC_SBE_FIXED_TARGET_UINT16_VECTOR(symbol, tnumber, elements) \
+ proc_sbe_fixed_uint16 symbol, tnumber, elements
+
+#define PROC_SBE_FIXED_TARGET_INT16_VECTOR(symbol, tnumber, elements) \
+ proc_sbe_fixed_int16 symbol, tnumber, elements
+
+#define PROC_SBE_FIXED_TARGET_UINT32_VECTOR(symbol, tnumber, elements) \
+ proc_sbe_fixed_uint32 symbol, tnumber, elements
+
+#define PROC_SBE_FIXED_TARGET_INT32_VECTOR(symbol, tnumber, elements) \
+ proc_sbe_fixed_int32 symbol, tnumber, elements
+
+#define PROC_SBE_FIXED_TARGET_UINT64_VECTOR(symbol, tnumber, elements) \
+ proc_sbe_fixed_uint64 symbol, tnumber, elements
+
+#define PROC_SBE_FIXED_TARGET_INT64_VECTOR(symbol, tnumber, elements) \
+ proc_sbe_fixed_int64 symbol, tnumber, elements
+
+#define PROC_SBE_FIXED_TARGET_UINT8_VECTOR_2(symbol, tnumber, dim1, dim2 ) \
+ proc_sbe_fixed_uint8 symbol, tnumber, dim1 * dim2
+
+#define PROC_SBE_FIXED_TARGET_INT8_VECTOR_2(symbol, tnumber, dim1, dim2 ) \
+ proc_sbe_fixed_int8 symbol, tnumber, dim1 * dim2
+
+#define PROC_SBE_FIXED_TARGET_UINT16_VECTOR_2(symbol, tnumber, dim1, dim2 ) \
+ proc_sbe_fixed_uint16 symbol, tnumber, dim1 * dim2
+
+#define PROC_SBE_FIXED_TARGET_INT16_VECTOR_2(symbol, tnumber, dim1, dim2 ) \
+ proc_sbe_fixed_int16 symbol, tnumber, dim1 * dim2
+
+#define PROC_SBE_FIXED_TARGET_UINT32_VECTOR_2(symbol, tnumber, dim1, dim2 ) \
+ proc_sbe_fixed_uint32 symbol, tnumber, dim1 * dim2
+
+#define PROC_SBE_FIXED_TARGET_INT32_VECTOR_2(symbol, tnumber, dim1, dim2 ) \
+ proc_sbe_fixed_int32 symbol, tnumber, dim1 * dim2
+
+#define PROC_SBE_FIXED_TARGET_UINT64_VECTOR_2(symbol, tnumber, dim1, dim2 ) \
+ proc_sbe_fixed_uint64 symbol, tnumber, dim1 * dim2
+
+#define PROC_SBE_FIXED_TARGET_INT64_VECTOR_2(symbol, tnumber, dim1, dim2 ) \
+ proc_sbe_fixed_int64 symbol, tnumber, dim1 * dim2
+
+#define PROC_SBE_FIXED_TARGET_UINT8_VECTOR_3(symbol, tnumber, dim1, dim2, dim3 ) \
+ proc_sbe_fixed_uint8 symbol, tnumber, dim1 * dim2 * dim3
+
+#define PROC_SBE_FIXED_TARGET_INT8_VECTOR_3(symbol, tnumber, dim1, dim2, dim3 ) \
+ proc_sbe_fixed_uint8 symbol, tnumber, dim1 * dim2 * dim3
+
+#define PROC_SBE_FIXED_TARGET_UINT16_VECTOR_3(symbol, tnumber, dim1, dim2, dim3 ) \
+ proc_sbe_fixed_uint16 symbol, tnumber, dim1 * dim2 * dim3
+
+#define PROC_SBE_FIXED_TARGET_INT16_VECTOR_3(symbol, tnumber, dim1, dim2, dim3 ) \
+ proc_sbe_fixed_uint16 symbol, tnumber, dim1 * dim2 * dim3
+
+#define PROC_SBE_FIXED_TARGET_UINT32_VECTOR_3(symbol, tnumber, dim1, dim2, dim3 ) \
+ proc_sbe_fixed_uint32 symbol, tnumber, dim1 * dim2 * dim3
+
+#define PROC_SBE_FIXED_TARGET_INT32_VECTOR_3(symbol, tnumber, dim1, dim2, dim3 ) \
+ proc_sbe_fixed_uint32 symbol, tnumber, dim1 * dim2 * dim3
+
+#define PROC_SBE_FIXED_TARGET_UINT64_VECTOR_3(symbol, tnumber, dim1, dim2, dim3 ) \
+ proc_sbe_fixed_uint64 symbol, tnumber, dim1 * dim2 * dim3
+
+#define PROC_SBE_FIXED_TARGET_INT64_VECTOR_3(symbol, tnumber, dim1, dim2, dim3 ) \
+ proc_sbe_fixed_uint64 symbol, tnumber, dim1 * dim2 * dim3
+
+#define PROC_SBE_FIXED_QUADIA(symbol, space, address) \
+ proc_sbe_fixed_quadia symbol, (space), (address)
+
+
+#else // __ASSEMBLER__ (eg the C portion)
+
+#define PROC_SBE_FIXED_UINT8(symbol) \
+ uint8_t symbol
+
+#define PROC_SBE_FIXED_INT8(symbol) \
+ int8_t symbol
+
+#define PROC_SBE_FIXED_UINT16(symbol) \
+ uint16_t symbol
+
+#define PROC_SBE_FIXED_INT16(symbol) \
+ int16_t symbol
+
+#define PROC_SBE_FIXED_UINT32(symbol) \
+ uint32_t symbol
+
+#define PROC_SBE_FIXED_INT32(symbol) \
+ int32_t symbol
+
+#define PROC_SBE_FIXED_UINT64(symbol) \
+ uint64_t symbol
+
+#define PROC_SBE_FIXED_INT64(symbol) \
+ int64_t symbol
+
+#define PROC_SBE_FIXED_UINT8_VECTOR(symbol, elements) \
+ uint8_t symbol[elements]
+
+#define PROC_SBE_FIXED_INT8_VECTOR(symbol, elements) \
+ int8_t symbol[elements]
+
+#define PROC_SBE_FIXED_UINT16_VECTOR(symbol, elements) \
+ uint16_t symbol[elements]
+
+#define PROC_SBE_FIXED_INT16_VECTOR(symbol, elements) \
+ int16_t symbol[elements]
+
+#define PROC_SBE_FIXED_UINT32_VECTOR(symbol, elements) \
+ uint32_t symbol[elements]
+
+#define PROC_SBE_FIXED_INT32_VECTOR(symbol, elements) \
+ int32_t symbol[elements]
+
+#define PROC_SBE_FIXED_UINT64_VECTOR(symbol, elements) \
+ uint64_t symbol[elements]
+
+#define PROC_SBE_FIXED_INT64_VECTOR(symbol, elements) \
+ int64_t symbol[elements]
+
+#define PROC_SBE_FIXED_UINT8_VECTOR_2(symbol, dim1, dim2 ) \
+ uint8_t symbol[dim1][dim2]
+
+#define PROC_SBE_FIXED_INT8_VECTOR_2(symbol, dim1, dim2 ) \
+ int8_t symbol[dim1][dim2]
+
+#define PROC_SBE_FIXED_UINT16_VECTOR_2(symbol, dim1, dim2 ) \
+ uint16_t symbol[dim1][dim2]
+
+#define PROC_SBE_FIXED_INT16_VECTOR_2(symbol, dim1, dim2 ) \
+ int16_t symbol[dim1][dim2]
+
+#define PROC_SBE_FIXED_UINT32_VECTOR_2(symbol, dim1, dim2 ) \
+ uint32_t symbol[dim1][dim2]
+
+#define PROC_SBE_FIXED_INT32_VECTOR_2(symbol, dim1, dim2 ) \
+ int32_t symbol[dim1][dim2]
+
+#define PROC_SBE_FIXED_UINT64_VECTOR_2(symbol, dim1, dim2 ) \
+ uint64_t symbol[dim1][dim2]
+
+#define PROC_SBE_FIXED_INT64_VECTOR_2(symbol, dim1, dim2 ) \
+ int64_t symbol[dim1][dim2]
+
+#define PROC_SBE_FIXED_UINT8_VECTOR_3(symbol, dim1, dim2, dim3 ) \
+ uint8_t symbol[dim1][dim2][dim3]
+
+#define PROC_SBE_FIXED_INT8_VECTOR_3(symbol, dim1, dim2, dim3 ) \
+ int8_t symbol[dim1][dim2][dim3]
+
+#define PROC_SBE_FIXED_UINT16_VECTOR_3(symbol, dim1, dim2, dim3 ) \
+ uint16_t symbol[dim1][dim2][dim3]
+
+#define PROC_SBE_FIXED_INT16_VECTOR_3(symbol, dim1, dim2, dim3 ) \
+ int16_t symbol[dim1][dim2][dim3]
+
+#define PROC_SBE_FIXED_UINT32_VECTOR_3(symbol, dim1, dim2, dim3 ) \
+ uint32_t symbol[dim1][dim2][dim3]
+
+#define PROC_SBE_FIXED_INT32_VECTOR_3(symbol, dim1, dim2, dim3 ) \
+ int32_t symbol[dim1][dim2][dim3]
+
+#define PROC_SBE_FIXED_UINT64_VECTOR_3(symbol, dim1, dim2, dim3 ) \
+ uint64_t symbol[dim1][dim2][dim3]
+
+#define PROC_SBE_FIXED_INT64_VECTOR_3(symbol, dim1, dim2, dim3 ) \
+ int64_t symbol[dim1][dim2][dim3]
+
+// Non-Chip Target Attributes
+
+#define PROC_SBE_FIXED_TARGET_UINT8(symbol, tnumber) \
+ uint8_t symbol[tnumber]
+
+#define PROC_SBE_FIXED_TARGET_INT8(symbol, tnumber) \
+ int8_t symbol[tnumber]
+
+#define PROC_SBE_FIXED_TARGET_UINT16(symbol, tnumber) \
+ uint16_t symbol[tnumber]
+
+#define PROC_SBE_FIXED_TARGET_INT16(symbol, tnumber) \
+ int16_t symbol[tnumber]
+
+#define PROC_SBE_FIXED_TARGET_UINT32(symbol, tnumber) \
+ uint32_t symbol[tnumber]
+
+#define PROC_SBE_FIXED_TARGET_INT32(symbol, tnumber) \
+ int32_t symbol[tnumber]
+
+#define PROC_SBE_FIXED_TARGET_UINT64(symbol, tnumber) \
+ uint64_t symbol[tnumber]
+
+#define PROC_SBE_FIXED_TARGET_INT64(symbol, tnumber) \
+ int64_t symbol[tnumber]
+
+#define PROC_SBE_FIXED_TARGET_UINT8_VECTOR(symbol, tnumber, elements) \
+ uint8_t symbol[tnumber][elements]
+
+#define PROC_SBE_FIXED_TARGET_INT8_VECTOR(symbol, tnumber, elements) \
+ int8_t symbol[tnumber][elements]
+
+#define PROC_SBE_FIXED_TARGET_UINT16_VECTOR(symbol, tnumber, elements) \
+ uint16_t symbol[tnumber][elements]
+
+#define PROC_SBE_FIXED_TARGET_INT16_VECTOR(symbol, tnumber, elements) \
+ int16_t symbol[tnumber][elements]
+
+#define PROC_SBE_FIXED_TARGET_UINT32_VECTOR(symbol, tnumber, elements) \
+ uint32_t symbol[tnumber][elements]
+
+#define PROC_SBE_FIXED_TARGET_INT32_VECTOR(symbol, tnumber, elements) \
+ int32_t symbol[tnumber][elements]
+
+#define PROC_SBE_FIXED_TARGET_UINT64_VECTOR(symbol, tnumber, elements) \
+ uint64_t symbol[tnumber][elements]
+
+#define PROC_SBE_FIXED_TARGET_INT64_VECTOR(symbol, tnumber, elements) \
+ int64_t symbol[tnumber][elements]
+
+#define PROC_SBE_FIXED_TARGET_UINT8_VECTOR_2(symbol, tnumber, dim1, dim2 ) \
+ uint8_t symbol[tnumber][dim1][dim2]
+
+#define PROC_SBE_FIXED_TARGET_INT8_VECTOR_2(symbol, tnumber, dim1, dim2 ) \
+ int8_t symbol[tnumber][dim1][dim2]
+
+#define PROC_SBE_FIXED_TARGET_UINT16_VECTOR_2(symbol, tnumber, dim1, dim2 ) \
+ uint16_t symbol[tnumber][dim1][dim2]
+
+#define PROC_SBE_FIXED_TARGET_INT16_VECTOR_2(symbol, tnumber, dim1, dim2 ) \
+ int16_t symbol[tnumber][dim1][dim2]
+
+#define PROC_SBE_FIXED_TARGET_UINT32_VECTOR_2(symbol, tnumber, dim1, dim2 ) \
+ uint32_t symbol[tnumber][dim1][dim2]
+
+#define PROC_SBE_FIXED_TARGET_INT32_VECTOR_2(symbol, tnumber, dim1, dim2 ) \
+ int32_t symbol[tnumber][dim1][dim2]
+
+#define PROC_SBE_FIXED_TARGET_UINT64_VECTOR_2(symbol, tnumber, dim1, dim2 ) \
+ uint64_t symbol[tnumber][dim1][dim2]
+
+#define PROC_SBE_FIXED_TARGET_INT64_VECTOR_2(symbol, tnumber, dim1, dim2 ) \
+ int64_t symbol[tnumber][dim1][dim2]
+
+#define PROC_SBE_FIXED_TARGET_UINT8_VECTOR_3(symbol, tnumber, dim1, dim2, dim3 ) \
+ uint8_t symbol[tnumber][dim1][dim2][dim3]
+
+#define PROC_SBE_FIXED_TARGET_INT8_VECTOR_3(symbol, tnumber, dim1, dim2, dim3 ) \
+ int8_t symbol[tnumber][dim1][dim2][dim3]
+
+#define PROC_SBE_FIXED_TARGET_UINT16_VECTOR_3(symbol, tnumber, dim1, dim2, dim3 ) \
+ uint16_t symbol[tnumber][dim1][dim2][dim3]
+
+#define PROC_SBE_FIXED_TARGET_INT16_VECTOR_3(symbol, tnumber, dim1, dim2, dim3 ) \
+ int16_t symbol[tnumber][dim1][dim2][dim3]
+
+#define PROC_SBE_FIXED_TARGET_UINT32_VECTOR_3(symbol, tnumber, dim1, dim2, dim3 ) \
+ uint32_t symbol[tnumber][dim1][dim2][dim3]
+
+#define PROC_SBE_FIXED_TARGET_INT32_VECTOR_3(symbol, tnumber, dim1, dim2, dim3 ) \
+ int32_t symbol[tnumber][dim1][dim2][dim3]
+
+#define PROC_SBE_FIXED_TARGET_UINT64_VECTOR_3(symbol, tnumber, dim1, dim2, dim3 ) \
+ uint64_t symbol[tnumber][dim1][dim2][dim3]
+
+#define PROC_SBE_FIXED_TARGET_INT64_VECTOR_3(symbol, tnumber, dim1, dim2, dim3 ) \
+ int64_t symbol[tnumber][dim1][dim2][dim3]
+
+#define PROC_SBE_FIXED_QUADIA(symbol, space, address) uint64_t symbol
+
+#endif // __ASSEMBLER__
+
+#endif // __SBE_COMMON_H
diff --git a/src/build/utils/sbe_link.H b/src/build/utils/sbe_link.H
new file mode 100644
index 00000000..0321a0a8
--- /dev/null
+++ b/src/build/utils/sbe_link.H
@@ -0,0 +1,102 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/build/utils/sbe_link.H $ */
+/* */
+/* OpenPOWER sbe Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2016 */
+/* */
+/* */
+/* 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 */
+#ifndef __SBE_LINK_H
+#define __SBE_LINK_H
+
+// $Id: Exp $
+
+/// \file sbe_link.H
+/// \brief Constants required for linking SBE code images
+///
+/// This header contains those cpp manifest constants required for processing
+/// the linker scripts used to generate SBE code images. They may also be
+/// useful for PPE assembler programming so they are included in sbe.H as
+/// well.
+///
+/// The link address of OTPROM code as a byte-address
+///
+/// The OTPROM can be addressed both as an I2C slave and as a direct PIB
+/// slave. The I2C slave is at PIB local address 0x0 and the PIB memory
+/// interface is at local address 0x8000. SBE/IPL uses the PIB addressing
+/// mode, so the OTPROM image is linked at 0x40000 (the byte-address
+/// equivalent of 0x8000).
+#define OTPROM_ORIGIN 0xC0000
+
+/// The amount of memory contained in each OTPROM macro
+#define OTPROM_BLOCK_SIZE 1024
+
+/// The amount of memory reserved for OTPROM code
+///
+/// This amount is exclusive of physical OTPROM memory reserved for compressed
+/// scan ring images.
+#define OTPROM_CODE_SIZE (1 * OTPROM_BLOCK_SIZE)
+
+/// The link address of the P9 SBE Base image
+#define SBE_BASE_ORIGIN 0xFFFE8000
+/// SBE base image length ( 96 KB - 512 bytes for loader)
+#define SBE_BASE_LENGTH 0x17DFF
+
+///This Index depends upon XIP HEADER File
+// Start offset of sectionTable in XIP header. There are 8 entries
+// of 8 byte each.
+#define SBE_XIP_TOC_OFFSET 8*8
+
+/// The link address of the P9 SBE Base image
+#define SBE_SEEPROM_BASE_ORIGIN 0x80000000
+
+/// This Index depends upon XIP HEADER File
+/// Each section table entry is 12 bytes(SIZE_OF_SBE_XIP_SECTION) size,
+// Base Loader is 10 th (P9_XIP_SECTION_BASELOADER) section
+#define SBE_LOADER_BASE_SECTION SBE_SEEPROM_BASE_ORIGIN + SBE_XIP_TOC_OFFSET \
+ + 120
+// Base Loader start address
+#define SBE_LOADER_BASE_ORIGIN 0xFFFFFE00
+// Base Loader length
+#define SBE_LOADER_BASE_LENGTH 0x200
+
+// Base Loader entry function offset in header
+#define SBE_LOADER_ENTRY_HEADER_OFFSET 20
+
+/// The physical address offset where SBE-SEEPROM code is loaded
+///
+/// This address *must* be a constant known to the OTPROM code.
+#define SBE_SEEPROM_LOAD_ADDRESS 0x2000
+
+/// The offset (in bytes) of the .fixed section in P9 SBE-XIP images
+#define SBE_XIP_FIXED_OFFSET 512
+
+/// The link address of the PIBMEM image
+#define PIBMEM_ORIGIN 0
+
+/// The amount of space available in the PIBMEM, in bytes (96KB)
+#define PIBMEM_SIZE (96 * 1024)
+
+/// The fixed section of Otprom
+#define OTPROM_FIXED_SIZE (OTPROM_ORIGIN + 0x340)
+
+/// Sbe fixed sction for the pibmem repair
+#define SBE_FIXED_SECTION (SBE_SEEPROM_BASE_ORIGIN + SBE_XIP_TOC_OFFSET + 12)
+
+#endif // __SBE_LINK_H
+
diff --git a/src/build/utils/utils.mk b/src/build/utils/utils.mk
new file mode 100644
index 00000000..e1fed401
--- /dev/null
+++ b/src/build/utils/utils.mk
@@ -0,0 +1,27 @@
+# IBM_PROLOG_BEGIN_TAG
+# This is an automatically generated prolog.
+#
+# $Source: src/build/utils/utils.mk $
+#
+# OpenPOWER sbe Project
+#
+# Contributors Listed Below - COPYRIGHT 2015,2016
+#
+#
+# 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
+BUILDDATA-S-SOURCES = base_ppe_header.S
+BUILDDATA-S-SOURCES += base_sbe_fixed.S
+
+BUILDDATA_OBJECTS += $(BUILDDATA-S-SOURCES:.S=.o)
OpenPOWER on IntegriCloud