Skip to content

Commit

Permalink
ARM: align .data section
Browse files Browse the repository at this point in the history
Robert Jarzmik reports that his PXA25x system fails to boot with 4.12,
failing at __flush_whole_cache in arch/arm/mm/proc-xscale.S:215:

   0xc0019e20 <+0>:     ldr     r1, [pc, #788]
   0xc0019e24 <+4>:     ldr     r0, [r1]	<== here

with r1 containing 0xc06f82cd, which is the address of "clean_addr".
Examination of the System.map shows:

c06f22c8 D user_pmd_table
c06f22cc d __warned.19178
c06f22cd d clean_addr

indicating that a .data.unlikely section has appeared just before the
.data section from proc-xscale.S.  According to objdump -h, it appears
that our assembly files default their .data alignment to 2**0, which
is bad news if the preceding .data section size is not power-of-2
aligned at link time.

Add the appropriate .align directives to all assembly files in arch/arm
that are missing them where we require an appropriate alignment.

Reported-by: Robert Jarzmik <robert.jarzmik@free.fr>
Tested-by: Robert Jarzmik <robert.jarzmik@free.fr>
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
  • Loading branch information
Russell King committed Aug 14, 2017
1 parent ce184a0 commit 1abd350
Show file tree
Hide file tree
Showing 13 changed files with 17 additions and 1 deletion.
1 change: 1 addition & 0 deletions arch/arm/include/debug/omap2plus.S
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@
#define UART_OFFSET(addr) ((addr) & 0x00ffffff)

.pushsection .data
.align 2
omap_uart_phys: .word 0
omap_uart_virt: .word 0
omap_uart_lsr: .word 0
Expand Down
2 changes: 2 additions & 0 deletions arch/arm/kernel/entry-armv.S
Original file line number Diff line number Diff line change
Expand Up @@ -721,6 +721,7 @@ do_fpe:
*/

.pushsection .data
.align 2
ENTRY(fp_enter)
.word no_fp
.popsection
Expand Down Expand Up @@ -1221,6 +1222,7 @@ vector_addrexcptn:
W(b) vector_fiq

.data
.align 2

.globl cr_alignment
cr_alignment:
Expand Down
2 changes: 2 additions & 0 deletions arch/arm/kernel/head.S
Original file line number Diff line number Diff line change
Expand Up @@ -556,6 +556,7 @@ ENDPROC(__fixup_smp)
.word __smpalt_end

.pushsection .data
.align 2
.globl smp_on_up
smp_on_up:
ALT_SMP(.long 1)
Expand Down Expand Up @@ -716,6 +717,7 @@ ENTRY(fixup_pv_table)
ENDPROC(fixup_pv_table)

.data
.align 2
.globl __pv_phys_pfn_offset
.type __pv_phys_pfn_offset, %object
__pv_phys_pfn_offset:
Expand Down
1 change: 1 addition & 0 deletions arch/arm/kernel/hyp-stub.S
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
* zeroing of .bss would clobber it.
*/
.data
.align 2
ENTRY(__boot_cpu_mode)
.long 0
.text
Expand Down
1 change: 1 addition & 0 deletions arch/arm/kernel/iwmmxt.S
Original file line number Diff line number Diff line change
Expand Up @@ -367,6 +367,7 @@ ENTRY(iwmmxt_task_release)
ENDPROC(iwmmxt_task_release)

.data
.align 2
concan_owner:
.word 0

1 change: 1 addition & 0 deletions arch/arm/kernel/sleep.S
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,7 @@ mpidr_hash_ptr:
.long mpidr_hash - . @ mpidr_hash struct offset

.data
.align 2
.type sleep_save_sp, #object
ENTRY(sleep_save_sp)
.space SLEEP_SAVE_SP_SZ @ struct sleep_save_sp
1 change: 1 addition & 0 deletions arch/arm/mach-exynos/sleep.S
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,7 @@ _cp15_save_diag:
#endif /* CONFIG_CACHE_L2X0 */

.data
.align 2
.globl cp15_save_diag
cp15_save_diag:
.long 0 @ cp15 diagnostic
Expand Down
2 changes: 2 additions & 0 deletions arch/arm/mach-omap2/sleep34xx.S
Original file line number Diff line number Diff line change
Expand Up @@ -530,10 +530,12 @@ l2dis_3630_offset:
.long l2dis_3630 - .

.data
.align 2
l2dis_3630:
.word 0

.data
.align 2
l2_inv_api_params:
.word 0x1, 0x00

Expand Down
1 change: 1 addition & 0 deletions arch/arm/mach-omap2/sleep44xx.S
Original file line number Diff line number Diff line change
Expand Up @@ -385,6 +385,7 @@ ppa_zero_params_offset:
ENDPROC(omap_do_wfi)

.data
.align 2
ppa_zero_params:
.word 0

Expand Down
2 changes: 2 additions & 0 deletions arch/arm/mach-pxa/mioa701_bootresume.S
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
* insist on it to be truly read-only.
*/
.data
.align 2
ENTRY(mioa701_bootstrap)
0:
b 1f
Expand All @@ -34,4 +35,5 @@ ENTRY(mioa701_jumpaddr)

ENTRY(mioa701_bootstrap_lg)
.data
.align 2
.word 2b-0b
2 changes: 1 addition & 1 deletion arch/arm/mach-rockchip/sleep.S
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
* ddr to sram for system resumeing.
* so it is ".data section".
*/
.align
.align 2

ENTRY(rockchip_slp_cpu_resume)
setmode PSR_I_BIT | PSR_F_BIT | SVC_MODE, r1 @ set svc, irqs off
Expand Down
1 change: 1 addition & 0 deletions arch/arm/mm/cache-v4wb.S
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
#define CACHE_DLIMIT (CACHE_DSIZE * 4)

.data
.align 2
flush_base:
.long FLUSH_BASE
.text
Expand Down
1 change: 1 addition & 0 deletions arch/arm/mm/proc-xscale.S
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@
.endm

.data
.align 2
clean_addr: .word CLEAN_ADDR

.text
Expand Down

0 comments on commit 1abd350

Please sign in to comment.