2015-11-03 17:35:14

by Lada Trimasova

[permalink] [raw]
Subject: [PATCH] Arc: fix entry point calculation for locales other than english

The problem was detected while making uImage.
To find the line with entry point address in the result
of the "readelf -h vmlinux" command "grep ENTRY POINT" is used.

But if the operating system locale is not english,
command readelf returns lines in local language.

Grep cannot find the line which contains "ENTRY POINT" in english.
Our decision uses readelf key which displays the symbol table.
Using grep _stext it finds the line with entry point in this table.

Signed-off-by: Lada Trimasova <[email protected]>
Cc: Vineet Gupta <[email protected]>
Cc: Alexey Brodkin <[email protected]>
---
arch/arc/boot/Makefile | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/arch/arc/boot/Makefile b/arch/arc/boot/Makefile
index e597cb34..fa89a47 100644
--- a/arch/arc/boot/Makefile
+++ b/arch/arc/boot/Makefile
@@ -6,8 +6,7 @@ targets := vmlinux.bin vmlinux.bin.gz uImage

OBJCOPYFLAGS= -O binary -R .note -R .note.gnu.build-id -R .comment -S

-LINUX_START_TEXT = $$(readelf -h vmlinux | \
- grep "Entry point address" | grep -o 0x.*)
+LINUX_START_TEXT = $$(readelf -s vmlinux | grep _stext | awk '{print $$2}')

UIMAGE_LOADADDR = $(CONFIG_LINUX_LINK_BASE)
UIMAGE_ENTRYADDR = $(LINUX_START_TEXT)
--
1.9.1


2015-11-04 11:58:29

by Vineet Gupta

[permalink] [raw]
Subject: Re: [PATCH] Arc: fix entry point calculation for locales other than english

On Tuesday 03 November 2015 11:04 PM, Lada Trimasova wrote:
> The problem was detected while making uImage.
> To find the line with entry point address in the result
> of the "readelf -h vmlinux" command "grep ENTRY POINT" is used.
>
> But if the operating system locale is not english,
> command readelf returns lines in local language.
>
> Grep cannot find the line which contains "ENTRY POINT" in english.
> Our decision uses readelf key which displays the symbol table.
> Using grep _stext it finds the line with entry point in this table.
>
> Signed-off-by: Lada Trimasova <[email protected]>
> Cc: Vineet Gupta <[email protected]>
> Cc: Alexey Brodkin <[email protected]>
> ---
> arch/arc/boot/Makefile | 3 +--
> 1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/arch/arc/boot/Makefile b/arch/arc/boot/Makefile
> index e597cb34..fa89a47 100644
> --- a/arch/arc/boot/Makefile
> +++ b/arch/arc/boot/Makefile
> @@ -6,8 +6,7 @@ targets := vmlinux.bin vmlinux.bin.gz uImage
>
> OBJCOPYFLAGS= -O binary -R .note -R .note.gnu.build-id -R .comment -S
>
> -LINUX_START_TEXT = $$(readelf -h vmlinux | \
> - grep "Entry point address" | grep -o 0x.*)
> +LINUX_START_TEXT = $$(readelf -s vmlinux | grep _stext | awk '{print $$2}')


This seems too fragile. You are assuming _stext will be the entry point which I
recently changed and merged in Linux tree for 4.4-rc1.

See commit 3971cdc202f638f252e39316d42492ace04cc1b1
"ARC: boot: Support Halt-on-reset and Run-on-reset SMP booting modes"

And even if we change ur patch to use re_Service, it is still not future proof. We
need to somehow rely on elf header for this !

I do see your problem but lets us see how other arches do it !

>
> UIMAGE_LOADADDR = $(CONFIG_LINUX_LINK_BASE)
> UIMAGE_ENTRYADDR = $(LINUX_START_TEXT)
>