[PATCH] ARM: s5pv310: Correct data alignment in headsmp.S for CONFIG_THUMB2_KERNEL
Kukjin Kim
kgene.kim at samsung.com
Wed Nov 24 19:07:18 EST 2010
Dave Martin wrote:
>
> Directives such as .long and .word do not magically cause the
> assembler location counter to become aligned in gas. As a
> result, using these directives in code sections can result in
> misaligned data words when building a Thumb-2 kernel
> (CONFIG_THUMB2_KERNEL).
>
> This is a Bad Thing, since the ABI permits the compiler to
> assume that fundamental types of word size or above are word-
> aligned when accessing them from C. If the data is not really
> word-aligned, this can cause impaired performance and stray
> alignment faults in some circumstances.
>
> In general, the following rules should be applied when using
> data word declaration directives inside code sections:
>
> * .quad and .double:
> .align 3
>
> * .long, .word, .single, .float:
> .align (or .align 2)
>
> * .short:
> No explicit alignment required, since Thumb-2
> instructions are always 2 or 4 bytes in size.
> immediately after an instruction.
>
> Applies cleanly on v2.6.37-rc1.
>
> Signed-off-by: Dave Martin <dave.martin at linaro.org>
> ---
> arch/arm/mach-s5pv310/headsmp.S | 1 +
> 1 files changed, 1 insertions(+), 0 deletions(-)
>
> diff --git a/arch/arm/mach-s5pv310/headsmp.S b/arch/arm/mach-
> s5pv310/headsmp.S
> index 164b7b0..65f8574 100644
> --- a/arch/arm/mach-s5pv310/headsmp.S
> +++ b/arch/arm/mach-s5pv310/headsmp.S
> @@ -37,5 +37,6 @@ pen: ldr r7, [r6]
> */
> b secondary_startup
>
> + .align
> 1: .long .
> .long pen_release
> --
Hi Dave,
Following is from Mr. Suh who is my team member.
Please refer to that.
Thanks.
Best regards,
Kgene.
--
Kukjin Kim <kgene.kim at samsung.com>, Senior Engineer,
SW Solution Development Team, Samsung Electronics Co., Ltd.
---
Dear Mr. Martin,
As far as I know, gas adds padding data not to generate misaligned data.
In your word, gas cannot give any additional treat on assembly code.
There is a mismatch.
Can you give me more comments?
When I make mis-aligned data like below, gas automatically gives pad.
During test, I use gcc and gas from Linaro for Ubuntu.
gcc version 4.5.1 (Ubuntu/Linaro 4.5.1-7ubuntu1)
GNU assembler version 2.20.51 (arm-linux-gnueabi) using BFD version (GNU
Binutils for Ubuntu) 2.20.51.20100908
BRs,
Suh.
modified source to test:
ENTRY(s5pv310_secondary_startup)
mrc p15, 0, r0, c0, c0, 5
and r0, r0, #15
adr r4, 1f
ldmia r4, {r5, r6}
sub r4, r4, r5
add r6, r6, r4
pen: ldr r7, [r6]
cmp r7, r0
bne pen
/*
* we've been released from the holding pen: secondary_stack
* should now contain the SVC stack for this core
*/
b secondary_startup
nop
1: .long .
.long pen_release
disassembled data:
8000c832 <pen>:
8000c832: 6837 ldr r7, [r6, #0]
8000c834: 4287 cmp r7, r0
8000c836: d1fc bne.n 8000c832 <pen>
8000c838: f7fb bc00 b.w 8000803c <__bss_stop+0xffc3753c>
8000c83c: bf00 nop
8000c83e: c83e .short 0xc83e
8000c840: 36208000 .word 0x36208000
8000c844: bf008039 .word 0xbf008039
More information about the linux-arm-kernel
mailing list