Commit da146df5 authored by Simon Glass's avatar Simon Glass
Browse files

binman: Add support for u-boot-tpl-bss-bad



This entry holds the padding between the end of of TPL binary and the
end of BSS. This region must be left empty so that the devicetree can be
appended correctly and remain accessible without interfering with BSS.
Signed-off-by: Simon Glass's avatarSimon Glass <sjg@chromium.org>
parent 2b846e10
......@@ -1056,6 +1056,28 @@ binman uses that to look up symbols to write into the TPL binary.
Entry: u-boot-tpl-bss-pad: U-Boot TPL binary padded with a BSS region
---------------------------------------------------------------------
Properties / Entry arguments:
None
This holds the padding added after the TPL binary to cover the BSS (Block
Started by Symbol) region. This region holds the various variables used by
TPL. It is set to 0 by TPL when it starts up. If you want to append data to
the TPL image (such as a device tree file), you must pad out the BSS region
to avoid the data overlapping with U-Boot variables. This entry is useful in
that case. It automatically pads out the entry size to cover both the code,
data and BSS.
The contents of this entry will a certain number of zero bytes, determined
by __bss_size
The ELF file 'tpl/u-boot-tpl' must also be available for this to work, since
binman uses that to look up the BSS address.
Entry: u-boot-tpl-dtb: U-Boot TPL device tree
---------------------------------------------
......
# SPDX-License-Identifier: GPL-2.0+
# Copyright 2021 Google LLC
# Written by Simon Glass <sjg@chromium.org>
#
# Entry-type module for BSS padding for tpl/u-boot-tpl.bin. This padding
# can be added after the TPL binary to ensure that anything concatenated
# to it will appear to TPL to be at the end of BSS rather than the start.
#
from binman import elf
from binman.entry import Entry
from binman.etype.blob import Entry_blob
from patman import tools
class Entry_u_boot_tpl_bss_pad(Entry_blob):
"""U-Boot TPL binary padded with a BSS region
Properties / Entry arguments:
None
This holds the padding added after the TPL binary to cover the BSS (Block
Started by Symbol) region. This region holds the various variables used by
TPL. It is set to 0 by TPL when it starts up. If you want to append data to
the TPL image (such as a device tree file), you must pad out the BSS region
to avoid the data overlapping with U-Boot variables. This entry is useful in
that case. It automatically pads out the entry size to cover both the code,
data and BSS.
The contents of this entry will a certain number of zero bytes, determined
by __bss_size
The ELF file 'tpl/u-boot-tpl' must also be available for this to work, since
binman uses that to look up the BSS address.
"""
def __init__(self, section, etype, node):
super().__init__(section, etype, node)
def ObtainContents(self):
fname = tools.GetInputFilename('tpl/u-boot-tpl')
bss_size = elf.GetSymbolAddress(fname, '__bss_size')
if not bss_size:
self.Raise('Expected __bss_size symbol in tpl/u-boot-tpl')
self.SetContents(tools.GetBytes(0, bss_size))
return True
......@@ -4262,6 +4262,22 @@ class TestFunctional(unittest.TestCase):
self.assertEqual(U_BOOT_TPL_NODTB_DATA,
data[:len(U_BOOT_TPL_NODTB_DATA)])
def testTplBssPad(self):
"""Test that we can pad TPL's BSS with zeros"""
# ELF file with a '__bss_size' symbol
self._SetupTplElf()
data = self._DoReadFile('193_tpl_bss_pad.dts')
self.assertEqual(U_BOOT_TPL_DATA + tools.GetBytes(0, 10) + U_BOOT_DATA,
data)
def testTplBssPadMissing(self):
"""Test that a missing symbol is detected"""
self._SetupTplElf('u_boot_ucode_ptr')
with self.assertRaises(ValueError) as e:
self._DoReadFile('193_tpl_bss_pad.dts')
self.assertIn('Expected __bss_size symbol in tpl/u-boot-tpl',
str(e.exception))
if __name__ == "__main__":
unittest.main()
// SPDX-License-Identifier: GPL-2.0+
/dts-v1/;
/ {
#address-cells = <1>;
#size-cells = <1>;
binman {
u-boot-tpl {
};
u-boot-tpl-bss-pad {
};
u-boot {
};
};
};
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment