aboutsummaryrefslogtreecommitdiff
path: root/sys/tools/arm_kernel_boothdr.awk
diff options
context:
space:
mode:
Diffstat (limited to 'sys/tools/arm_kernel_boothdr.awk')
-rw-r--r--sys/tools/arm_kernel_boothdr.awk32
1 files changed, 32 insertions, 0 deletions
diff --git a/sys/tools/arm_kernel_boothdr.awk b/sys/tools/arm_kernel_boothdr.awk
index e0f193f7922c..37d8c4b5af0e 100644
--- a/sys/tools/arm_kernel_boothdr.awk
+++ b/sys/tools/arm_kernel_boothdr.awk
@@ -38,6 +38,7 @@ BEGIN {
# The type of header we're writing is set using -v hdrtype= on
# the command line, ensure we got a valid value for it.
if (hdrtype != "v7jump" &&
+ hdrtype != "v7bootz" &&
hdrtype != "v8jump" &&
hdrtype != "v8booti") {
print "arm_kernel_boothdr.awk: " \
@@ -107,6 +108,35 @@ function write_v7jump() {
write_le32(hexstr_to_num("ea000000") + (gStartOff / 4) - 2)
}
+function write_v7bootz() {
+
+ # We are writing this struct...
+ #
+ # struct BootZ_header {
+ # uint32_t code0; /* Executable code */
+ # uint32_t dummy[8]; /* dummy */
+ # uint32_t magic; /* Magic number 0x016f2818*/
+ # uint32_t load_offset; /* Image load offset, LE */
+ # uint32_t image_size; /* Effective Image size, LE */
+ # };
+ #
+ # We write 'b _start' into code0. The image size is everything from
+ # the start of the loaded image to the offset given by the _end symbol.
+
+ write_v7jump() # code0
+ write_le32(0) # dummy[0]
+ write_le32(0) # dummy[1]
+ write_le32(0) # dummy[2]
+ write_le32(0) # dummy[3]
+ write_le32(0) # dummy[4]
+ write_le32(0) # dummy[5]
+ write_le32(0) # dummy[6]
+ write_le32(0) # dummy[7]
+ write_le32(hexstr_to_num("016f2818")) # magic marker
+ write_le32(0) # load_offset (0 -> auto)
+ write_le32(gEndOff) # image_size
+}
+
function write_v8jump() {
# Write the machine code for "b _start"...
@@ -186,6 +216,8 @@ END {
if (gHdrType == "v7jump") {
write_v7jump()
+ } else if (gHdrType == "v7bootz") {
+ write_v7bootz()
} else if (gHdrType == "v8jump") {
write_v8jump()
} else if (gHdrType == "v8booti") {