All of lore.kernel.org
 help / color / mirror / Atom feed
From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH] Clarify MIPS ABIs support
Date: Wed, 25 Jul 2012 18:29:43 +0200	[thread overview]
Message-ID: <20120725182943.0a906bf3@skate> (raw)
In-Reply-To: <1343162828-13060-1-git-send-email-thomas.petazzoni@free-electrons.com>

Hello Gustavo,

If you could have a look at the below patch, and provide your comments
or Acked-by, it would be great.

Thanks a lot!

Thomas

Le Tue, 24 Jul 2012 22:47:08 +0200,
Thomas Petazzoni <thomas.petazzoni@free-electrons.com> a ?crit :

> Practically speaking, MIPS has three useful ABIs:
> 
>  * o32 is for 32-bits CPUs, or 64-bit CPUs running only a 32-bit subset
>    of the instruction set.
>  * n32 is for 64-bits CPUs only. It has 32-bits pointers and long
>    integers.
>  * n64 is for 64-bits CPUs only. It has 64-bits pointers and long
>    integers.
> 
> See http://www.linux-mips.org/wiki/MIPS_ABI_History and
> http://www.linux-mips.org/wiki/WhatsWrongWithO32N32N64 for more
> details.
> 
> So, this commit reworks the Buildroot MIPS support by:
> 
>  * Renaming the n32 ABI option to BR2_MIPS_NABI32, for consistency
>    with BR2_MIPS_OABI32.
> 
>  * Renaming the n64 ABI option to BR2_MIPS_NABI64, for consistency
>    with BR2_MIPS_OABI32.
> 
>  * Make the n32 and n64 ABI selections select the BR2_ARCH_IS_64,
>    since those ABIs are valid on 64-bits CPUs only.
> 
>  * Removing the o64 ABI, which is practicaly never used.
> 
>  * Removing the "none" ABI, which really doesn't make sense.
> 
>  * Introduce the mips64 and mips64el architecture names when a 64-bits
>    MIPS ABI is choosen. This will fix build issue like
>    http://autobuild.buildroot.org/results/9b8c5ea86c953a89e85e7b67e9221de41773f652/build-end.log
>    where gmp was confused by the fact of having a 32 bits architecture
>    (detected by the mips- architecture part of the tuple) but 64 bits
>    integer size when compiling.
> 
>  * Adjust the uclibc.mk logic to support the new mips64/mips64el
>    architecture names, and take into account the renaming of the ABI
>    options.
> 
> This has been build tested by generating Buildroot toolchains and
> compiling a few packages for MIPS o32, MIPS n32 and MIPS n64.
> 
> This work is originally based on prior work done by Gustavo Zacarias.
> 
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
> ---
>  package/Makefile.in        |    2 +-
>  target/Config.in.arch      |   28 +++++++++++-----------------
>  toolchain/uClibc/uclibc.mk |    9 ++++++---
>  3 files changed, 18 insertions(+), 21 deletions(-)
> 
> diff --git a/package/Makefile.in b/package/Makefile.in
> index 6fad224..21b8634 100644
> --- a/package/Makefile.in
> +++ b/package/Makefile.in
> @@ -87,7 +87,7 @@ endif
>  
>  TARGET_CFLAGS=$(TARGET_ABI) $(TARGET_OPTIMIZATION) $(TARGET_DEBUGGING)
>  
> -ifeq ($(findstring yy,$(BR2_mips)$(BR2_MIPS_ABI64)),yy)
> +ifeq ($(findstring yy,$(BR2_mips)$(BR2_MIPS_NABI64)),yy)
>  TARGET_CFLAGS+=-fno-pic -mno-abicalls
>  endif
>  
> diff --git a/target/Config.in.arch b/target/Config.in.arch
> index e7aec56..0ef59ef 100644
> --- a/target/Config.in.arch
> +++ b/target/Config.in.arch
> @@ -271,26 +271,20 @@ choice
>  	prompt "Target ABI"
>  	depends on BR2_mips || BR2_mipsel
>  	default BR2_MIPS_OABI32 if BR_mips_32 || BR_mips_32r2
> -	default BR2_MIPS_ABI32 if BR_mips_64 || BR_mips_64r2
> +	default BR2_MIPS_NABI32 if BR_mips_64 || BR_mips_64r2
>  	help
>  	  Application Binary Interface to use
>  
>  config BR2_MIPS_OABI32
>  	bool "o32"
> -config BR2_MIPS_ABI32
> +config BR2_MIPS_NABI32
>  	bool "n32"
> +	select BR2_ARCH_IS_64
>  	depends on BR2_mips_3 || BR2_mips_4 || BR2_mips_64 || BR2_mips_64r2 || BR2_mips_16
> -config BR2_MIPS_ABI64
> +config BR2_MIPS_NABI64
>  	bool "n64"
> +	select BR2_ARCH_IS_64
>  	depends on BR2_mips_3 || BR2_mips_4 || BR2_mips_64 || BR2_mips_64r2 || BR2_mips_16
> -config BR2_MIPS_OABI64
> -	bool "o64"
> -	depends on BR2_mips_3 || BR2_mips_4 || BR2_mips_64 || BR2_mips_64r2 || BR2_mips_16
> -config BR2_MIPS_ABI_none
> -	bool "unspecified"
> -	depends on BR2_mips_16
> -	help
> -	  Unspecified ABI leaves ABI selection blank.
>  endchoice
>  
>  choice
> @@ -688,8 +682,10 @@ config BR2_ARCH
>  	default "i686"		if BR2_x86_athlon_4
>  	default "m68k"		if BR2_m68k
>  	default "microblaze"	if BR2_microblaze
> -	default "mips"		if BR2_mips
> -	default "mipsel"	if BR2_mipsel
> +	default "mips"		if BR2_mips && !BR2_ARCH_IS_64
> +	default "mipsel"	if BR2_mipsel && !BR2_ARCH_IS_64
> +	default "mips64"	if BR2_mips && BR2_ARCH_IS_64
> +	default "mips64el"	if BR2_mipsel && BR2_ARCH_IS_64
>  	default "powerpc"	if BR2_powerpc
>  	default "sh2"		if BR2_sh2
>  	default "sh2a"		if BR2_sh2a
> @@ -904,10 +900,8 @@ config BR2_GCC_TARGET_ABI
>  	default aapcs		if BR2_arm_dunno
>  	default aapcs-linux	if BR2_ARM_EABI
>  	default 32		if BR2_MIPS_OABI32
> -	default n32		if BR2_MIPS_ABI32
> -	default eabi		if BR2_MIPS_EABI
> -	default o64		if BR2_MIPS_OABI64
> -	default 64		if BR2_MIPS_ABI64
> +	default n32		if BR2_MIPS_NABI32
> +	default 64		if BR2_MIPS_NABI64
>  	default mmixware	if BR2_mmix && BR2_MMIX_ABI_native
>  	default gnu		if BR2_mmix && !BR2_MMIX_ABI_native
>  	default altivec		if BR2_powerpc && BR2_PPC_ABI_altivec
> diff --git a/toolchain/uClibc/uclibc.mk b/toolchain/uClibc/uclibc.mk
> index 9d0b6db..aff0a60 100644
> --- a/toolchain/uClibc/uclibc.mk
> +++ b/toolchain/uClibc/uclibc.mk
> @@ -38,6 +38,7 @@ UCLIBC_TARGET_ARCH:=$(shell $(SHELL) -c "echo $(ARCH) | sed \
>  		-e 's/sh[234].*/sh/' \
>  		-e 's/mips.*/mips/' \
>  		-e 's/mipsel.*/mips/' \
> +		-e 's/mips64el.*/mips/' \
>  		-e 's/cris.*/cris/' \
>  		-e 's/xtensa.*/xtensa/' \
>  ")
> @@ -45,6 +46,8 @@ UCLIBC_TARGET_ARCH:=$(shell $(SHELL) -c "echo $(ARCH) | sed \
>  UCLIBC_TARGET_ENDIAN:=$(shell $(SHELL) -c "echo $(ARCH) | sed \
>  		-e 's/armeb/BIG/' \
>  		-e 's/arm/LITTLE/' \
> +		-e 's/mips64el/LITTLE/' \
> +		-e 's/mips64/BIG/' \
>  		-e 's/mipsel/LITTLE/' \
>  		-e 's/mips/BIG/' \
>  		-e 's/sh.*eb/BIG/' \
> @@ -155,13 +158,13 @@ ifeq ($(UCLIBC_TARGET_ARCH),mips)
>  	 /bin/echo "# CONFIG_MIPS_ISA_MIPS32R2 is not set"; \
>  	 /bin/echo "# CONFIG_MIPS_ISA_MIPS64 is not set"; \
>  	) >> $(UCLIBC_DIR)/.oldconfig
> -ifeq ($(BR2_MIPS_OABI),y)
> +ifeq ($(BR2_MIPS_OABI32),y)
>  	$(SED) 's/.*\(CONFIG_MIPS_O32_ABI\).*/\1=y/' $(UCLIBC_DIR)/.oldconfig
>  endif
> -ifeq ($(BR2_MIPS_ABI32),y)
> +ifeq ($(BR2_MIPS_NABI32),y)
>  	$(SED) 's/.*\(CONFIG_MIPS_N32_ABI\).*/\1=y/' $(UCLIBC_DIR)/.oldconfig
>  endif
> -ifeq ($(BR2_MIPS_ABI64),y)
> +ifeq ($(BR2_MIPS_NABI64),y)
>  	$(SED) 's/.*\(CONFIG_MIPS_N64_ABI\).*/\1=y/' $(UCLIBC_DIR)/.oldconfig
>  endif
>  ifeq ($(BR2_mips_1),y)



-- 
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com

  reply	other threads:[~2012-07-25 16:29 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-07-24 20:47 [Buildroot] [PATCH] Clarify MIPS ABIs support Thomas Petazzoni
2012-07-25 16:29 ` Thomas Petazzoni [this message]
2012-07-25 17:32 ` Arnout Vandecappelle
2012-07-25 18:25   ` Thomas Petazzoni
2012-07-25 18:31     ` Thomas Petazzoni
2012-07-25 19:15       ` Thomas Petazzoni
2012-07-26 16:38         ` Arnout Vandecappelle
2012-07-27  6:31           ` Thomas Petazzoni
2012-07-26 19:01         ` Thomas Petazzoni
2012-07-26 19:38           ` Gustavo Zacarias
2012-07-27  6:56             ` Thomas Petazzoni
2012-07-27 10:17               ` Gustavo Zacarias
2012-07-25 20:25     ` Gustavo Zacarias
2012-07-25 20:38       ` Thomas Petazzoni

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=20120725182943.0a906bf3@skate \
    --to=thomas.petazzoni@free-electrons.com \
    --cc=buildroot@busybox.net \
    /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.