Skip to content

Commit bf35706

Browse files
Ard BiesheuvelRussell King
authored andcommitted
ARM: 8314/1: replace PROCINFO embedded branch with relative offset
This patch replaces the 'branch to setup()' instructions embedded in the PROCINFO structs with the offset to that setup function relative to the base of the struct. This preserves the position independent nature of that field, but uses a data item rather than an instruction. This is mainly done to prevent linker failures on large kernels, where the setup function is out of reach for the branch. Acked-by: Nicolas Pitre <[email protected]> Signed-off-by: Ard Biesheuvel <[email protected]> Signed-off-by: Russell King <[email protected]>
1 parent 0a6a78b commit bf35706

26 files changed

+72
-67
lines changed

arch/arm/kernel/head.S

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -138,9 +138,9 @@ ENTRY(stext)
138138
@ mmu has been enabled
139139
adr lr, BSYM(1f) @ return (PIC) address
140140
mov r8, r4 @ set TTBR1 to swapper_pg_dir
141-
ARM( add pc, r10, #PROCINFO_INITFUNC )
142-
THUMB( add r12, r10, #PROCINFO_INITFUNC )
143-
THUMB( ret r12 )
141+
ldr r12, [r10, #PROCINFO_INITFUNC]
142+
add r12, r12, r10
143+
ret r12
144144
1: b __enable_mmu
145145
ENDPROC(stext)
146146
.ltorg
@@ -386,10 +386,10 @@ ENTRY(secondary_startup)
386386
ldr r8, [r7, lr] @ get secondary_data.swapper_pg_dir
387387
adr lr, BSYM(__enable_mmu) @ return address
388388
mov r13, r12 @ __secondary_switched address
389-
ARM( add pc, r10, #PROCINFO_INITFUNC ) @ initialise processor
390-
@ (return control reg)
391-
THUMB( add r12, r10, #PROCINFO_INITFUNC )
392-
THUMB( ret r12 )
389+
ldr r12, [r10, #PROCINFO_INITFUNC]
390+
add r12, r12, r10 @ initialise processor
391+
@ (return control reg)
392+
ret r12
393393
ENDPROC(secondary_startup)
394394
ENDPROC(secondary_startup_arm)
395395

arch/arm/mm/proc-arm1020.S

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -507,7 +507,7 @@ cpu_arm1020_name:
507507

508508
.align
509509

510-
.section ".proc.info.init", #alloc, #execinstr
510+
.section ".proc.info.init", #alloc
511511

512512
.type __arm1020_proc_info,#object
513513
__arm1020_proc_info:
@@ -519,7 +519,7 @@ __arm1020_proc_info:
519519
.long PMD_TYPE_SECT | \
520520
PMD_SECT_AP_WRITE | \
521521
PMD_SECT_AP_READ
522-
b __arm1020_setup
522+
initfn __arm1020_setup, __arm1020_proc_info
523523
.long cpu_arch_name
524524
.long cpu_elf_name
525525
.long HWCAP_SWP | HWCAP_HALF | HWCAP_THUMB

arch/arm/mm/proc-arm1020e.S

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -465,7 +465,7 @@ arm1020e_crval:
465465

466466
.align
467467

468-
.section ".proc.info.init", #alloc, #execinstr
468+
.section ".proc.info.init", #alloc
469469

470470
.type __arm1020e_proc_info,#object
471471
__arm1020e_proc_info:
@@ -479,7 +479,7 @@ __arm1020e_proc_info:
479479
PMD_BIT4 | \
480480
PMD_SECT_AP_WRITE | \
481481
PMD_SECT_AP_READ
482-
b __arm1020e_setup
482+
initfn __arm1020e_setup, __arm1020e_proc_info
483483
.long cpu_arch_name
484484
.long cpu_elf_name
485485
.long HWCAP_SWP | HWCAP_HALF | HWCAP_THUMB | HWCAP_EDSP

arch/arm/mm/proc-arm1022.S

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -448,7 +448,7 @@ arm1022_crval:
448448

449449
.align
450450

451-
.section ".proc.info.init", #alloc, #execinstr
451+
.section ".proc.info.init", #alloc
452452

453453
.type __arm1022_proc_info,#object
454454
__arm1022_proc_info:
@@ -462,7 +462,7 @@ __arm1022_proc_info:
462462
PMD_BIT4 | \
463463
PMD_SECT_AP_WRITE | \
464464
PMD_SECT_AP_READ
465-
b __arm1022_setup
465+
initfn __arm1022_setup, __arm1022_proc_info
466466
.long cpu_arch_name
467467
.long cpu_elf_name
468468
.long HWCAP_SWP | HWCAP_HALF | HWCAP_THUMB | HWCAP_EDSP

arch/arm/mm/proc-arm1026.S

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -442,7 +442,7 @@ arm1026_crval:
442442
string cpu_arm1026_name, "ARM1026EJ-S"
443443
.align
444444

445-
.section ".proc.info.init", #alloc, #execinstr
445+
.section ".proc.info.init", #alloc
446446

447447
.type __arm1026_proc_info,#object
448448
__arm1026_proc_info:
@@ -456,7 +456,7 @@ __arm1026_proc_info:
456456
PMD_BIT4 | \
457457
PMD_SECT_AP_WRITE | \
458458
PMD_SECT_AP_READ
459-
b __arm1026_setup
459+
initfn __arm1026_setup, __arm1026_proc_info
460460
.long cpu_arch_name
461461
.long cpu_elf_name
462462
.long HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP|HWCAP_JAVA

arch/arm/mm/proc-arm720.S

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ arm720_crval:
186186
* See <asm/procinfo.h> for a definition of this structure.
187187
*/
188188
189-
.section ".proc.info.init", #alloc, #execinstr
189+
.section ".proc.info.init", #alloc
190190

191191
.macro arm720_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, cpu_flush:req
192192
.type __\name\()_proc_info,#object
@@ -203,7 +203,7 @@ __\name\()_proc_info:
203203
PMD_BIT4 | \
204204
PMD_SECT_AP_WRITE | \
205205
PMD_SECT_AP_READ
206-
b \cpu_flush @ cpu_flush
206+
initfn \cpu_flush, __\name\()_proc_info @ cpu_flush
207207
.long cpu_arch_name @ arch_name
208208
.long cpu_elf_name @ elf_name
209209
.long HWCAP_SWP | HWCAP_HALF | HWCAP_THUMB @ elf_hwcap

arch/arm/mm/proc-arm740.S

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,14 +132,14 @@ __arm740_setup:
132132

133133
.align
134134

135-
.section ".proc.info.init", #alloc, #execinstr
135+
.section ".proc.info.init", #alloc
136136
.type __arm740_proc_info,#object
137137
__arm740_proc_info:
138138
.long 0x41807400
139139
.long 0xfffffff0
140140
.long 0
141141
.long 0
142-
b __arm740_setup
142+
initfn __arm740_setup, __arm740_proc_info
143143
.long cpu_arch_name
144144
.long cpu_elf_name
145145
.long HWCAP_SWP | HWCAP_HALF | HWCAP_THUMB | HWCAP_26BIT

arch/arm/mm/proc-arm7tdmi.S

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ __arm7tdmi_setup:
7676

7777
.align
7878

79-
.section ".proc.info.init", #alloc, #execinstr
79+
.section ".proc.info.init", #alloc
8080

8181
.macro arm7tdmi_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, \
8282
extra_hwcaps=0
@@ -86,7 +86,7 @@ __\name\()_proc_info:
8686
.long \cpu_mask
8787
.long 0
8888
.long 0
89-
b __arm7tdmi_setup
89+
initfn __arm7tdmi_setup, __\name\()_proc_info
9090
.long cpu_arch_name
9191
.long cpu_elf_name
9292
.long HWCAP_SWP | HWCAP_26BIT | ( \extra_hwcaps )

arch/arm/mm/proc-arm920.S

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -448,7 +448,7 @@ arm920_crval:
448448

449449
.align
450450

451-
.section ".proc.info.init", #alloc, #execinstr
451+
.section ".proc.info.init", #alloc
452452

453453
.type __arm920_proc_info,#object
454454
__arm920_proc_info:
@@ -464,7 +464,7 @@ __arm920_proc_info:
464464
PMD_BIT4 | \
465465
PMD_SECT_AP_WRITE | \
466466
PMD_SECT_AP_READ
467-
b __arm920_setup
467+
initfn __arm920_setup, __arm920_proc_info
468468
.long cpu_arch_name
469469
.long cpu_elf_name
470470
.long HWCAP_SWP | HWCAP_HALF | HWCAP_THUMB

arch/arm/mm/proc-arm922.S

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -426,7 +426,7 @@ arm922_crval:
426426

427427
.align
428428

429-
.section ".proc.info.init", #alloc, #execinstr
429+
.section ".proc.info.init", #alloc
430430

431431
.type __arm922_proc_info,#object
432432
__arm922_proc_info:
@@ -442,7 +442,7 @@ __arm922_proc_info:
442442
PMD_BIT4 | \
443443
PMD_SECT_AP_WRITE | \
444444
PMD_SECT_AP_READ
445-
b __arm922_setup
445+
initfn __arm922_setup, __arm922_proc_info
446446
.long cpu_arch_name
447447
.long cpu_elf_name
448448
.long HWCAP_SWP | HWCAP_HALF | HWCAP_THUMB

0 commit comments

Comments
 (0)