[U-Boot] [PATCH v2 1/1] ARM: correct detection of thumb mode

Marek Vasut marex at denx.de
Sun Jun 23 11:07:41 UTC 2019


On 6/23/19 12:59 PM, Heinrich Schuchardt wrote:
> When a crash occurs in thumb mode the crash dump is incorrect. This is due
> to the usage of a non-existing configuration variable CONFIG_ARM_THUMB in
> the definition of macro thumb_mode(regs).
> 
> Use CONFIG_IS_ENABLED(SYS_THUMB_BUILD) to detect that the code has been
> compiled for thumb mode. Remove ARM_THUMB from config_whitelist.txt.
> 
> With the patch crash dumps indicate thumb mode correctly.
> 
> On a system with thumb mode:
> 
> => exception unaligned
> data abort
> pc : [<8f7a2b52>]          lr : [<8f7ab1ef>]
> reloc pc : [<1780cb52>]    lr : [<178151ef>]
> sp : 8ed8c3f8  ip : 8f7a2b4d     fp : 00000002
> r10: 8f7f8228  r9 : 8ed95ea8     r8 : 8ed99488
> r7 : 8f7ab141  r6 : 00000000     r5 : 8ed8c3f9  r4 : 8f7f6390
> r3 : 8ed9948c  r2 : 00000001     r1 : 00000000  r0 : 8f7f6390
> Flags: nzCv  IRQs off  FIQs off  Mode SVC_32 (T)
> Code: 8f7e 466d f105 0501 (e9d5) 6700
> 
> The Flags line has '(T)' and in the Code line the output is in u16 groups.
> 
> On a system without thumb mode:
> 
> => exception breakpoint
> prefetch abort
> pc : [<7ff5a5c8>]          lr : [<7ff675ec>]
> reloc pc : [<0000e5c8>]    lr : [<0001b5ec>]
> sp : 7ee0ad80  ip : 7ff5a5cc     fp : 7ff674cc
> r10: 00000002  r9 : 7ef0bed8     r8 : 7ffd6214
> r7 : 7ef0e080  r6 : 00000000     r5 : 7ffd4090  r4 : 00000000
> r3 : 7ef0e084  r2 : 00000001     r1 : 00000000  r0 : 7ffd4090
> Flags: nzCv  IRQs off  FIQs off  Mode SVC_32
> Code: e1a0500d e2855001 e1c560d0 e3a00001 (e12fff1e)
> 
> The Flags line does not show '(T)' and in the Code line the output is in
> u32 groups.
> 
> Reported-by: Marek Vasut <marex at denx.de>
> Signed-off-by: Heinrich Schuchardt <xypron.glpk at gmx.de>

Reviewed-by: Marek Vasut <marex at denx.de>

> ---
> v2
> 	remove ARM_THUMB from config_whitelist.txt
> 	fix typos in commit message
> ---
>  arch/arm/include/asm/proc-armv/ptrace.h | 2 +-
>  scripts/config_whitelist.txt            | 1 -
>  2 files changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/arch/arm/include/asm/proc-armv/ptrace.h b/arch/arm/include/asm/proc-armv/ptrace.h
> index 183b00a087..e37ad8fd1f 100644
> --- a/arch/arm/include/asm/proc-armv/ptrace.h
> +++ b/arch/arm/include/asm/proc-armv/ptrace.h
> @@ -86,7 +86,7 @@ struct pt_regs {
>  #define user_mode(regs)	\
>  	(((regs)->ARM_cpsr & 0xf) == 0)
> 
> -#ifdef CONFIG_ARM_THUMB
> +#if CONFIG_IS_ENABLED(SYS_THUMB_BUILD)
>  #define thumb_mode(regs) \
>  	(((regs)->ARM_cpsr & T_BIT))
>  #else
> diff --git a/scripts/config_whitelist.txt b/scripts/config_whitelist.txt
> index d252045d80..d6bef69a16 100644
> --- a/scripts/config_whitelist.txt
> +++ b/scripts/config_whitelist.txt
> @@ -61,7 +61,6 @@ CONFIG_ARM_FREQ
>  CONFIG_ARM_GIC_BASE_ADDRESS
>  CONFIG_ARM_PL180_MMCI_BASE
>  CONFIG_ARM_PL180_MMCI_CLOCK_FREQ
> -CONFIG_ARM_THUMB
>  CONFIG_ARP_TIMEOUT
>  CONFIG_ASTRO_COFDMDUOS2
>  CONFIG_ASTRO_TWIN7S2
> --
> 2.20.1
> 


-- 
Best regards,
Marek Vasut


More information about the U-Boot mailing list