linux/arch/arm/kernel
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
..
.gitignore
arch_timer.c ARM: architected timers: remove support for non DT platforms 2012-04-27 13:39:25 +01:00
armksyms.c Disintegrate asm/system.h for ARM 2012-03-28 18:30:01 +01:00
arthur.c
asm-offsets.c ARM: 7114/1: cache-l2x0: add resume entry for l2 in secure mode 2011-10-17 09:11:51 +01:00
atags.c
atags.h
bios32.c ARM: PCI: remove per-pci_hw list of buses 2012-05-16 15:24:12 +01:00
calls.S ARM: wire up process_vm_writev and process_vm_readv syscalls 2011-11-17 16:58:00 +00:00
compat.c
compat.h
cpuidle.c cpuidle: Add common time keeping and irq enabling 2012-03-21 01:59:40 -04:00
crash_dump.c crash_dump: export is_kdump_kernel to modules, consolidate elfcorehdr_addr, setup_elfcorehdr and saved_max_pfn 2011-03-23 19:47:19 -07:00
debug.S ARM: cleanups of io includes 2012-03-29 18:02:10 -07:00
devtree.c arm: convert core files from module.h to export.h 2011-10-31 19:30:49 -04:00
dma-isa.c
dma.c locking, ARM: Annotate low level hw locks as raw 2011-09-13 11:12:14 +02:00
early_printk.c
elf.c Disintegrate asm/system.h for ARM 2012-03-28 18:30:01 +01:00
entry-armv.S ARM: 7425/1: extable: ensure fixup entries are 4-byte aligned 2012-06-16 16:30:25 +01:00
entry-common.S Merge branch 'for-arm' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal.git into for-linus 2012-05-29 22:13:55 +01:00
entry-header.S Merge branch 'devel-stable' into for-next 2011-07-22 23:09:07 +01:00
etm.c arm: fix implicit module.h users by adding it to arch/arm as required. 2011-10-31 19:30:50 -04:00
fiq.c ARM: move CP15 definitions to separate header file 2012-03-28 18:30:01 +01:00
fiqasm.S ARM: 6938/1: fiq: Refactor {get,set}_fiq_regs() for Thumb-2 2011-05-26 10:31:06 +01:00
ftrace.c ARM: 7331/1: extract out insn generation code from ftrace 2012-03-24 09:38:55 +00:00
head-common.S arm/dt: Make __vet_atags also accept a dtb image 2011-05-11 15:12:32 +02:00
head-nommu.S ARM: move CP15 definitions to separate header file 2012-03-28 18:30:01 +01:00
head.S ARM: 7363/1: DEBUG_LL: limit early mapping to the minimum 2012-05-04 16:56:46 +01:00
hw_breakpoint.c Disintegrate asm/system.h for ARM 2012-03-28 18:30:01 +01:00
insn.c ARM: fix missing bug.h include in arch/arm/kernel/insn.c 2012-03-30 11:51:46 +01:00
insn.h ARM: 7334/1: add jump label support 2012-03-24 09:38:56 +00:00
io.c arm: convert core files from module.h to export.h 2011-10-31 19:30:49 -04:00
irq.c ARM: 7406/1: hotplug: copy the affinity mask when forcefully migrating IRQs 2012-04-28 11:01:31 +01:00
isa.c
iwmmxt.S ARM: pxa: fix logic error in PJ4 iWMMXt handling 2011-08-11 10:10:26 +08:00
jump_label.c ARM: 7334/1: add jump label support 2012-03-24 09:38:56 +00:00
kgdb.c kgdb,arm: fix register dump 2010-10-29 13:14:40 -05:00
kprobes-arm.c ARM: 7181/1: Restrict kprobes probing SWP instructions to ARMv5 and below 2011-11-30 23:54:54 +00:00
kprobes-common.c Disintegrate asm/system.h for ARM 2012-03-28 18:30:01 +01:00
kprobes-test-arm.c ARM: 7181/1: Restrict kprobes probing SWP instructions to ARMv5 and below 2011-11-30 23:54:54 +00:00
kprobes-test-thumb.c ARM: 7174/1: Fix build error in kprobes test code on Thumb2 kernels 2011-11-26 21:58:53 +00:00
kprobes-test.c ARM: 7209/1: Use generic ARM instruction set condition code checks for kprobes. 2011-12-13 08:52:03 +00:00
kprobes-test.h ARM: 7174/1: Fix build error in kprobes test code on Thumb2 kernels 2011-11-26 21:58:53 +00:00
kprobes-thumb.c ARM: 7423/1: kprobes: run t32_simulate_ldr_literal() without insn slot 2012-06-14 15:11:44 +01:00
kprobes.c Autogenerated GPG tag for Rusty D1ADB8F1: 15EE 8D6C AB0E 7F0C F999 BFCB D920 0E6C D1AD B8F1 2012-04-02 08:53:24 -07:00
kprobes.h ARM: kprobes: Add exports for test code 2011-09-20 18:17:43 +00:00
leds.c arm: leds: convert sysdev_class to a regular subsystem 2011-12-21 15:52:57 -08:00
machine_kexec.c Merge branch 'for-linus' of git://git.linaro.org/people/rmk/linux-arm 2012-03-29 16:53:48 -07:00
Makefile Merge branch 'smp-hotplug-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2012-05-21 19:43:57 -07:00
module.c ARM: 7059/1: LPAE: Use PMD_(SHIFT|SIZE|MASK) instead of PGDIR_* 2011-08-23 15:30:33 +01:00
opcodes.c ARM: 7206/1: Add generic ARM instruction set condition code checks. 2011-12-13 08:52:02 +00:00
patch.c ARM: 7332/1: extract out code patch function from kprobes 2012-03-24 09:38:55 +00:00
patch.h ARM: 7332/1: extract out code patch function from kprobes 2012-03-24 09:38:55 +00:00
perf_event_v6.c perf: Pass last sampling period to perf_sample_data_init() 2012-05-09 15:23:12 +02:00
perf_event_v7.c perf: Pass last sampling period to perf_sample_data_init() 2012-05-09 15:23:12 +02:00
perf_event_xscale.c perf: Pass last sampling period to perf_sample_data_init() 2012-05-09 15:23:12 +02:00
perf_event.c Merge branch 'for-linus' of git://git.linaro.org/people/rmk/linux-arm 2012-03-29 16:53:48 -07:00
pj4-cp0.c arm: remove several unnecessary module.h include instances 2011-10-31 19:30:48 -04:00
pmu.c ARM: PMU: re-export release_pmu symbol to modules 2011-11-16 10:06:42 +00:00
process.c arm: Remove unused cpu_idle_wait() 2012-05-08 12:35:06 +02:00
ptrace.c Merge branch 'for-arm' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal.git into for-linus 2012-05-29 22:13:55 +01:00
relocate_kernel.S ARM: 7065/1: kexec: ensure new kernel is entered in ARM state 2011-08-28 10:39:41 +01:00
return_address.c arm: convert core files from module.h to export.h 2011-10-31 19:30:49 -04:00
sched_clock.c ARM: sync sched_clock() state on suspend 2012-03-24 09:38:53 +00:00
setup.c arm-soc: sweeping late_initcall cleanup 2012-05-26 13:14:01 -07:00
signal.c new helper: signal_delivered() 2012-06-01 12:58:52 -04:00
signal.h arm: remove unused restart trampoline 2012-05-21 14:39:44 -04:00
sleep.S Disintegrate asm/system.h for ARM 2012-03-28 18:30:01 +01:00
smp_scu.c ARM: 7347/1: SCU: use cpu_logical_map for per-CPU low power mode 2012-04-28 17:31:37 +01:00
smp_tlb.c smp: introduce a generic on_each_cpu_mask() function 2012-03-28 17:14:35 -07:00
smp_twd.c Revert "ARM: 7359/2: smp_twd: Only wait for reprogramming on active cpus" 2012-04-19 19:35:10 +01:00
smp.c arm: use clear_tasks_mm_cpumask() 2012-05-31 17:49:29 -07:00
stacktrace.c arm: convert core files from module.h to export.h 2011-10-31 19:30:49 -04:00
suspend.c ARM: suspend: use idmap_pgd instead of suspend_pgd 2011-12-06 14:04:14 +00:00
swp_emulate.c ARM: 7208/1: Add condition code checking to SWP emulation handler. 2011-12-13 08:52:03 +00:00
sys_arm.c ARM: 7410/1: Add extra clobber registers for assembly in kernel_execve 2012-05-05 13:54:01 +01:00
sys_oabi-compat.c userns: Convert stat to return values mapped from kuids and kgids 2012-05-15 14:08:35 -07:00
tcm.c Disintegrate asm/system.h for ARM 2012-03-28 18:30:01 +01:00
tcm.h
thumbee.c ARM: 7385/1: ThumbEE: Use cpuid macros to read ID_PFR0 for ThumbEE 2012-04-25 19:49:26 +01:00
time.c ARM: 7413/1: move read_{boot,persistent}_clock to the architecture level 2012-05-06 11:09:21 +01:00
topology.c ARM: 7182/1: ARM cpu topology: fix warning 2011-11-30 23:55:21 +00:00
traps.c Merge branch 'for-arm' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal.git into for-linus 2012-05-29 22:13:55 +01:00
unwind.c ARM: unwinder: fix bisection to find origin in .idx section 2011-12-15 14:02:19 -08:00
vmlinux.lds.S ARM: 7428/1: Prevent KALLSYM size mismatch on ARM. 2012-06-22 22:54:18 +01:00
xscale-cp0.c arm: remove several unnecessary module.h include instances 2011-10-31 19:30:48 -04:00