linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] ARM: s5pv310: Correct data alignment in headsmp.S for CONFIG_THUMB2_KERNEL
@ 2010-11-16 13:14 Dave Martin
  2010-11-25  0:07 ` Kukjin Kim
  0 siblings, 1 reply; 2+ messages in thread
From: Dave Martin @ 2010-11-16 13:14 UTC (permalink / raw)
  To: linux-arm-kernel

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@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
-- 
1.7.1

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* [PATCH] ARM: s5pv310: Correct data alignment in headsmp.S for CONFIG_THUMB2_KERNEL
  2010-11-16 13:14 [PATCH] ARM: s5pv310: Correct data alignment in headsmp.S for CONFIG_THUMB2_KERNEL Dave Martin
@ 2010-11-25  0:07 ` Kukjin Kim
  0 siblings, 0 replies; 2+ messages in thread
From: Kukjin Kim @ 2010-11-25  0:07 UTC (permalink / raw)
  To: linux-arm-kernel

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@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@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

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2010-11-25  0:07 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-11-16 13:14 [PATCH] ARM: s5pv310: Correct data alignment in headsmp.S for CONFIG_THUMB2_KERNEL Dave Martin
2010-11-25  0:07 ` Kukjin Kim

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).