|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [ImageBuilder] uboot-script-gen: use size from arm32 zImage header
Take an example from commit 8bf401c99035 ("uboot-script-gen: use size from
arm64 Image header") and add support for calculating the effective image
size from arm32 zImage header.
Introduce get_image_size() function and use it to to probe the supported
header magic values and to retrieve the effective image size. Use this
value in add_size(), whenever it's bigger than the one obtained using
'stat -L'.
Signed-off-by: Michal Orzel <michal.orzel@xxxxxxx>
---
This patch together with 'bootz' support will allow us to enable testing Xen
on arm{32,64} in gitlab CI with UBSAN enabled.
---
scripts/uboot-script-gen | 38 ++++++++++++++++++++++++++++----------
1 file changed, 28 insertions(+), 10 deletions(-)
diff --git a/scripts/uboot-script-gen b/scripts/uboot-script-gen
index 9e3d86e4743a..078a667c61ab 100755
--- a/scripts/uboot-script-gen
+++ b/scripts/uboot-script-gen
@@ -431,23 +431,41 @@ function device_tree_editing()
fi
}
-function add_size()
+# Read effective image size from a header, which may be larger than the
filesize
+# due to noload sections, e.g. bss.
+function get_image_size()
{
- local filename=$1
- local size=`stat -L --printf="%s" $filename`
+ local image=$1
+ local effective_size=0
# Read arm64 header magic
(https://www.kernel.org/doc/Documentation/arm64/booting.txt)
- local arm64_header_magic=$(od -j 56 -N 4 -t x4 ${filename} | awk 'NR==1
{print $2}')
+ local arm64_header_magic=$(od -j 56 -N 4 -t x4 ${image} | awk 'NR==1
{print $2}')
+ # Read arm32 header magic
(http://www.simtec.co.uk/products/SWLINUX/files/booting_article.html)
+ local arm32_header_magic=$(od -j 36 -N 4 -t x4 ${image} | awk 'NR==1
{print $2}')
# Check for valid arm64 header magic value 0x644d5241
if [ "${arm64_header_magic}" = "644d5241" ]
then
- # Read effective size, which may be larger than the filesize due to
noload sections, e.g. bss
- local arm64_header_size=$(od -j 16 -N 8 -t u8 ${filename} | awk 'NR==1
{print $2}')
+ effective_size=$(od -j 16 -N 8 -t u8 ${image} | awk 'NR==1 {print $2}')
+ # Check for valid arm32 header magic value 0x016f2818
+ elif [ "${arm32_header_magic}" = "016f2818" ]
+ then
+ local start=$(od -j 40 -N 4 -t u4 ${image} | awk 'NR==1 {print $2}')
+ local end=$(od -j 44 -N 4 -t u4 ${image} | awk 'NR==1 {print $2}')
+ effective_size=$(( end - start ))
+ fi
- if [ "${arm64_header_size}" -gt "${size}" ]
- then
- size=${arm64_header_size}
- fi
+ printf "%u" $effective_size
+}
+
+function add_size()
+{
+ local filename=$1
+ local size=`stat -L --printf="%s" $filename`
+ local image_size=`get_image_size $filename`
+
+ if [ "${image_size}" -gt "${size}" ]
+ then
+ size=${image_size}
fi
memaddr=$(( $memaddr + $size + $offset - 1))
--
2.25.1
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |