public inbox for linux-arm-kernel@lists.infradead.org
 help / color / mirror / Atom feed
From: geoff@infradead.org (Geoff Levand)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 3/4] arm64: export effective Image size to bootloaders
Date: Mon, 16 Jun 2014 13:27:12 -0700	[thread overview]
Message-ID: <1402950432.3708.22.camel@smoke> (raw)
In-Reply-To: <1400233839-15140-4-git-send-email-mark.rutland@arm.com>

Hi Mark,

Sorry for such a delay in my reply.

On Fri, 2014-05-16 at 10:50 +0100, Mark Rutland wrote:
> Both the image load offset and the effective image size are forced to be
> little-endian regardless of the native endianness of the kernel to
> enable bootloaders to load a kernel of arbitrary endianness. Bootloaders
> which wish to make use of the load offset can inspect the effective
> image size field for a non-zero value to determine if the offset is of a
> known endianness.

Doing this conversion in the linker script seems complicated.  My
thought was to just have an image header field that specifies the
byte order, in the same way that the EI_DATA part of the ELF
e_ident field does.

Another advantage of having the byte order in the header is that
tools other than a boot loader that need to know the byte order
can get that info from the header, otherwise they would need to
guess the order with some kind of inspection.

A patch I had planned to post for this is below.

> --- a/Documentation/arm64/booting.txt
> +++ b/Documentation/arm64/booting.txt
> @@ -72,8 +72,8 @@ The decompressed kernel image contains a 64-byte header as follows:
>  
>    u32 code0;			/* Executable code */
>    u32 code1;			/* Executable code */
> -  u64 text_offset;		/* Image load offset */
> -  u64 res0	= 0;		/* reserved */
> +  u64 text_offset;		/* Image load offset, little endian */
> +  u64 image_size;		/* Effective Image size, little endian */

It seems __le64 would be a better type to use here, if the
value is decided to be little endian.

>    u64 res1	= 0;		/* reserved */
>    u64 res2	= 0;		/* reserved */
>    u64 res3	= 0;		/* reserved */
> @@ -86,9 +86,27 @@ Header notes:


>From a63dd2f24105c55734238efaacdac5048bbedf39 Mon Sep 17 00:00:00 2001
From: Geoff Levand <geoff@infradead.org>
Date: Thu, 12 Jun 2014 11:23:23 -0700
Subject: [PATCH] arm64: Add byte order to image header

When working with a raw arm64 image one needs to know the byte order of the
image header to properly interpret the multi-byte values of the header.  Add
a character value to the image header indicating the byte order the image was
built with:

  1=LSB (little endian), 2=MSB (big endian), 0=no support.

A zero value will indicate a kernel that pre-dates this change.

Signed-off-by: Geoff Levand <geoff@infradead.org>
---
 arch/arm64/kernel/head.S | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S
index b96a732..70c3656 100644
--- a/arch/arm64/kernel/head.S
+++ b/arch/arm64/kernel/head.S
@@ -109,7 +109,11 @@
 	 * DO NOT MODIFY. Image header expected by Linux boot-loaders.
 	 */
 	b	stext				// branch to kernel start, magic
-	.long	0				// reserved
+	CPU_LE(.byte	1)			// 1=LSB (little endian)
+	CPU_BE(.byte	2)			// 2=MSB (big endian)
+	.byte	0				// reserved
+	.byte	0				// reserved
+	.byte	0				// reserved
 	.quad	TEXT_OFFSET			// Image load offset from start of RAM
 	.quad	0				// reserved
 	.quad	0				// reserved
-- 
1.9.1

  parent reply	other threads:[~2014-06-16 20:27 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-16  9:50 [PATCH 0/4] arm64: simplify restrictions on bootloaders Mark Rutland
2014-05-16  9:50 ` [PATCH 1/4] arm64: head.S: remove unnecessary function alignment Mark Rutland
2014-05-16 13:04   ` Christopher Covington
2014-05-20 16:20   ` Laura Abbott
2014-05-16  9:50 ` [PATCH 2/4] arm64: place initial page tables above the kernel Mark Rutland
2014-05-20 16:21   ` Laura Abbott
2014-05-16  9:50 ` [PATCH 3/4] arm64: export effective Image size to bootloaders Mark Rutland
2014-05-20 14:12   ` Tom Rini
2014-05-20 16:22   ` Laura Abbott
2014-06-16 20:27   ` Geoff Levand [this message]
2014-06-18 16:49     ` Mark Rutland
2014-06-18 18:27       ` Rob Herring
2014-06-18 18:41       ` Geoff Levand
2014-06-19 10:25         ` Mark Rutland
2014-06-19 18:07           ` Geoff Levand
2014-06-20 10:17             ` Mark Rutland
2014-06-18 18:56       ` Kevin Hilman
2014-06-18 23:03       ` [PATCH] arm64: Add byte order to image header Geoff Levand
2014-06-18 23:07         ` [PATCH] arm64: Add new file asm/image.h Geoff Levand
2014-05-16  9:50 ` [PATCH 4/4] arm64: Enable TEXT_OFFSET fuzzing Mark Rutland
2014-05-16 14:06   ` Catalin Marinas
2014-05-16 16:55     ` Mark Rutland
2014-05-20 14:11       ` Tom Rini
2014-05-20 16:08         ` Mark Rutland
2014-05-21 10:18           ` Mark Rutland
2014-05-20 11:31 ` [PATCH 0/4] arm64: simplify restrictions on bootloaders Ian Campbell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1402950432.3708.22.camel@smoke \
    --to=geoff@infradead.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox