[PATCH] ARM: Avoid discarding sections that might have SMP_ON_UP fixups

Dave Martin dave.martin at linaro.org
Wed Feb 16 11:35:43 EST 2011


Hi,

On Fri, Feb 11, 2011 at 04:32:47PM +0000, Russell King - ARM Linux wrote:

[...]

> diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S
> index 45b5651..343d29f 100644
> --- a/arch/arm/kernel/vmlinux.lds.S
> +++ b/arch/arm/kernel/vmlinux.lds.S
> @@ -21,6 +21,12 @@
>  #define ARM_CPU_KEEP(x)
>  #endif
>  
> +#if defined(CONFIG_SMP_ON_UP) && !defined(CONFIG_DEBUG_SPINLOCK)
> +#define ARM_EXIT_KEEP(x)	x
> +#else
> +#define ARM_EXIT_KEEP(x)
> +#endif
> +
>  OUTPUT_ARCH(arm)
>  ENTRY(stext)
>  
> @@ -43,6 +49,7 @@ SECTIONS
>  		_sinittext = .;
>  			HEAD_TEXT
>  			INIT_TEXT
> +			ARM_EXIT_KEEP(EXIT_TEXT)
>  		_einittext = .;
>  		ARM_CPU_DISCARD(PROC_INFO)
>  		__arch_info_begin = .;
> @@ -71,6 +78,7 @@ SECTIONS
>  #ifndef CONFIG_XIP_KERNEL
>  		__init_begin = _stext;
>  		INIT_DATA
> +		ARM_EXIT_KEEP(EXIT_DATA)
>  #endif
>  	}
>  
> @@ -166,6 +174,7 @@ SECTIONS
>  		. = ALIGN(PAGE_SIZE);
>  		__init_begin = .;
>  		INIT_DATA
> +		ARM_EXIT_KEEP(EXIT_DATA)
>  		. = ALIGN(PAGE_SIZE);
>  		__init_end = .;
>  #endif
> 
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

This works for me in a case known to fail without the patch.

Tested-by: Dave Martin <dave.martin at linaro.org>

I still don't quite understand the intricacies of how vmlinux
is laid out, but the patch looks sensible.

Do you need anything more from me on this?  If not, I will
throw away my patch and replace it with yours.

Cheers
---Dave



More information about the linux-arm-kernel mailing list