Blackfin: fix relocation errors with large initramfs images
authorJie Zhang <jie.zhang@analog.com>
Tue, 5 Jan 2010 04:22:33 +0000 (04:22 +0000)
committerMike Frysinger <vapier@gentoo.org>
Tue, 9 Mar 2010 05:30:48 +0000 (00:30 -0500)
Since we are now discarding .exit.text at runtime instead of link time, we
need to place all .text sections ahead of the .data sections.  Otherwise,
a really large attached initramfs may cause link errors as it pushes the
PC relative relocations behind the limits of the Blackfin ISA (~16meg).
The instructions in the .exit.text are unable to call back into the .text
sections leading to a link failure.

Signed-off-by: Jie Zhang <jie.zhang@analog.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
arch/blackfin/kernel/vmlinux.lds.S

index 66799e7..be4b1bb 100644 (file)
@@ -104,18 +104,21 @@ SECTIONS
        ___init_begin = .;
 
        INIT_TEXT_SECTION(PAGE_SIZE)
-       . = ALIGN(16);
-       INIT_DATA_SECTION(16)
-       PERCPU(4)
 
-       /* we have to discard exit text and such at runtime, not link time, to
+       /* We have to discard exit text and such at runtime, not link time, to
         * handle embedded cross-section references (alt instructions, bug
-        * table, eh_frame, etc...)
+        * table, eh_frame, etc...).  We need all of our .text up front and
+        * .data after it for PCREL call issues.
         */
        .exit.text :
        {
                EXIT_TEXT
        }
+
+       . = ALIGN(16);
+       INIT_DATA_SECTION(16)
+       PERCPU(4)
+
        .exit.data :
        {
                EXIT_DATA