mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-25 19:42:19 +00:00
ARM: assembler: define a Kconfig symbol for group relocation support
Nathan reports the group relocations go out of range in pathological cases such as allyesconfig kernels, which have little chance of actually booting but are still used in validation. So add a Kconfig symbol for this feature, and make it depend on !COMPILE_TEST. Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
This commit is contained in:
@@ -656,8 +656,8 @@ THUMB( orr \reg , \reg , #PSR_T_BIT )
|
||||
|
||||
.macro __ldst_va, op, reg, tmp, sym, cond
|
||||
#if __LINUX_ARM_ARCH__ >= 7 || \
|
||||
(defined(MODULE) && defined(CONFIG_ARM_MODULE_PLTS)) || \
|
||||
(defined(CONFIG_LD_IS_LLD) && CONFIG_LLD_VERSION < 140000)
|
||||
!defined(CONFIG_ARM_HAS_GROUP_RELOCS) || \
|
||||
(defined(MODULE) && defined(CONFIG_ARM_MODULE_PLTS))
|
||||
mov_l \tmp, \sym, \cond
|
||||
\op\cond \reg, [\tmp]
|
||||
#else
|
||||
@@ -716,8 +716,8 @@ THUMB( orr \reg , \reg , #PSR_T_BIT )
|
||||
*/
|
||||
.macro ldr_this_cpu, rd:req, sym:req, t1:req, t2:req
|
||||
#if __LINUX_ARM_ARCH__ >= 7 || \
|
||||
(defined(MODULE) && defined(CONFIG_ARM_MODULE_PLTS)) || \
|
||||
(defined(CONFIG_LD_IS_LLD) && CONFIG_LLD_VERSION < 140000)
|
||||
!defined(CONFIG_ARM_HAS_GROUP_RELOCS) || \
|
||||
(defined(MODULE) && defined(CONFIG_ARM_MODULE_PLTS))
|
||||
this_cpu_offset \t1
|
||||
mov_l \t2, \sym
|
||||
ldr \rd, [\t1, \t2]
|
||||
|
||||
@@ -37,8 +37,8 @@ static inline __attribute_const__ struct task_struct *get_current(void)
|
||||
#ifdef CONFIG_CPU_V6
|
||||
"1: \n\t"
|
||||
" .subsection 1 \n\t"
|
||||
#if !(defined(MODULE) && defined(CONFIG_ARM_MODULE_PLTS)) && \
|
||||
!(defined(CONFIG_LD_IS_LLD) && CONFIG_LLD_VERSION < 140000)
|
||||
#if defined(CONFIG_ARM_HAS_GROUP_RELOCS) && \
|
||||
!(defined(MODULE) && defined(CONFIG_ARM_MODULE_PLTS))
|
||||
"2: " LOAD_SYM_ARMV6(%0, __current) " \n\t"
|
||||
" b 1b \n\t"
|
||||
#else
|
||||
@@ -55,8 +55,8 @@ static inline __attribute_const__ struct task_struct *get_current(void)
|
||||
#endif
|
||||
: "=r"(cur));
|
||||
#elif __LINUX_ARM_ARCH__>= 7 || \
|
||||
(defined(MODULE) && defined(CONFIG_ARM_MODULE_PLTS)) || \
|
||||
(defined(CONFIG_LD_IS_LLD) && CONFIG_LLD_VERSION < 140000)
|
||||
!defined(CONFIG_ARM_HAS_GROUP_RELOCS) || \
|
||||
(defined(MODULE) && defined(CONFIG_ARM_MODULE_PLTS))
|
||||
cur = __current;
|
||||
#else
|
||||
asm(LOAD_SYM_ARMV6(%0, __current) : "=r"(cur));
|
||||
|
||||
@@ -38,8 +38,8 @@ static inline unsigned long __my_cpu_offset(void)
|
||||
#ifdef CONFIG_CPU_V6
|
||||
"1: \n\t"
|
||||
" .subsection 1 \n\t"
|
||||
#if !(defined(MODULE) && defined(CONFIG_ARM_MODULE_PLTS)) && \
|
||||
!(defined(CONFIG_LD_IS_LLD) && CONFIG_LLD_VERSION < 140000)
|
||||
#if defined(CONFIG_ARM_HAS_GROUP_RELOCS) && \
|
||||
!(defined(MODULE) && defined(CONFIG_ARM_MODULE_PLTS))
|
||||
"2: " LOAD_SYM_ARMV6(%0, __per_cpu_offset) " \n\t"
|
||||
" b 1b \n\t"
|
||||
#else
|
||||
|
||||
Reference in New Issue
Block a user