[U-Boot] [PATCH 1/5] arm: include: Import unified.h from Linux kernel

Simon Glass sjg at chromium.org
Sat Apr 9 20:34:47 CEST 2016


Hi Marek,

On 20 March 2016 at 10:15, Marek Vasut <marex at denx.de> wrote:
> Import unified.h from Linux kernel 4.4.6 , commit
> 0d1912303e54ed1b2a371be0bba51c384dd57326 . This header file contains
> macros used in libgcc functions in Linux kernel on ARM and will be
> needed for the libgcc sync.
>
> Since unified.h defines the W(instr) macro, we must drop this from
> the macro from memcpy.S , otherwise this triggers a warning about
> symbol redefinition. In order to keep the changes to unified.h to
> the minimum, tweak arch/arm/lib/Makefile such that it defines new
> CONFIG_THUMB2_KERNEL macro, which is already checked by unified.h,
> only if Thumb build is enabled, but the target does not support
> Thumb2 . This way we can remove ad-hoc -DMEMSET_NO_THUMB_BUILD and
> -DMEMCPY_NO_THUMB_BUILD and we do not change the logic.
>
> Signed-off-by: Marek Vasut <marex at denx.de>
> Cc: Albert Aribaud <albert.u.boot at aribaud.net>
> Cc: Masahiro Yamada <yamada.masahiro at socionext.com>
> Cc: Simon Glass <sjg at chromium.org>
> Cc: Tom Rini <trini at konsulko.com>
> ---
>  arch/arm/include/asm/assembler.h |   1 +
>  arch/arm/include/asm/unified.h   | 140 +++++++++++++++++++++++++++++++++++++++
>  arch/arm/lib/Makefile            |   6 +-
>  arch/arm/lib/memcpy.S            |   6 --
>  4 files changed, 144 insertions(+), 9 deletions(-)
>  create mode 100644 arch/arm/include/asm/unified.h

Reviewed-by: Simon Glass <sjg at chromium.org>

Can we use SPDX?

>
> diff --git a/arch/arm/include/asm/assembler.h b/arch/arm/include/asm/assembler.h
> index 11b80fb..ae1e42f 100644
> --- a/arch/arm/include/asm/assembler.h
> +++ b/arch/arm/include/asm/assembler.h
> @@ -15,6 +15,7 @@
>   */
>
>  #include <config.h>
> +#include <asm/unified.h>
>
>  /*
>   * Endian independent macros for shifting bytes within registers.
> diff --git a/arch/arm/include/asm/unified.h b/arch/arm/include/asm/unified.h
> new file mode 100644
> index 0000000..a91ae49
> --- /dev/null
> +++ b/arch/arm/include/asm/unified.h
> @@ -0,0 +1,140 @@
> +/*
> + * include/asm-arm/unified.h - Unified Assembler Syntax helper macros
> + *
> + * Copyright (C) 2008 ARM Limited
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
> + */
> +
> +#ifndef __ASM_UNIFIED_H
> +#define __ASM_UNIFIED_H
> +
> +#if defined(__ASSEMBLY__) && defined(CONFIG_ARM_ASM_UNIFIED)
> +       .syntax unified
> +#endif
> +
> +#ifdef CONFIG_CPU_V7M
> +#define AR_CLASS(x...)
> +#define M_CLASS(x...)  x
> +#else
> +#define AR_CLASS(x...) x
> +#define M_CLASS(x...)
> +#endif
> +
> +#ifdef CONFIG_THUMB2_KERNEL
> +
> +#if __GNUC__ < 4
> +#error Thumb-2 kernel requires gcc >= 4
> +#endif
> +
> +/* The CPSR bit describing the instruction set (Thumb) */
> +#define PSR_ISETSTATE  PSR_T_BIT
> +
> +#define ARM(x...)
> +#define THUMB(x...)    x
> +#ifdef __ASSEMBLY__
> +#define W(instr)       instr.w
> +#else
> +#define WASM(instr)    #instr ".w"
> +#endif
> +
> +#else  /* !CONFIG_THUMB2_KERNEL */
> +
> +/* The CPSR bit describing the instruction set (ARM) */
> +#define PSR_ISETSTATE  0
> +
> +#define ARM(x...)      x
> +#define THUMB(x...)
> +#ifdef __ASSEMBLY__
> +#define W(instr)       instr
> +#else
> +#define WASM(instr)    #instr
> +#endif
> +
> +#endif /* CONFIG_THUMB2_KERNEL */
> +
> +#ifndef CONFIG_ARM_ASM_UNIFIED
> +
> +/*
> + * If the unified assembly syntax isn't used (in ARM mode), these
> + * macros expand to an empty string
> + */
> +#ifdef __ASSEMBLY__
> +       .macro  it, cond
> +       .endm
> +       .macro  itt, cond
> +       .endm
> +       .macro  ite, cond
> +       .endm
> +       .macro  ittt, cond
> +       .endm
> +       .macro  itte, cond
> +       .endm
> +       .macro  itet, cond
> +       .endm
> +       .macro  itee, cond
> +       .endm
> +       .macro  itttt, cond
> +       .endm
> +       .macro  ittte, cond
> +       .endm
> +       .macro  ittet, cond
> +       .endm
> +       .macro  ittee, cond
> +       .endm
> +       .macro  itett, cond
> +       .endm
> +       .macro  itete, cond
> +       .endm
> +       .macro  iteet, cond
> +       .endm
> +       .macro  iteee, cond
> +       .endm
> +#else  /* !__ASSEMBLY__ */
> +__asm__(
> +"      .macro  it, cond\n"
> +"      .endm\n"
> +"      .macro  itt, cond\n"
> +"      .endm\n"
> +"      .macro  ite, cond\n"
> +"      .endm\n"
> +"      .macro  ittt, cond\n"
> +"      .endm\n"
> +"      .macro  itte, cond\n"
> +"      .endm\n"
> +"      .macro  itet, cond\n"
> +"      .endm\n"
> +"      .macro  itee, cond\n"
> +"      .endm\n"
> +"      .macro  itttt, cond\n"
> +"      .endm\n"
> +"      .macro  ittte, cond\n"
> +"      .endm\n"
> +"      .macro  ittet, cond\n"
> +"      .endm\n"
> +"      .macro  ittee, cond\n"
> +"      .endm\n"
> +"      .macro  itett, cond\n"
> +"      .endm\n"
> +"      .macro  itete, cond\n"
> +"      .endm\n"
> +"      .macro  iteet, cond\n"
> +"      .endm\n"
> +"      .macro  iteee, cond\n"
> +"      .endm\n");
> +#endif /* __ASSEMBLY__ */
> +
> +#endif /* CONFIG_ARM_ASM_UNIFIED */
> +
> +#endif /* !__ASM_UNIFIED_H */
> diff --git a/arch/arm/lib/Makefile b/arch/arm/lib/Makefile
> index 7a0fb58..a930744 100644
> --- a/arch/arm/lib/Makefile
> +++ b/arch/arm/lib/Makefile
> @@ -80,8 +80,8 @@ CFLAGS_cache-cp15.o := -marm
>
>  AFLAGS_REMOVE_memset.o := -mthumb -mthumb-interwork
>  AFLAGS_REMOVE_memcpy.o := -mthumb -mthumb-interwork
> -AFLAGS_memset.o := -DMEMSET_NO_THUMB_BUILD
> -AFLAGS_memcpy.o := -DMEMCPY_NO_THUMB_BUILD
> -
> +else
> +AFLAGS_memset.o := -DCONFIG_THUMB2_KERNEL
> +AFLAGS_memcpy.o := -DCONFIG_THUMB2_KERNEL
>  endif
>  endif
> diff --git a/arch/arm/lib/memcpy.S b/arch/arm/lib/memcpy.S
> index 7d9fc0f..00602e9 100644
> --- a/arch/arm/lib/memcpy.S
> +++ b/arch/arm/lib/memcpy.S
> @@ -13,12 +13,6 @@
>  #include <linux/linkage.h>
>  #include <asm/assembler.h>
>
> -#if defined(CONFIG_SYS_THUMB_BUILD) && !defined(MEMCPY_NO_THUMB_BUILD)
> -#define W(instr)       instr.w
> -#else
> -#define W(instr)       instr
> -#endif
> -
>  #define LDR1W_SHIFT    0
>  #define STR1W_SHIFT    0
>
> --
> 2.7.0
>

Regards,
Simon


More information about the U-Boot mailing list