All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nicolas Pitre <nicolas.pitre@linaro.org>
To: Michal Simek <monstr@monstr.eu>
Cc: linux-kernel@vger.kernel.org,
	Russell King <linux@arm.linux.org.uk>,
	Marc Zyngier <marc.zyngier@arm.com>,
	Grant Likely <grant.likely@secretlab.ca>,
	Will Deacon <will.deacon@arm.com>,
	Rob Herring <rob.herring@calxeda.com>,
	linux-arm-kernel@lists.infradead.org,
	Ohad Ben-Cohen <ohad@wizery.com>,
	Peter Crosthwaite <peter.crosthwaite@petalogix.com>
Subject: Re: [RFC PATCH 7/8] ARM: vmlinux.lds:  Setup physical load address not virtual
Date: Mon, 18 Jun 2012 10:06:36 -0400 (EDT)	[thread overview]
Message-ID: <alpine.LFD.2.02.1206181000540.23555@xanadu.home> (raw)
In-Reply-To: <1340019011-18642-8-git-send-email-monstr@monstr.eu>

On Mon, 18 Jun 2012, Michal Simek wrote:

> Setup correct virtual and physical address in ELF LOAD section.

We are moving to a single kernel binary for multiple targets, including 
targets with different physical load addresses.  The kernel code figures 
out at run time what the actual physical address is when 
CONFIG_ARM_PATCH_PHYS_VIRT is set which is the default these days.  In 
other words, we don't know the physical offset at build time in that 
case and CONFIG_PHYS_OFFSET is simply not defined.

Why do you need this change?  Your patch comments are lacking 
justification for them.


> Signed-off-by: Michal Simek <monstr@monstr.eu>
> ---
>  arch/arm/include/asm/page.h   |    2 ++
>  arch/arm/kernel/vmlinux.lds.S |   28 ++++++++++++++--------------
>  2 files changed, 16 insertions(+), 14 deletions(-)
> 
> diff --git a/arch/arm/include/asm/page.h b/arch/arm/include/asm/page.h
> index ecf9019..4070209 100644
> --- a/arch/arm/include/asm/page.h
> +++ b/arch/arm/include/asm/page.h
> @@ -15,6 +15,8 @@
>  #define PAGE_SIZE		(_AC(1,UL) << PAGE_SHIFT)
>  #define PAGE_MASK		(~(PAGE_SIZE-1))
>  
> +#define LOAD_OFFSET	(CONFIG_PAGE_OFFSET - CONFIG_PHYS_OFFSET)
> +
>  #ifndef __ASSEMBLY__
>  
>  #ifndef CONFIG_MMU
> diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S
> index c887be0..b996bc0 100644
> --- a/arch/arm/kernel/vmlinux.lds.S
> +++ b/arch/arm/kernel/vmlinux.lds.S
> @@ -3,11 +3,11 @@
>   * Written by Martin Mares <mj@atrey.karlin.mff.cuni.cz>
>   */
>  
> +#include <asm/page.h>
>  #include <asm-generic/vmlinux.lds.h>
>  #include <asm/cache.h>
>  #include <asm/thread_info.h>
>  #include <asm/memory.h>
> -#include <asm/page.h>
>  	
>  #define PROC_INFO							\
>  	. = ALIGN(4);							\
> @@ -86,11 +86,11 @@ SECTIONS
>  #else
>  	. = PAGE_OFFSET + TEXT_OFFSET;
>  #endif
> -	.head.text : {
> +	.head.text : AT(ADDR(.head.text) - LOAD_OFFSET) {
>  		_text = .;
>  		HEAD_TEXT
>  	}
> -	.text : {			/* Real text segment		*/
> +	.text : AT(ADDR(.text) - LOAD_OFFSET){	/* Real text segment	*/
>  		_stext = .;		/* Text and read-only data	*/
>  			__exception_text_start = .;
>  			*(.exception.text)
> @@ -132,12 +132,12 @@ SECTIONS
>  	 * Stack unwinding tables
>  	 */
>  	. = ALIGN(8);
> -	.ARM.unwind_idx : {
> +	.ARM.unwind_idx : AT(ADDR(.ARM.unwind_idx) - LOAD_OFFSET) {
>  		__start_unwind_idx = .;
>  		*(.ARM.exidx*)
>  		__stop_unwind_idx = .;
>  	}
> -	.ARM.unwind_tab : {
> +	.ARM.unwind_tab : AT(ADDR(.ARM.unwind_tab) - LOAD_OFFSET) {
>  		__start_unwind_tab = .;
>  		*(.ARM.extab*)
>  		__stop_unwind_tab = .;
> @@ -152,35 +152,35 @@ SECTIONS
>  #endif
>  
>  	INIT_TEXT_SECTION(8)
> -	.exit.text : {
> +	.exit.text : AT(ADDR(.exit.text) - LOAD_OFFSET) {
>  		ARM_EXIT_KEEP(EXIT_TEXT)
>  	}
> -	.init.proc.info : {
> +	.init.proc.info : AT(ADDR(.init.proc.info) - LOAD_OFFSET) {
>  		ARM_CPU_DISCARD(PROC_INFO)
>  	}
> -	.init.arch.info : {
> +	.init.arch.info : AT(ADDR(.init.arch.info) - LOAD_OFFSET) {
>  		__arch_info_begin = .;
>  		*(.arch.info.init)
>  		__arch_info_end = .;
>  	}
> -	.init.tagtable : {
> +	.init.tagtable : AT(ADDR(.init.tagtable) - LOAD_OFFSET) {
>  		__tagtable_begin = .;
>  		*(.taglist.init)
>  		__tagtable_end = .;
>  	}
>  #ifdef CONFIG_SMP_ON_UP
> -	.init.smpalt : {
> +	.init.smpalt : AT(ADDR(.init.smpalt) - LOAD_OFFSET) {
>  		__smpalt_begin = .;
>  		*(.alt.smp.init)
>  		__smpalt_end = .;
>  	}
>  #endif
> -	.init.pv_table : {
> +	.init.pv_table : AT(ADDR(.init.pv_table) - LOAD_OFFSET) {
>  		__pv_table_begin = .;
>  		*(.pv_table)
>  		__pv_table_end = .;
>  	}
> -	.init.data : {
> +	.init.data : AT(ADDR(.init.data) - LOAD_OFFSET) {
>  #ifndef CONFIG_XIP_KERNEL
>  		INIT_DATA
>  #endif
> @@ -191,7 +191,7 @@ SECTIONS
>  		INIT_RAM_FS
>  	}
>  #ifndef CONFIG_XIP_KERNEL
> -	.exit.data : {
> +	.exit.data : AT(ADDR(.exit.data) - LOAD_OFFSET) {
>  		ARM_EXIT_KEEP(EXIT_DATA)
>  	}
>  #endif
> @@ -207,7 +207,7 @@ SECTIONS
>  	__data_loc = .;
>  #endif
>  
> -	.data : AT(__data_loc) {
> +	.data : AT(ADDR(.data) - LOAD_OFFSET) {
>  		_data = .;		/* address in memory */
>  		_sdata = .;
>  
> -- 
> 1.7.0.4
> 

WARNING: multiple messages have this Message-ID (diff)
From: nicolas.pitre@linaro.org (Nicolas Pitre)
To: linux-arm-kernel@lists.infradead.org
Subject: [RFC PATCH 7/8] ARM: vmlinux.lds:  Setup physical load address not virtual
Date: Mon, 18 Jun 2012 10:06:36 -0400 (EDT)	[thread overview]
Message-ID: <alpine.LFD.2.02.1206181000540.23555@xanadu.home> (raw)
In-Reply-To: <1340019011-18642-8-git-send-email-monstr@monstr.eu>

On Mon, 18 Jun 2012, Michal Simek wrote:

> Setup correct virtual and physical address in ELF LOAD section.

We are moving to a single kernel binary for multiple targets, including 
targets with different physical load addresses.  The kernel code figures 
out at run time what the actual physical address is when 
CONFIG_ARM_PATCH_PHYS_VIRT is set which is the default these days.  In 
other words, we don't know the physical offset at build time in that 
case and CONFIG_PHYS_OFFSET is simply not defined.

Why do you need this change?  Your patch comments are lacking 
justification for them.


> Signed-off-by: Michal Simek <monstr@monstr.eu>
> ---
>  arch/arm/include/asm/page.h   |    2 ++
>  arch/arm/kernel/vmlinux.lds.S |   28 ++++++++++++++--------------
>  2 files changed, 16 insertions(+), 14 deletions(-)
> 
> diff --git a/arch/arm/include/asm/page.h b/arch/arm/include/asm/page.h
> index ecf9019..4070209 100644
> --- a/arch/arm/include/asm/page.h
> +++ b/arch/arm/include/asm/page.h
> @@ -15,6 +15,8 @@
>  #define PAGE_SIZE		(_AC(1,UL) << PAGE_SHIFT)
>  #define PAGE_MASK		(~(PAGE_SIZE-1))
>  
> +#define LOAD_OFFSET	(CONFIG_PAGE_OFFSET - CONFIG_PHYS_OFFSET)
> +
>  #ifndef __ASSEMBLY__
>  
>  #ifndef CONFIG_MMU
> diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S
> index c887be0..b996bc0 100644
> --- a/arch/arm/kernel/vmlinux.lds.S
> +++ b/arch/arm/kernel/vmlinux.lds.S
> @@ -3,11 +3,11 @@
>   * Written by Martin Mares <mj@atrey.karlin.mff.cuni.cz>
>   */
>  
> +#include <asm/page.h>
>  #include <asm-generic/vmlinux.lds.h>
>  #include <asm/cache.h>
>  #include <asm/thread_info.h>
>  #include <asm/memory.h>
> -#include <asm/page.h>
>  	
>  #define PROC_INFO							\
>  	. = ALIGN(4);							\
> @@ -86,11 +86,11 @@ SECTIONS
>  #else
>  	. = PAGE_OFFSET + TEXT_OFFSET;
>  #endif
> -	.head.text : {
> +	.head.text : AT(ADDR(.head.text) - LOAD_OFFSET) {
>  		_text = .;
>  		HEAD_TEXT
>  	}
> -	.text : {			/* Real text segment		*/
> +	.text : AT(ADDR(.text) - LOAD_OFFSET){	/* Real text segment	*/
>  		_stext = .;		/* Text and read-only data	*/
>  			__exception_text_start = .;
>  			*(.exception.text)
> @@ -132,12 +132,12 @@ SECTIONS
>  	 * Stack unwinding tables
>  	 */
>  	. = ALIGN(8);
> -	.ARM.unwind_idx : {
> +	.ARM.unwind_idx : AT(ADDR(.ARM.unwind_idx) - LOAD_OFFSET) {
>  		__start_unwind_idx = .;
>  		*(.ARM.exidx*)
>  		__stop_unwind_idx = .;
>  	}
> -	.ARM.unwind_tab : {
> +	.ARM.unwind_tab : AT(ADDR(.ARM.unwind_tab) - LOAD_OFFSET) {
>  		__start_unwind_tab = .;
>  		*(.ARM.extab*)
>  		__stop_unwind_tab = .;
> @@ -152,35 +152,35 @@ SECTIONS
>  #endif
>  
>  	INIT_TEXT_SECTION(8)
> -	.exit.text : {
> +	.exit.text : AT(ADDR(.exit.text) - LOAD_OFFSET) {
>  		ARM_EXIT_KEEP(EXIT_TEXT)
>  	}
> -	.init.proc.info : {
> +	.init.proc.info : AT(ADDR(.init.proc.info) - LOAD_OFFSET) {
>  		ARM_CPU_DISCARD(PROC_INFO)
>  	}
> -	.init.arch.info : {
> +	.init.arch.info : AT(ADDR(.init.arch.info) - LOAD_OFFSET) {
>  		__arch_info_begin = .;
>  		*(.arch.info.init)
>  		__arch_info_end = .;
>  	}
> -	.init.tagtable : {
> +	.init.tagtable : AT(ADDR(.init.tagtable) - LOAD_OFFSET) {
>  		__tagtable_begin = .;
>  		*(.taglist.init)
>  		__tagtable_end = .;
>  	}
>  #ifdef CONFIG_SMP_ON_UP
> -	.init.smpalt : {
> +	.init.smpalt : AT(ADDR(.init.smpalt) - LOAD_OFFSET) {
>  		__smpalt_begin = .;
>  		*(.alt.smp.init)
>  		__smpalt_end = .;
>  	}
>  #endif
> -	.init.pv_table : {
> +	.init.pv_table : AT(ADDR(.init.pv_table) - LOAD_OFFSET) {
>  		__pv_table_begin = .;
>  		*(.pv_table)
>  		__pv_table_end = .;
>  	}
> -	.init.data : {
> +	.init.data : AT(ADDR(.init.data) - LOAD_OFFSET) {
>  #ifndef CONFIG_XIP_KERNEL
>  		INIT_DATA
>  #endif
> @@ -191,7 +191,7 @@ SECTIONS
>  		INIT_RAM_FS
>  	}
>  #ifndef CONFIG_XIP_KERNEL
> -	.exit.data : {
> +	.exit.data : AT(ADDR(.exit.data) - LOAD_OFFSET) {
>  		ARM_EXIT_KEEP(EXIT_DATA)
>  	}
>  #endif
> @@ -207,7 +207,7 @@ SECTIONS
>  	__data_loc = .;
>  #endif
>  
> -	.data : AT(__data_loc) {
> +	.data : AT(ADDR(.data) - LOAD_OFFSET) {
>  		_data = .;		/* address in memory */
>  		_sdata = .;
>  
> -- 
> 1.7.0.4
> 

  reply	other threads:[~2012-06-18 14:13 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-18 11:30 ARM SMP/GIC/LDS patches for Xilinx Zynq remoteproc Michal Simek
2012-06-18 11:30 ` Michal Simek
2012-06-18 11:30 ` [RFC PATCH 1/8] ARM: gic: Support forcing cpumask for possible cpus in the system Michal Simek
2012-06-18 11:30   ` Michal Simek
2012-06-18 11:33   ` Russell King - ARM Linux
2012-06-18 11:33     ` Russell King - ARM Linux
2012-06-18 11:41     ` Michal Simek
2012-06-18 11:41       ` Michal Simek
2012-06-20  6:48       ` Michal Simek
2012-06-18 11:30 ` [RFC PATCH 2/8] ARM: gic: Export gic_raise_softirq function for kernel modules Michal Simek
2012-06-18 11:30   ` Michal Simek
2012-06-18 11:30 ` [RFC PATCH 3/8] ARM: gic: Introduce new gic_set_cpu Michal Simek
2012-06-18 11:30   ` Michal Simek
2012-06-18 11:30 ` [RFC PATCH 4/8] ARM: smp: Move cpu initialization directly to ipi_cpu_stop Michal Simek
2012-06-18 11:30   ` Michal Simek
2012-06-18 11:34   ` Russell King - ARM Linux
2012-06-18 11:34     ` Russell King - ARM Linux
2012-06-18 11:53     ` Michal Simek
2012-06-18 11:53       ` Michal Simek
2012-06-18 11:30 ` [RFC PATCH 5/8] AMP: smp: Extend number of IPIs Michal Simek
2012-06-18 11:30   ` Michal Simek
2012-06-18 11:35   ` Russell King - ARM Linux
2012-06-18 11:35     ` Russell King - ARM Linux
2012-06-18 11:54     ` Michal Simek
2012-06-18 11:54       ` Michal Simek
2012-06-18 11:30 ` [RFC PATCH 6/8] ARM: smp: Use generic API for ipi Michal Simek
2012-06-18 11:30   ` Michal Simek
2012-06-18 11:36   ` Russell King - ARM Linux
2012-06-18 11:36     ` Russell King - ARM Linux
2012-06-18 11:54     ` Michal Simek
2012-06-18 11:54       ` Michal Simek
2012-06-18 11:30 ` [RFC PATCH 7/8] ARM: vmlinux.lds: Setup physical load address not virtual Michal Simek
2012-06-18 11:30   ` Michal Simek
2012-06-18 14:06   ` Nicolas Pitre [this message]
2012-06-18 14:06     ` Nicolas Pitre
2012-06-18 18:15     ` Michal Simek
2012-06-18 19:02       ` Nicolas Pitre
2012-06-18 19:02         ` Nicolas Pitre
2012-06-18 19:23         ` Michal Simek
2012-06-18 19:23           ` Michal Simek
2012-06-18 21:10           ` Nicolas Pitre
2012-06-18 21:10             ` Nicolas Pitre
2012-06-19  4:16             ` Michal Simek
2012-06-18 11:30 ` [RFC PATCH 8/8] ARM: vmlinux.lds: Setup correct entry point to physical address Michal Simek
2012-06-18 11:30   ` Michal Simek
2012-06-18 11:37   ` Russell King - ARM Linux
2012-06-18 11:37     ` Russell King - ARM Linux
2012-06-18 11:45     ` Michal Simek
2012-06-18 11:45       ` Michal Simek

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=alpine.LFD.2.02.1206181000540.23555@xanadu.home \
    --to=nicolas.pitre@linaro.org \
    --cc=grant.likely@secretlab.ca \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=marc.zyngier@arm.com \
    --cc=monstr@monstr.eu \
    --cc=ohad@wizery.com \
    --cc=peter.crosthwaite@petalogix.com \
    --cc=rob.herring@calxeda.com \
    --cc=will.deacon@arm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.