// Copyright 2020 The Fuchsia Authors
//
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file or at
// https://opensource.org/licenses/MIT

#include <lib/arch/asm.h>
#include <zircon/boot/image.h>

// The linker script (phys.ld) places this section first in the image.  It
// provides the ZBI headers for the kernel so that the whole load image is
// a standalone ZBI container of one (ZBI_TYPE_KERNEL_*) item.
.section .boot.header, "a", %progbits

ZBI_CONTAINER_HEADER(kZbiContainerHeader, PHYS_LOAD_END - kZbiItemHeader)

// zbi_header_t
.object kZbiItemHeader, rodata, nosection=nosection
#ifdef __aarch64__
  .int ZBI_TYPE_KERNEL_ARM64    // type
#elif defined(__x86_64__)
  .int ZBI_TYPE_KERNEL_X64      // type
#else
#error "what machine?"
#endif
  .int PHYS_LOAD_END - kZbiKernelHeader // length
  .int 0                                // extra
  .int ZBI_FLAG_VERSION                 // flags
  .int 0, 0                             // reserved0, reserved1
  .int ZBI_ITEM_MAGIC                   // magic
  .int ZBI_ITEM_NO_CRC32                // crc32
.end_object

// The zbi-header.ld linker script fragment synthesizes the zbi_kernel_t
// contents and places them directly after .boot.header so it appears here.
// This cannot be done in assembly without generating relocations that would
// make the linker try to generate dynamic fixups under -pie.
.label kZbiKernelHeader, type=object
.size kZbiKernelHeader, 16
