ARM: 8314/1: replace PROCINFO embedded branch with relative offset
authorArd Biesheuvel <ard.biesheuvel@linaro.org>
Wed, 18 Mar 2015 06:29:32 +0000 (07:29 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Sat, 28 Mar 2015 15:46:14 +0000 (15:46 +0000)
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 <nico@linaro.org>
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
26 files changed:
arch/arm/kernel/head.S
arch/arm/mm/proc-arm1020.S
arch/arm/mm/proc-arm1020e.S
arch/arm/mm/proc-arm1022.S
arch/arm/mm/proc-arm1026.S
arch/arm/mm/proc-arm720.S
arch/arm/mm/proc-arm740.S
arch/arm/mm/proc-arm7tdmi.S
arch/arm/mm/proc-arm920.S
arch/arm/mm/proc-arm922.S
arch/arm/mm/proc-arm925.S
arch/arm/mm/proc-arm926.S
arch/arm/mm/proc-arm940.S
arch/arm/mm/proc-arm946.S
arch/arm/mm/proc-arm9tdmi.S
arch/arm/mm/proc-fa526.S
arch/arm/mm/proc-feroceon.S
arch/arm/mm/proc-macros.S
arch/arm/mm/proc-mohawk.S
arch/arm/mm/proc-sa110.S
arch/arm/mm/proc-sa1100.S
arch/arm/mm/proc-v6.S
arch/arm/mm/proc-v7.S
arch/arm/mm/proc-v7m.S
arch/arm/mm/proc-xsc3.S
arch/arm/mm/proc-xscale.S

index 01963273c07a7b187be24bb2a4974b9fc826ebcf..3637973a9708bc4f9e8f457b7c04307ca6e2212b 100644 (file)
@@ -138,9 +138,9 @@ ENTRY(stext)
                                                @ mmu has been enabled
        adr     lr, BSYM(1f)                    @ return (PIC) address
        mov     r8, r4                          @ set TTBR1 to swapper_pg_dir
- ARM(  add     pc, r10, #PROCINFO_INITFUNC     )
- THUMB(        add     r12, r10, #PROCINFO_INITFUNC    )
- THUMB(        ret     r12                             )
+       ldr     r12, [r10, #PROCINFO_INITFUNC]
+       add     r12, r12, r10
+       ret     r12
 1:     b       __enable_mmu
 ENDPROC(stext)
        .ltorg
@@ -386,10 +386,10 @@ ENTRY(secondary_startup)
        ldr     r8, [r7, lr]                    @ get secondary_data.swapper_pg_dir
        adr     lr, BSYM(__enable_mmu)          @ return address
        mov     r13, r12                        @ __secondary_switched address
- ARM(  add     pc, r10, #PROCINFO_INITFUNC     ) @ initialise processor
-                                                 @ (return control reg)
THUMB(        add     r12, r10, #PROCINFO_INITFUNC    )
- THUMB(        ret     r12                             )
+       ldr     r12, [r10, #PROCINFO_INITFUNC]
+       add     r12, r12, r10                   @ initialise processor
                                              @ (return control reg)
+       ret     r12
 ENDPROC(secondary_startup)
 ENDPROC(secondary_startup_arm)
 
index 86ee5d47ce3ca7b86f6eff840238f06e93f323c4..aa0519eed6986c9af3b9b560663ea6e7b04f7c1a 100644 (file)
@@ -507,7 +507,7 @@ cpu_arm1020_name:
 
        .align
 
-       .section ".proc.info.init", #alloc, #execinstr
+       .section ".proc.info.init", #alloc
 
        .type   __arm1020_proc_info,#object
 __arm1020_proc_info:
@@ -519,7 +519,7 @@ __arm1020_proc_info:
        .long   PMD_TYPE_SECT | \
                PMD_SECT_AP_WRITE | \
                PMD_SECT_AP_READ
-       b       __arm1020_setup
+       initfn  __arm1020_setup, __arm1020_proc_info
        .long   cpu_arch_name
        .long   cpu_elf_name
        .long   HWCAP_SWP | HWCAP_HALF | HWCAP_THUMB
index a6331d78601f679ae29048577c1f376ac21a99a6..bff4c7f70fd6a992d0587b99f1303a08776988b7 100644 (file)
@@ -465,7 +465,7 @@ arm1020e_crval:
 
        .align
 
-       .section ".proc.info.init", #alloc, #execinstr
+       .section ".proc.info.init", #alloc
 
        .type   __arm1020e_proc_info,#object
 __arm1020e_proc_info:
@@ -479,7 +479,7 @@ __arm1020e_proc_info:
                PMD_BIT4 | \
                PMD_SECT_AP_WRITE | \
                PMD_SECT_AP_READ
-       b       __arm1020e_setup
+       initfn  __arm1020e_setup, __arm1020e_proc_info
        .long   cpu_arch_name
        .long   cpu_elf_name
        .long   HWCAP_SWP | HWCAP_HALF | HWCAP_THUMB | HWCAP_EDSP
index a126b7a5992809c93e911a7c875359b68c591085..dbb2413fe04dbd5babcd7dad8f41820448d518dc 100644 (file)
@@ -448,7 +448,7 @@ arm1022_crval:
 
        .align
 
-       .section ".proc.info.init", #alloc, #execinstr
+       .section ".proc.info.init", #alloc
 
        .type   __arm1022_proc_info,#object
 __arm1022_proc_info:
@@ -462,7 +462,7 @@ __arm1022_proc_info:
                PMD_BIT4 | \
                PMD_SECT_AP_WRITE | \
                PMD_SECT_AP_READ
-       b       __arm1022_setup
+       initfn  __arm1022_setup, __arm1022_proc_info
        .long   cpu_arch_name
        .long   cpu_elf_name
        .long   HWCAP_SWP | HWCAP_HALF | HWCAP_THUMB | HWCAP_EDSP
index fc294067e9776330badad04d7276a9b4d56b2258..0b37b2cef9d32849b0162787ef06c7215814acb2 100644 (file)
@@ -442,7 +442,7 @@ arm1026_crval:
        string  cpu_arm1026_name, "ARM1026EJ-S"
        .align
 
-       .section ".proc.info.init", #alloc, #execinstr
+       .section ".proc.info.init", #alloc
 
        .type   __arm1026_proc_info,#object
 __arm1026_proc_info:
@@ -456,7 +456,7 @@ __arm1026_proc_info:
                PMD_BIT4 | \
                PMD_SECT_AP_WRITE | \
                PMD_SECT_AP_READ
-       b       __arm1026_setup
+       initfn  __arm1026_setup, __arm1026_proc_info
        .long   cpu_arch_name
        .long   cpu_elf_name
        .long   HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP|HWCAP_JAVA
index 2baa66b3ac9b749ee8f8a32f8e16169ada2039c9..3651cd70e4181c6584259b3b19a50729d38dea19 100644 (file)
@@ -186,7 +186,7 @@ arm720_crval:
  * See <asm/procinfo.h> for a definition of this structure.
  */
        
-               .section ".proc.info.init", #alloc, #execinstr
+               .section ".proc.info.init", #alloc
 
 .macro arm720_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, cpu_flush:req
                .type   __\name\()_proc_info,#object
@@ -203,7 +203,7 @@ __\name\()_proc_info:
                        PMD_BIT4 | \
                        PMD_SECT_AP_WRITE | \
                        PMD_SECT_AP_READ
-               b       \cpu_flush                              @ cpu_flush
+               initfn  \cpu_flush, __\name\()_proc_info        @ cpu_flush
                .long   cpu_arch_name                           @ arch_name
                .long   cpu_elf_name                            @ elf_name
                .long   HWCAP_SWP | HWCAP_HALF | HWCAP_THUMB    @ elf_hwcap
index ac1ea6b3bce4c13d4e87e6b14e547849aeb00648..024fb7732407d6c25701e4698843e8b27fb66da1 100644 (file)
@@ -132,14 +132,14 @@ __arm740_setup:
 
        .align
 
-       .section ".proc.info.init", #alloc, #execinstr
+       .section ".proc.info.init", #alloc
        .type   __arm740_proc_info,#object
 __arm740_proc_info:
        .long   0x41807400
        .long   0xfffffff0
        .long   0
        .long   0
-       b       __arm740_setup
+       initfn  __arm740_setup, __arm740_proc_info
        .long   cpu_arch_name
        .long   cpu_elf_name
        .long   HWCAP_SWP | HWCAP_HALF | HWCAP_THUMB | HWCAP_26BIT
index bf6ba4bc30ffb87acd4ddf2d7b83cd710f52f43b..25472d94426d2c8a5f6d56456632b4f2406b9eab 100644 (file)
@@ -76,7 +76,7 @@ __arm7tdmi_setup:
 
                .align
 
-               .section ".proc.info.init", #alloc, #execinstr
+               .section ".proc.info.init", #alloc
 
 .macro arm7tdmi_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, \
        extra_hwcaps=0
@@ -86,7 +86,7 @@ __\name\()_proc_info:
                .long   \cpu_mask
                .long   0
                .long   0
-               b       __arm7tdmi_setup
+               initfn  __arm7tdmi_setup, __\name\()_proc_info
                .long   cpu_arch_name
                .long   cpu_elf_name
                .long   HWCAP_SWP | HWCAP_26BIT | ( \extra_hwcaps )
index 22bf8dde4f84b331a07e740800785791dfb852f9..7a14bd4414c9ca5fdce13b3eedc458ef1fa6f377 100644 (file)
@@ -448,7 +448,7 @@ arm920_crval:
 
        .align
 
-       .section ".proc.info.init", #alloc, #execinstr
+       .section ".proc.info.init", #alloc
 
        .type   __arm920_proc_info,#object
 __arm920_proc_info:
@@ -464,7 +464,7 @@ __arm920_proc_info:
                PMD_BIT4 | \
                PMD_SECT_AP_WRITE | \
                PMD_SECT_AP_READ
-       b       __arm920_setup
+       initfn  __arm920_setup, __arm920_proc_info
        .long   cpu_arch_name
        .long   cpu_elf_name
        .long   HWCAP_SWP | HWCAP_HALF | HWCAP_THUMB
index 0c6d5ac5a6d41b10a8480597056752cc5325a727..edccfcdcd551fe9e9970172d0467d5ddd3324bba 100644 (file)
@@ -426,7 +426,7 @@ arm922_crval:
 
        .align
 
-       .section ".proc.info.init", #alloc, #execinstr
+       .section ".proc.info.init", #alloc
 
        .type   __arm922_proc_info,#object
 __arm922_proc_info:
@@ -442,7 +442,7 @@ __arm922_proc_info:
                PMD_BIT4 | \
                PMD_SECT_AP_WRITE | \
                PMD_SECT_AP_READ
-       b       __arm922_setup
+       initfn  __arm922_setup, __arm922_proc_info
        .long   cpu_arch_name
        .long   cpu_elf_name
        .long   HWCAP_SWP | HWCAP_HALF | HWCAP_THUMB
index c32d073282eabbf7ada03d814ba236e989c23d18..ede8c54ab4aa751d9619b6fec3248cac4255ee40 100644 (file)
@@ -494,7 +494,7 @@ arm925_crval:
 
        .align
 
-       .section ".proc.info.init", #alloc, #execinstr
+       .section ".proc.info.init", #alloc
 
 .macro arm925_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, cache
        .type   __\name\()_proc_info,#object
@@ -510,7 +510,7 @@ __\name\()_proc_info:
                PMD_BIT4 | \
                PMD_SECT_AP_WRITE | \
                PMD_SECT_AP_READ
-       b       __arm925_setup
+       initfn  __arm925_setup, __\name\()_proc_info
        .long   cpu_arch_name
        .long   cpu_elf_name
        .long   HWCAP_SWP | HWCAP_HALF | HWCAP_THUMB
index 252b2503038de72131f84aa79a585111c67e1837..fb827c633693c430b718dcb457f6850d8126d3e6 100644 (file)
@@ -474,7 +474,7 @@ arm926_crval:
 
        .align
 
-       .section ".proc.info.init", #alloc, #execinstr
+       .section ".proc.info.init", #alloc
 
        .type   __arm926_proc_info,#object
 __arm926_proc_info:
@@ -490,7 +490,7 @@ __arm926_proc_info:
                PMD_BIT4 | \
                PMD_SECT_AP_WRITE | \
                PMD_SECT_AP_READ
-       b       __arm926_setup
+       initfn  __arm926_setup, __arm926_proc_info
        .long   cpu_arch_name
        .long   cpu_elf_name
        .long   HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP|HWCAP_JAVA
index e5212d48937723e8fe711aadfba2ade276d2a442..0a0b7a9167b624d951c92364d459eaa7077c39e6 100644 (file)
@@ -354,14 +354,14 @@ __arm940_setup:
 
        .align
 
-       .section ".proc.info.init", #alloc, #execinstr
+       .section ".proc.info.init", #alloc
 
        .type   __arm940_proc_info,#object
 __arm940_proc_info:
        .long   0x41009400
        .long   0xff00fff0
        .long   0
-       b       __arm940_setup
+       initfn  __arm940_setup, __arm940_proc_info
        .long   cpu_arch_name
        .long   cpu_elf_name
        .long   HWCAP_SWP | HWCAP_HALF | HWCAP_THUMB
index b3dd9b2d0b8ea01972bbfa9379fb3c7665ee2611..c85b40d2117ee1ae29420d2980d9c8a2ec000183 100644 (file)
@@ -409,14 +409,14 @@ __arm946_setup:
 
        .align
 
-       .section ".proc.info.init", #alloc, #execinstr
+       .section ".proc.info.init", #alloc
        .type   __arm946_proc_info,#object
 __arm946_proc_info:
        .long   0x41009460
        .long   0xff00fff0
        .long   0
        .long   0
-       b       __arm946_setup
+       initfn  __arm946_setup, __arm946_proc_info
        .long   cpu_arch_name
        .long   cpu_elf_name
        .long   HWCAP_SWP | HWCAP_HALF | HWCAP_THUMB
index 8227322bbb8f86763d1e7039c08797165c223427..7fac8c6121349e03e96bd00694e379c499326e5b 100644 (file)
@@ -70,7 +70,7 @@ __arm9tdmi_setup:
 
                .align
 
-               .section ".proc.info.init", #alloc, #execinstr
+               .section ".proc.info.init", #alloc
 
 .macro arm9tdmi_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req
                .type   __\name\()_proc_info, #object
@@ -79,7 +79,7 @@ __\name\()_proc_info:
                .long   \cpu_mask
                .long   0
                .long   0
-               b       __arm9tdmi_setup
+               initfn  __arm9tdmi_setup, __\name\()_proc_info
                .long   cpu_arch_name
                .long   cpu_elf_name
                .long   HWCAP_SWP | HWCAP_THUMB | HWCAP_26BIT
index c494886892ba0d2a6f1bbff54f50b463fc2afbad..4001b73af4ee15cc722bf929573196cd4aeb4033 100644 (file)
@@ -190,7 +190,7 @@ fa526_cr1_set:
 
        .align
 
-       .section ".proc.info.init", #alloc, #execinstr
+       .section ".proc.info.init", #alloc
 
        .type   __fa526_proc_info,#object
 __fa526_proc_info:
@@ -206,7 +206,7 @@ __fa526_proc_info:
                PMD_BIT4 | \
                PMD_SECT_AP_WRITE | \
                PMD_SECT_AP_READ
-       b       __fa526_setup
+       initfn  __fa526_setup, __fa526_proc_info
        .long   cpu_arch_name
        .long   cpu_elf_name
        .long   HWCAP_SWP | HWCAP_HALF
index 03a1b75f2e1697d1c7fcec7c255767973eb96b3f..e494d6d6acbe8f38f316a586f474d7b7cfc3c0c0 100644 (file)
@@ -584,7 +584,7 @@ feroceon_crval:
 
        .align
 
-       .section ".proc.info.init", #alloc, #execinstr
+       .section ".proc.info.init", #alloc
 
 .macro feroceon_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, cache:req
        .type   __\name\()_proc_info,#object
@@ -601,7 +601,8 @@ __\name\()_proc_info:
                PMD_BIT4 | \
                PMD_SECT_AP_WRITE | \
                PMD_SECT_AP_READ
-       b       __feroceon_setup
+       initfn  __feroceon_setup, __\name\()_proc_info
+       .long __feroceon_setup
        .long   cpu_arch_name
        .long   cpu_elf_name
        .long   HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP
index 082b9f2f7e9001ce0b9ad1f990befec1dafc08d5..0f13b5f9281ecdcdf116d6ec1c589e3fd9474d83 100644 (file)
@@ -331,3 +331,7 @@ ENTRY(\name\()_tlb_fns)
        .globl  \x
        .equ    \x, \y
 .endm
+
+.macro initfn, func, base
+       .long   \func - \base
+.endm
index 53d393455f137685c3b5d65f0510e41810cb0374..d65edf717bf7333d792fee6a0922bde155c0d5bf 100644 (file)
@@ -427,7 +427,7 @@ mohawk_crval:
 
        .align
 
-       .section ".proc.info.init", #alloc, #execinstr
+       .section ".proc.info.init", #alloc
 
        .type   __88sv331x_proc_info,#object
 __88sv331x_proc_info:
@@ -443,7 +443,7 @@ __88sv331x_proc_info:
                PMD_BIT4 | \
                PMD_SECT_AP_WRITE | \
                PMD_SECT_AP_READ
-       b       __mohawk_setup
+       initfn  __mohawk_setup, __88sv331x_proc_info
        .long   cpu_arch_name
        .long   cpu_elf_name
        .long   HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP
index 8008a0461cf530b70adb6d50d02e40094e5dccd4..ee2ce496239f57f14f3638e133a8fbd14e7d2bfa 100644 (file)
@@ -199,7 +199,7 @@ sa110_crval:
 
        .align
 
-       .section ".proc.info.init", #alloc, #execinstr
+       .section ".proc.info.init", #alloc
 
        .type   __sa110_proc_info,#object
 __sa110_proc_info:
@@ -213,7 +213,7 @@ __sa110_proc_info:
        .long   PMD_TYPE_SECT | \
                PMD_SECT_AP_WRITE | \
                PMD_SECT_AP_READ
-       b       __sa110_setup
+       initfn  __sa110_setup, __sa110_proc_info
        .long   cpu_arch_name
        .long   cpu_elf_name
        .long   HWCAP_SWP | HWCAP_HALF | HWCAP_26BIT | HWCAP_FAST_MULT
index 89f97ac648a9d55d79c6668fb3ea43f492d307e9..222d5836f6664467fb5a5c6d18bc6240ba700593 100644 (file)
@@ -242,7 +242,7 @@ sa1100_crval:
 
        .align
 
-       .section ".proc.info.init", #alloc, #execinstr
+       .section ".proc.info.init", #alloc
 
 .macro sa1100_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req
        .type   __\name\()_proc_info,#object
@@ -257,7 +257,7 @@ __\name\()_proc_info:
        .long   PMD_TYPE_SECT | \
                PMD_SECT_AP_WRITE | \
                PMD_SECT_AP_READ
-       b       __sa1100_setup
+       initfn  __sa1100_setup, __\name\()_proc_info
        .long   cpu_arch_name
        .long   cpu_elf_name
        .long   HWCAP_SWP | HWCAP_HALF | HWCAP_26BIT | HWCAP_FAST_MULT
index d0390f4b3f1893b152ee2dcea17f60e4031e279d..06d890a2342b1600e2eae6e350994ad59f5c3a08 100644 (file)
@@ -264,7 +264,7 @@ v6_crval:
        string  cpu_elf_name, "v6"
        .align
 
-       .section ".proc.info.init", #alloc, #execinstr
+       .section ".proc.info.init", #alloc
 
        /*
         * Match any ARMv6 processor core.
@@ -287,7 +287,7 @@ __v6_proc_info:
                PMD_SECT_XN | \
                PMD_SECT_AP_WRITE | \
                PMD_SECT_AP_READ
-       b       __v6_setup
+       initfn  __v6_setup, __v6_proc_info
        .long   cpu_arch_name
        .long   cpu_elf_name
        /* See also feat_v6_fixup() for HWCAP_TLS */
index 8b4ee5e81c146c1aaeafb79560c3af4d8a647f6a..6bdaa4cc17842dfc012717b96cd8791be3c7b254 100644 (file)
@@ -462,19 +462,19 @@ __v7_setup_stack:
        string  cpu_elf_name, "v7"
        .align
 
-       .section ".proc.info.init", #alloc, #execinstr
+       .section ".proc.info.init", #alloc
 
        /*
         * Standard v7 proc info content
         */
-.macro __v7_proc initfunc, mm_mmuflags = 0, io_mmuflags = 0, hwcaps = 0, proc_fns = v7_processor_functions
+.macro __v7_proc name, initfunc, mm_mmuflags = 0, io_mmuflags = 0, hwcaps = 0, proc_fns = v7_processor_functions
        ALT_SMP(.long   PMD_TYPE_SECT | PMD_SECT_AP_WRITE | PMD_SECT_AP_READ | \
                        PMD_SECT_AF | PMD_FLAGS_SMP | \mm_mmuflags)
        ALT_UP(.long    PMD_TYPE_SECT | PMD_SECT_AP_WRITE | PMD_SECT_AP_READ | \
                        PMD_SECT_AF | PMD_FLAGS_UP | \mm_mmuflags)
        .long   PMD_TYPE_SECT | PMD_SECT_AP_WRITE | \
                PMD_SECT_AP_READ | PMD_SECT_AF | \io_mmuflags
-       W(b)    \initfunc
+       initfn  \initfunc, \name
        .long   cpu_arch_name
        .long   cpu_elf_name
        .long   HWCAP_SWP | HWCAP_HALF | HWCAP_THUMB | HWCAP_FAST_MULT | \
@@ -494,7 +494,7 @@ __v7_setup_stack:
 __v7_ca5mp_proc_info:
        .long   0x410fc050
        .long   0xff0ffff0
-       __v7_proc __v7_ca5mp_setup
+       __v7_proc __v7_ca5mp_proc_info, __v7_ca5mp_setup
        .size   __v7_ca5mp_proc_info, . - __v7_ca5mp_proc_info
 
        /*
@@ -504,7 +504,7 @@ __v7_ca5mp_proc_info:
 __v7_ca9mp_proc_info:
        .long   0x410fc090
        .long   0xff0ffff0
-       __v7_proc __v7_ca9mp_setup, proc_fns = ca9mp_processor_functions
+       __v7_proc __v7_ca9mp_proc_info, __v7_ca9mp_setup, proc_fns = ca9mp_processor_functions
        .size   __v7_ca9mp_proc_info, . - __v7_ca9mp_proc_info
 
 #endif /* CONFIG_ARM_LPAE */
@@ -517,7 +517,7 @@ __v7_ca9mp_proc_info:
 __v7_pj4b_proc_info:
        .long   0x560f5800
        .long   0xff0fff00
-       __v7_proc __v7_pj4b_setup, proc_fns = pj4b_processor_functions
+       __v7_proc __v7_pj4b_proc_info, __v7_pj4b_setup, proc_fns = pj4b_processor_functions
        .size   __v7_pj4b_proc_info, . - __v7_pj4b_proc_info
 #endif
 
@@ -528,7 +528,7 @@ __v7_pj4b_proc_info:
 __v7_cr7mp_proc_info:
        .long   0x410fc170
        .long   0xff0ffff0
-       __v7_proc __v7_cr7mp_setup
+       __v7_proc __v7_cr7mp_proc_info, __v7_cr7mp_setup
        .size   __v7_cr7mp_proc_info, . - __v7_cr7mp_proc_info
 
        /*
@@ -538,7 +538,7 @@ __v7_cr7mp_proc_info:
 __v7_ca7mp_proc_info:
        .long   0x410fc070
        .long   0xff0ffff0
-       __v7_proc __v7_ca7mp_setup
+       __v7_proc __v7_ca7mp_proc_info, __v7_ca7mp_setup
        .size   __v7_ca7mp_proc_info, . - __v7_ca7mp_proc_info
 
        /*
@@ -548,7 +548,7 @@ __v7_ca7mp_proc_info:
 __v7_ca12mp_proc_info:
        .long   0x410fc0d0
        .long   0xff0ffff0
-       __v7_proc __v7_ca12mp_setup
+       __v7_proc __v7_ca12mp_proc_info, __v7_ca12mp_setup
        .size   __v7_ca12mp_proc_info, . - __v7_ca12mp_proc_info
 
        /*
@@ -558,7 +558,7 @@ __v7_ca12mp_proc_info:
 __v7_ca15mp_proc_info:
        .long   0x410fc0f0
        .long   0xff0ffff0
-       __v7_proc __v7_ca15mp_setup
+       __v7_proc __v7_ca15mp_proc_info, __v7_ca15mp_setup
        .size   __v7_ca15mp_proc_info, . - __v7_ca15mp_proc_info
 
        /*
@@ -568,7 +568,7 @@ __v7_ca15mp_proc_info:
 __v7_b15mp_proc_info:
        .long   0x420f00f0
        .long   0xff0ffff0
-       __v7_proc __v7_b15mp_setup
+       __v7_proc __v7_b15mp_proc_info, __v7_b15mp_setup
        .size   __v7_b15mp_proc_info, . - __v7_b15mp_proc_info
 
        /*
@@ -578,7 +578,7 @@ __v7_b15mp_proc_info:
 __v7_ca17mp_proc_info:
        .long   0x410fc0e0
        .long   0xff0ffff0
-       __v7_proc __v7_ca17mp_setup
+       __v7_proc __v7_ca17mp_proc_info, __v7_ca17mp_setup
        .size   __v7_ca17mp_proc_info, . - __v7_ca17mp_proc_info
 
        /*
@@ -594,7 +594,7 @@ __krait_proc_info:
         * do support them. They also don't indicate support for fused multiply
         * instructions even though they actually do support them.
         */
-       __v7_proc __v7_setup, hwcaps = HWCAP_IDIV | HWCAP_VFPv4
+       __v7_proc __krait_proc_info, __v7_setup, hwcaps = HWCAP_IDIV | HWCAP_VFPv4
        .size   __krait_proc_info, . - __krait_proc_info
 
        /*
@@ -604,5 +604,5 @@ __krait_proc_info:
 __v7_proc_info:
        .long   0x000f0000              @ Required ID value
        .long   0x000f0000              @ Mask for ID
-       __v7_proc __v7_setup
+       __v7_proc __v7_proc_info, __v7_setup
        .size   __v7_proc_info, . - __v7_proc_info
index d1e68b553d3b4e6cfbae0d003be88e9786c7e3bc..e08e1f2bab76bad4926ecb4b02bbd91149e7d0a3 100644 (file)
@@ -135,7 +135,7 @@ __v7m_setup_stack_top:
        string cpu_elf_name "v7m"
        string cpu_v7m_name "ARMv7-M"
 
-       .section ".proc.info.init", #alloc, #execinstr
+       .section ".proc.info.init", #alloc
 
        /*
         * Match any ARMv7-M processor core.
@@ -146,7 +146,7 @@ __v7m_proc_info:
        .long   0x000f0000              @ Mask for ID
        .long   0                       @ proc_info_list.__cpu_mm_mmu_flags
        .long   0                       @ proc_info_list.__cpu_io_mmu_flags
-       b       __v7m_setup             @ proc_info_list.__cpu_flush
+       initfn  __v7m_setup, __v7m_proc_info    @ proc_info_list.__cpu_flush
        .long   cpu_arch_name
        .long   cpu_elf_name
        .long   HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT
index f8acdfece0363bb02516705af407fff89287b0b7..293dcc2c441f305f7b28d67dbf27a2276fdf2c25 100644 (file)
@@ -499,7 +499,7 @@ xsc3_crval:
 
        .align
 
-       .section ".proc.info.init", #alloc, #execinstr
+       .section ".proc.info.init", #alloc
 
 .macro xsc3_proc_info name:req, cpu_val:req, cpu_mask:req
        .type   __\name\()_proc_info,#object
@@ -514,7 +514,7 @@ __\name\()_proc_info:
        .long   PMD_TYPE_SECT | \
                PMD_SECT_AP_WRITE | \
                PMD_SECT_AP_READ
-       b       __xsc3_setup
+       initfn  __xsc3_setup, __\name\()_proc_info
        .long   cpu_arch_name
        .long   cpu_elf_name
        .long   HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP
index afa2b3c4df4a267e5a609c13e6e7d6461be85616..b6bbfdb6dfdc3d1681a562ef4eb96f95d33d6b03 100644 (file)
@@ -612,7 +612,7 @@ xscale_crval:
 
        .align
 
-       .section ".proc.info.init", #alloc, #execinstr
+       .section ".proc.info.init", #alloc
 
 .macro xscale_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, cache
        .type   __\name\()_proc_info,#object
@@ -627,7 +627,7 @@ __\name\()_proc_info:
        .long   PMD_TYPE_SECT | \
                PMD_SECT_AP_WRITE | \
                PMD_SECT_AP_READ
-       b       __xscale_setup
+       initfn  __xscale_setup, __\name\()_proc_info
        .long   cpu_arch_name
        .long   cpu_elf_name
        .long   HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP