Patchwork [v5,1/7] arch: toolchain: Introduce binary formats BINFMT_*.

login
register
mail settings
Submitter Sonic Zhang
Date April 12, 2013, 10:18 a.m.
Message ID <1365761909-15305-1-git-send-email-sonic.adi@gmail.com>
Download mbox | patch
Permalink /patch/236023/
State Changes Requested
Headers show

Comments

Sonic Zhang - April 12, 2013, 10:18 a.m.
From: Sonic Zhang <sonic.zhang@analog.com>

Just introduce the symbol and options in arch generic Config.in.
Append FLAT format link flags to external toolchain wrapper.

Signed-off-by: Sonic Zhang <sonic.zhang@analog.com>

---

v3-changes:
- Rename the BINFMT dependency names in external toolchain config file.
- Add some help text to BINFMT macros.
---
 arch/Config.in                                     |   34 ++++++++++++++++++++
 toolchain/toolchain-external/Config.in             |   12 +++---
 toolchain/toolchain-external/ext-tool.mk           |    4 ++
 .../toolchain-external/ext-toolchain-wrapper.c     |    3 ++
 4 files changed, 47 insertions(+), 6 deletions(-)
Thomas Petazzoni - April 16, 2013, 6:51 p.m.
Dear Sonic Zhang,

On Fri, 12 Apr 2013 18:18:23 +0800, Sonic Zhang wrote:

> +# Set up target binary format
> +choice
> +	prompt "Target Binary Format"
> +	default BR2_BINFMT_FDPIC if BR2_bfin
> +	default BR2_BINFMT_ELF
> +
> +config BR2_BINFMT_ELF
> +	bool "ELF"
> +	depends on !BR2_bfin
> +	help
> +	  ELF (Executable and Linkable Format) is a format for libraries and
> +	  executables used across different architectures and operating
> +	  systems.

I do agree with Arnout on one point here: we can hide this choice
when !BR2_bfin. However, contrary to Arnout, I'd like to keep this
BR2_BINFMT_ELF choice as an invisible option, that is always selected
on !BR2_bfin. Yes it's useless, but I think it makes the binfmt options
clearer.

Sonic, once this is changed, you have my Acked-by: Thomas Petazzoni
<thomas.petazzoni@free-electrons.com> on this patch.

Thanks!

Thomas
Arnout Vandecappelle - April 17, 2013, 4:42 p.m.
On 16/04/13 20:51, Thomas Petazzoni wrote:
> Dear Sonic Zhang,
>
> On Fri, 12 Apr 2013 18:18:23 +0800, Sonic Zhang wrote:
>
>> +# Set up target binary format
>> +choice
>> +	prompt "Target Binary Format"
>> +	default BR2_BINFMT_FDPIC if BR2_bfin
>> +	default BR2_BINFMT_ELF
>> +
>> +config BR2_BINFMT_ELF
>> +	bool "ELF"
>> +	depends on !BR2_bfin
>> +	help
>> +	  ELF (Executable and Linkable Format) is a format for libraries and
>> +	  executables used across different architectures and operating
>> +	  systems.
>
> I do agree with Arnout on one point here: we can hide this choice
> when !BR2_bfin. However, contrary to Arnout, I'd like to keep this
> BR2_BINFMT_ELF choice as an invisible option, that is always selected
> on !BR2_bfin. Yes it's useless, but I think it makes the binfmt options
> clearer.

  OK for me. Most important is that the choice is hidden when empty.

  Regards,
  Arnout

>
> Sonic, once this is changed, you have my Acked-by: Thomas Petazzoni
> <thomas.petazzoni@free-electrons.com> on this patch.
>
> Thanks!
>
> Thomas
>
Thomas Petazzoni - April 18, 2013, 7:25 a.m.
Dear Arnout Vandecappelle,

On Wed, 17 Apr 2013 18:42:24 +0200, Arnout Vandecappelle wrote:

> > I do agree with Arnout on one point here: we can hide this choice
> > when !BR2_bfin. However, contrary to Arnout, I'd like to keep this
> > BR2_BINFMT_ELF choice as an invisible option, that is always selected
> > on !BR2_bfin. Yes it's useless, but I think it makes the binfmt options
> > clearer.
> 
>   OK for me. Most important is that the choice is hidden when empty.

Agreed.

Thomas

Patch

diff --git a/arch/Config.in b/arch/Config.in
index 472b10c..2a14c29 100644
--- a/arch/Config.in
+++ b/arch/Config.in
@@ -174,6 +174,40 @@  config BR2_GCC_TARGET_ABI
 config BR2_GCC_TARGET_CPU
 	string
 
+# Set up target binary format
+choice
+	prompt "Target Binary Format"
+	default BR2_BINFMT_FDPIC if BR2_bfin
+	default BR2_BINFMT_ELF
+
+config BR2_BINFMT_ELF
+	bool "ELF"
+	depends on !BR2_bfin
+	help
+	  ELF (Executable and Linkable Format) is a format for libraries and
+	  executables used across different architectures and operating
+	  systems.
+
+config BR2_BINFMT_FDPIC
+	bool "FDPIC"
+	depends on BR2_bfin
+	help
+	  ELF FDPIC binaries are based on ELF, but allow the individual load
+	  segments of a binary to be located in memory independently of each
+	  other. This makes this format ideal for use in environments where no
+	  MMU is available.
+
+config BR2_BINFMT_FLAT
+	bool "FLAT"
+	depends on BR2_bfin
+	select BR2_PREFER_STATIC_LIB
+	help
+	  FLAT binary is a relatively simple and lightweight executable format
+	  based on the original a.out format. It is widely used in environment
+	  where no MMU is available.
+
+endchoice
+
 if BR2_arm || BR2_armeb
 source "arch/Config.in.arm"
 endif
diff --git a/toolchain/toolchain-external/Config.in b/toolchain/toolchain-external/Config.in
index 5b26aa9..6cf29aa 100644
--- a/toolchain/toolchain-external/Config.in
+++ b/toolchain/toolchain-external/Config.in
@@ -758,12 +758,12 @@  config BR2_TOOLCHAIN_EXTERNAL_PREFIX
 	default "i686-pc-linux-gnu"	 if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_X86_201109
 	default "i686-pc-linux-gnu"	 if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_X86_201203
 	default "i686-pc-linux-gnu"	 if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_X86_201209
-	default "bfin-uclinux"		 if BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2011R1 && !BR2_BFIN_FDPIC
-	default "bfin-linux-uclibc"	 if BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2011R1 && BR2_BFIN_FDPIC
-	default "bfin-uclinux"		 if BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2012R1 && !BR2_BFIN_FDPIC
-	default "bfin-linux-uclibc"	 if BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2012R1 && BR2_BFIN_FDPIC
-	default "bfin-uclinux"		 if BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2012R2 && !BR2_BFIN_FDPIC
-	default "bfin-linux-uclibc"	 if BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2012R2 && BR2_BFIN_FDPIC
+	default "bfin-uclinux"		 if BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2011R1 && BR2_BINFMT_FLAT
+	default "bfin-linux-uclibc"	 if BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2011R1 && BR2_BINFMT_FDPIC
+	default "bfin-uclinux"		 if BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2012R1 && BR2_BINFMT_FLAT
+	default "bfin-linux-uclibc"	 if BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2012R1 && BR2_BINFMT_FDPIC
+	default "bfin-uclinux"		 if BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2012R2 && BR2_BINFMT_FLAT
+	default "bfin-linux-uclibc"	 if BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2012R2 && BR2_BINFMT_FDPIC
 	default $(BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX) \
 					 if BR2_TOOLCHAIN_EXTERNAL_CUSTOM
 
diff --git a/toolchain/toolchain-external/ext-tool.mk b/toolchain/toolchain-external/ext-tool.mk
index b477bc0..92183a4 100644
--- a/toolchain/toolchain-external/ext-tool.mk
+++ b/toolchain/toolchain-external/ext-tool.mk
@@ -160,6 +160,10 @@  ifneq ($(CC_TARGET_ABI_),)
 TOOLCHAIN_EXTERNAL_CFLAGS += -mabi=$(CC_TARGET_ABI_)
 TOOLCHAIN_EXTERNAL_WRAPPER_ARGS += -DBR_ABI='"$(CC_TARGET_ABI_)"'
 endif
+ifeq ($(BR2_BINFMT_FLAT),y)
+TOOLCHAIN_EXTERNAL_CFLAGS += -Wl,-elf2flt
+TOOLCHAIN_EXTERNAL_WRAPPER_ARGS += -DBR_BINFMT_FLAT
+endif
 
 ifneq ($(BR2_TARGET_OPTIMIZATION),)
 TOOLCHAIN_EXTERNAL_CFLAGS += $(call qstrip,$(BR2_TARGET_OPTIMIZATION))
diff --git a/toolchain/toolchain-external/ext-toolchain-wrapper.c b/toolchain/toolchain-external/ext-toolchain-wrapper.c
index a92bada..9a2fc70 100644
--- a/toolchain/toolchain-external/ext-toolchain-wrapper.c
+++ b/toolchain/toolchain-external/ext-toolchain-wrapper.c
@@ -47,6 +47,9 @@  static char *predef_args[] = {
 #ifdef BR_64
 	"-m64",
 #endif
+#ifdef BR_BINFMT_FLAT
+	"-Wl,-elf2flt",
+#endif
 #ifdef BR_ADDITIONAL_CFLAGS
 	BR_ADDITIONAL_CFLAGS
 #endif