linux/arch/arm
David Brown 9973290ce2 ARM: 7428/1: Prevent KALLSYM size mismatch on ARM.
ARM builds seem to be plagued by an occasional build error:

    Inconsistent kallsyms data
    This is a bug - please report about it
    Try "make KALLSYMS_EXTRA_PASS=1" as a workaround

The problem has to do with alignment of some sections by the linker.
The kallsyms data is built in two passes by first linking the kernel
without it, and then linking the kernel again with the symbols
included.  Normally, this just shifts the symbols, without changing
their order, and the compression used by the kallsyms gives the same
result.

On non SMP, the per CPU data is empty.  Depending on the where the
alignment ends up, it can come out as either:

   +-------------------+
   | last text segment |
   +-------------------+
   /* padding */
   +-------------------+     <- L1_CACHE_BYTES alignemnt
   | per cpu (empty)   |
   +-------------------+
__per_cpu_end:
   /* padding */
__data_loc:
   +-------------------+     <- THREAD_SIZE alignment
   | data              |
   +-------------------+

or

   +-------------------+
   | last text segment |
   +-------------------+
   /* padding */
   +-------------------+     <- L1_CACHE_BYTES alignemnt
   | per cpu (empty)   |
   +-------------------+
__per_cpu_end:
   /* no padding */
__data_loc:
   +-------------------+     <- THREAD_SIZE alignment
   | data              |
   +-------------------+

if the alignment satisfies both.  Because symbols that have the same
address are sorted by 'nm -n', the second case will be in a different
order than the first case.  This changes the compression, changing the
size of the kallsym data, causing the build failure.

The KALLSYMS_EXTRA_PASS=1 workaround usually works, but it is still
possible to have the alignment change between the second and third
pass.  It's probably even possible for it to never reach a fixedpoint.

The problem only occurs on non-SMP, when the per-cpu data is empty,
and when the data segment has alignment (and immediately follows the
text segments).  Fix this by only including the per_cpu section on
SMP, when it is not empty.

Signed-off-by: David Brown <davidb@codeaurora.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2012-06-22 22:54:18 +01:00
..
boot Merge branch 'akpm' (Andrew's patch-bomb) 2012-06-20 14:41:57 -07:00
common ARM: dma-mapping: fix debug messages in dmabounce code 2012-06-13 14:25:16 +02:00
configs ARM: ux500: Provide regulator support for SMSC911x via Device Tree 2012-06-01 02:04:46 +02:00
include/asm Merge branch 'akpm' (Andrew's patch-bomb) 2012-06-20 14:41:57 -07:00
kernel ARM: 7428/1: Prevent KALLSYM size mismatch on ARM. 2012-06-22 22:54:18 +01:00
lib ARM: Remove support for ARMv3 ARM610 and ARM710 CPUs 2012-05-05 05:50:50 +01:00
mach-at91 Merge branch 'next' of git://git.infradead.org/users/vkoul/slave-dma 2012-05-25 09:31:59 -07:00
mach-bcmring
mach-clps711x ARM: clps711x: Cleanup IRQ handling 2012-05-15 21:20:59 +02:00
mach-cns3xxx ARM: PCI: provide a default bus scan implementation 2012-05-13 17:12:17 +01:00
mach-davinci arm-soc: sweeping late_initcall cleanup 2012-05-26 13:14:01 -07:00
mach-dove arm-soc: clock driver changes 2012-05-26 12:42:29 -07:00
mach-ebsa110
mach-ep93xx - More robust parsing especially of xattr data in JFFS2 2012-06-01 16:55:42 -07:00
mach-exynos fbdev updates for 3.5 2012-06-01 16:57:51 -07:00
mach-footbridge ARM: PCI: provide a default bus scan implementation 2012-05-13 17:12:17 +01:00
mach-gemini
mach-h720x
mach-highbank ARM: highbank: Add smc calls to enable/disable the L2 2012-06-07 22:39:43 -07:00
mach-imx Merge branch 'imx/fixes' of git://git.pengutronix.de/git/imx/linux-2.6 into fixes 2012-06-07 14:59:28 -07:00
mach-integrator Merge branches 'amba', 'devel-stable', 'fixes', 'mach-types', 'mmci', 'pci' and 'versatile' into for-linus 2012-05-21 15:15:10 +01:00
mach-iop13xx ARM: PCI: get rid of pci_std_swizzle() 2012-05-13 17:12:16 +01:00
mach-iop32x ARM: PCI: provide a default bus scan implementation 2012-05-13 17:12:17 +01:00
mach-iop33x ARM: PCI: provide a default bus scan implementation 2012-05-13 17:12:17 +01:00
mach-ixp4xx - More robust parsing especially of xattr data in JFFS2 2012-06-01 16:55:42 -07:00
mach-kirkwood ARM: Kirkwood: Fix clk problems modular ethernet driver 2012-06-16 18:45:20 -07:00
mach-ks8695 ARM: PCI: provide a default bus scan implementation 2012-05-13 17:12:17 +01:00
mach-l7200/include/mach
mach-lpc32xx GPIO driver changes for v3.5 merge window 2012-05-24 14:01:46 -07:00
mach-mmp ARM: mmp: fix missing cascade_irq in irq handler 2012-06-05 17:42:23 +08:00
mach-msm arm-soc: sweeping late_initcall cleanup 2012-05-26 13:14:01 -07:00
mach-mv78xx0 arm-soc: clock driver changes 2012-05-26 12:42:29 -07:00
mach-mxs arm-soc: device tree conversions, part 2 2012-05-26 12:57:47 -07:00
mach-netx
mach-nomadik - More robust parsing especially of xattr data in JFFS2 2012-06-01 16:55:42 -07:00
mach-omap1 - More robust parsing especially of xattr data in JFFS2 2012-06-01 16:55:42 -07:00
mach-omap2 ARM: SoC fixes 2012-06-17 00:20:47 -07:00
mach-orion5x - More robust parsing especially of xattr data in JFFS2 2012-06-01 16:55:42 -07:00
mach-picoxcell
mach-pnx4008 arm-soc: sweeping late_initcall cleanup 2012-05-26 13:14:01 -07:00
mach-prima2 arm-soc: sweeping late_initcall cleanup 2012-05-26 13:14:01 -07:00
mach-pxa - More robust parsing especially of xattr data in JFFS2 2012-06-01 16:55:42 -07:00
mach-realview
mach-rpc
mach-s3c24xx fbdev updates for 3.5 2012-06-01 16:57:51 -07:00
mach-s3c64xx fbdev updates for 3.5 2012-06-01 16:57:51 -07:00
mach-s3c2410
mach-s3c2412
mach-s3c2440
mach-s5p64x0 fbdev updates for 3.5 2012-06-01 16:57:51 -07:00
mach-s5pc100 fbdev updates for 3.5 2012-06-01 16:57:51 -07:00
mach-s5pv210 fbdev updates for 3.5 2012-06-01 16:57:51 -07:00
mach-sa1100 Merge branch 'for-linus' of git://git.linaro.org/people/rmk/linux-arm 2012-05-29 18:21:44 -07:00
mach-shark ARM: PCI: provide a default bus scan implementation 2012-05-13 17:12:17 +01:00
mach-shmobile Merge branch 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2012-06-04 11:25:31 -07:00
mach-spear3xx Viresh has moved 2012-06-20 14:39:36 -07:00
mach-spear6xx Viresh has moved 2012-06-20 14:39:36 -07:00
mach-spear13xx Viresh has moved 2012-06-20 14:39:36 -07:00
mach-tegra arm-soc: sweeping late_initcall cleanup 2012-05-26 13:14:01 -07:00
mach-u300
mach-ux500 serial/amba-pl011: move custom pin control to driver 2012-06-12 15:41:44 -07:00
mach-versatile arm: versatile: fix and enable PCI I/O space 2012-06-16 18:41:35 -07:00
mach-vexpress Merge branch 'late/soc' into devel-late 2012-05-30 16:06:46 -07:00
mach-vt8500
mach-w90x900
mach-zynq
mm ARM: mm: fix type of the arm_dma_limit global variable 2012-06-11 14:30:47 +02:00
net ARM: 7421/1: bpf_jit: BPF_S_ANC_ALU_XOR_X support 2012-06-14 15:12:13 +01:00
nwfpe
oprofile
plat-iop ARM: PCI: provide a default bus scan implementation 2012-05-13 17:12:17 +01:00
plat-mxc Some fixes for the fresh i.MX common clock support 2012-06-07 11:47:28 -07:00
plat-nomadik ARM: nomadik: enable PINCTRL_NOMADIK where needed 2012-05-15 14:42:57 +02:00
plat-omap ARM: OMAP: Fix MMC_OMAP build when only MMC_OMAP_HS is selected 2012-06-06 01:42:20 -07:00
plat-orion arm-soc: clock driver changes 2012-05-26 12:42:29 -07:00
plat-pxa ARM: MMP: add pxa910-ssp into ssp_id_table 2012-06-11 12:25:50 +08:00
plat-s3c24xx ARM: S3C24XX: move common clock init into common.c 2012-05-12 16:22:18 +09:00
plat-samsung fbdev updates for 3.5 2012-06-01 16:57:51 -07:00
plat-spear Viresh has moved 2012-06-20 14:39:36 -07:00
plat-versatile ARM: 7389/2: plat-versatile: modernize FPGA IRQ controller 2012-05-04 16:53:37 +01:00
tools ARM: Update mach-types 2012-04-26 08:46:02 +01:00
vfp Merge branch 'misc' into for-linus 2012-05-21 15:15:24 +01:00
Kconfig ARM: SoC fixes 2012-06-17 00:20:47 -07:00
Kconfig-nommu
Kconfig.debug arm-soc: device tree conversions, part 2 2012-05-26 12:57:47 -07:00
Makefile arm-soc: soc specific changes, part 2 2012-05-26 13:05:55 -07:00