Re: [PATCH v2 2/6] BFD changes for nanoMIPS support.

Jan Beulich <[email protected]> Fri, 31 Jul 2026 14:34:37 +0200
Newsgroups gmane.comp.gnu.binutils
Message-ID <[email protected]>
On 24.07.2026 12:30, Tsing wrote:
> From: tsing <[email protected]>
> 
> bfd/
> 	* Makefile.am: Add entries for nanomips32-elf and nanomips64-elf.
> 	* Makefile.in: Regenerate.
> 	* configure: Regenerate.
> 	* configure.ac: Likewise.
> 	* config.bfd: Likewise.
> 	* archures.c: Add bfd_nanomips_arch.
> 	* reloc.c: Add nanomips relocs.
> 	* targets.c: Add naonmips_elf32_vec and nanomips_elf64_vec.
> 	* bfd-in2.h: Regenerate.
> 	* libbfd.h: Regenerate.
> 	* elf-bfd.h: Add NANOMIPS_ELF_DATA to enum elf_target_id.
> 	* elfnn-nanomips.c: New file.
> 	* elfxx-nanomips.c: New file.
> 	* elfxx-nanomips.h: New file.
> include/
> 	* elf/common.h: Add EM_NANOMIPS.
> 	* elf/nanomips.h: New file.
> ---
>  bfd/Makefile.am        |   17 +
>  bfd/Makefile.in        |   20 +
>  bfd/archures.c         |    5 +
>  bfd/bfd-in2.h          |   72 ++
>  bfd/config.bfd         |   11 +
>  bfd/configure          |    4 +
>  bfd/configure.ac       |    4 +
>  bfd/cpu-nanomips.c     |   61 ++
>  bfd/elf-bfd.h          |    1 +
>  bfd/elfnn-nanomips.c   | 1535 ++++++++++++++++++++++++++++++++++++++++
>  bfd/elfxx-nanomips.c   |  449 ++++++++++++
>  bfd/elfxx-nanomips.h   |   46 ++

Same question as for gas as to this wanting to be fully separate, new files.

> --- a/bfd/Makefile.am
> +++ b/bfd/Makefile.am
> @@ -142,6 +142,7 @@ ALL_MACHINES = \
>  	cpu-moxie.lo \
>  	cpu-msp430.lo \
>  	cpu-mt.lo \
> +	cpu-nanomips.lo \
>  	cpu-nds32.lo \
>  	cpu-nfp.lo \
>  	cpu-ns32k.lo \
> @@ -225,6 +226,7 @@ ALL_MACHINES_CFILES = \
>  	cpu-moxie.c \
>  	cpu-msp430.c \
>  	cpu-mt.c \
> +	cpu-nanomips.c \
>  	cpu-nds32.c \
>  	cpu-nfp.c \
>  	cpu-ns32k.c \
> @@ -331,6 +333,7 @@ BFD32_BACKENDS = \
>  	elf32-moxie.lo \
>  	elf32-msp430.lo \
>  	elf32-mt.lo \
> +	elf32-nanomips.lo \
>  	elf32-nds32.lo \
>  	elf32-or1k.lo \
>  	elf32-pj.lo \
> @@ -466,6 +469,7 @@ BFD32_BACKENDS_CFILES = \
>  	elf32-moxie.c \
>  	elf32-msp430.c \
>  	elf32-mt.c \
> +	elf32-nanomips.c \
>  	elf32-nds32.c \
>  	elf32-or1k.c \
>  	elf32-pj.c \
> @@ -562,6 +566,8 @@ BFD64_BACKENDS = \
>  	elf64-loongarch.lo \
>  	elf64-mips.lo \
>  	elf64-mmix.lo \
> +	elf64-nanomips.lo \
> +	elfxx-nanomips.lo \

The elfxx entry looks to belong further down.

> --- a/bfd/configure.ac
> +++ b/bfd/configure.ac
> @@ -552,6 +552,10 @@ do
>      msp430_elf32_vec)		 tb="$tb elf32-msp430.lo elf32.lo elf-attrs.lo $elf" ;;
>      msp430_elf32_ti_vec)	 tb="$tb elf32-msp430.lo elf32.lo elf-attrs.lo $elf" ;;
>      mt_elf32_vec)		 tb="$tb elf32-mt.lo elf32.lo $elf" ;;
> +    nanomips_elf32_be_vec)	 tb="$tb elf32-nanomips.lo elfxx-nanomips.lo elf32.lo $elf ecofflink.lo" ;;
> +    nanomips_elf32_le_vec)	 tb="$tb elf32-nanomips.lo elfxx-nanomips.lo elf32.lo $elf ecofflink.lo" ;;
> +    nanomips_elf64_be_vec)	 tb="$tb elf64-nanomips.lo elf64.lo elfxx-nanomips.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;;
> +    nanomips_elf64_le_vec)	 tb="$tb elf64-nanomips.lo elf64.lo elfxx-nanomips.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;;

I'm surprised that you get away without elf-attrs.lo here - didn't I see you
elsewhere have / use attributes related code?

> --- a/bfd/reloc.c
> +++ b/bfd/reloc.c
> @@ -2264,6 +2264,144 @@ ENUMX
>  ENUMDOC
>    Fujitsu Frv Relocations.
>  
> +ENUM
> +  BFD_RELOC_NANOMIPS_HI20
> +ENUMX
> +  BFD_RELOC_NANOMIPS_LO12
> +ENUMX
> +  BFD_RELOC_NANOMIPS_LO4_S2
> +ENUMX
> +  BFD_RELOC_NANOMIPS_IMM16
> +ENUMX
> +  BFD_RELOC_NANOMIPS_NEG12
> +ENUMX
> +  BFD_RELOC_NANOMIPS_GPREL7_S2
> +ENUMX
> +  BFD_RELOC_NANOMIPS_GPREL18
> +ENUMX
> +  BFD_RELOC_NANOMIPS_GPREL19_S2
> +ENUMX
> +  BFD_RELOC_NANOMIPS_GPREL16_S2
> +ENUMX
> +  BFD_RELOC_NANOMIPS_GPREL18_S3
> +ENUMX
> +  BFD_RELOC_NANOMIPS_4_PCREL_S1
> +ENUMX
> +  BFD_RELOC_NANOMIPS_7_PCREL_S1
> +ENUMX
> +  BFD_RELOC_NANOMIPS_10_PCREL_S1
> +ENUMX
> +  BFD_RELOC_NANOMIPS_11_PCREL_S1
> +ENUMX
> +  BFD_RELOC_NANOMIPS_14_PCREL_S1
> +ENUMX
> +  BFD_RELOC_NANOMIPS_21_PCREL_S1
> +ENUMX
> +  BFD_RELOC_NANOMIPS_25_PCREL_S1
> +ENUMX
> +  BFD_RELOC_NANOMIPS_PCREL_HI20
> +ENUMX
> +  BFD_RELOC_NANOMIPS_GOT_CALL
> +ENUMX
> +  BFD_RELOC_NANOMIPS_GOTPC_HI20
> +ENUMX
> +  BFD_RELOC_NANOMIPS_GOTPC_I32
> +ENUMX
> +  BFD_RELOC_NANOMIPS_GOT_LO12
> +ENUMX
> +  BFD_RELOC_NANOMIPS_GOT_DISP
> +ENUMX
> +  BFD_RELOC_NANOMIPS_GOT_PAGE
> +ENUMX
> +  BFD_RELOC_NANOMIPS_GOT_OFST
> +ENUMX
> +  BFD_RELOC_NANOMIPS_I32
> +ENUMX
> +  BFD_RELOC_NANOMIPS_GPREL_HI20
> +ENUMX
> +  BFD_RELOC_NANOMIPS_GPREL_LO12
> +ENUMX
> +  BFD_RELOC_NANOMIPS_TLS_GD
> +ENUMX
> +  BFD_RELOC_NANOMIPS_TLS_GD_I32
> +ENUMX
> +  BFD_RELOC_NANOMIPS_TLS_LD
> +ENUMX
> +  BFD_RELOC_NANOMIPS_TLS_LD_I32
> +ENUMX
> +  BFD_RELOC_NANOMIPS_TLS_DTPREL12
> +ENUMX
> +  BFD_RELOC_NANOMIPS_TLS_DTPREL16
> +ENUMX
> +  BFD_RELOC_NANOMIPS_TLS_DTPREL_I32
> +ENUMX
> +  BFD_RELOC_NANOMIPS_TLS_GOTTPREL
> +ENUMX
> +  BFD_RELOC_NANOMIPS_TLS_GOTTPREL_PC_I32
> +ENUMX
> +  BFD_RELOC_NANOMIPS_TLS_TPREL12
> +ENUMX
> +  BFD_RELOC_NANOMIPS_TLS_TPREL16
> +ENUMX
> +  BFD_RELOC_NANOMIPS_TLS_TPREL_I32
> +ENUMX
> +  BFD_RELOC_NANOMIPS_TLS_DTPMOD
> +ENUMX
> +  BFD_RELOC_NANOMIPS_TLS_DTPREL
> +ENUMX
> +  BFD_RELOC_NANOMIPS_TLS_TPREL
> +ENUMX
> +  BFD_RELOC_NANOMIPS_PC_I32
> +ENUMX
> +  BFD_RELOC_NANOMIPS_GPREL_I32
> +ENUMX
> +  BFD_RELOC_NANOMIPS_GPREL17_S1
> +ENUMX
> +  BFD_RELOC_NANOMIPS_NEG
> +ENUMX
> +  BFD_RELOC_NANOMIPS_ASHIFTR_1
> +ENUMX
> +  BFD_RELOC_NANOMIPS_UNSIGNED_8
> +ENUMX
> +  BFD_RELOC_NANOMIPS_UNSIGNED_16
> +ENUMX
> +  BFD_RELOC_NANOMIPS_SIGNED_8
> +ENUMX
> +  BFD_RELOC_NANOMIPS_SIGNED_16
> +ENUMX
> +  BFD_RELOC_NANOMIPS_EH
> +ENUMX
> +  BFD_RELOC_NANOMIPS_JUMP_SLOT
> +ENUMX
> +  BFD_RELOC_NANOMIPS_ALIGN
> +ENUMX
> +  BFD_RELOC_NANOMIPS_FILL
> +ENUMX
> +  BFD_RELOC_NANOMIPS_MAX
> +ENUMX
> +  BFD_RELOC_NANOMIPS_INSN32
> +ENUMX
> +  BFD_RELOC_NANOMIPS_INSN16
> +ENUMX
> +  BFD_RELOC_NANOMIPS_FIXED
> +ENUMX
> +  BFD_RELOC_NANOMIPS_RELAX
> +ENUMX
> +  BFD_RELOC_NANOMIPS_NORELAX
> +ENUMX
> +  BFD_RELOC_NANOMIPS_SAVERESTORE
> +ENUMX
> +  BFD_RELOC_NANOMIPS_JALR16
> +ENUMX
> +  BFD_RELOC_NANOMIPS_JALR32
> +ENUMX
> +  BFD_RELOC_NANOMIPS_COPY

Is there a reason you can't use BFD_RELOC_COPY in place of this custom
one?

> --- a/include/elf/common.h
> +++ b/include/elf/common.h
> @@ -360,6 +360,7 @@
>  #define EM_U16_U8CORE	260	/* LAPIS nX-U16/U8 */
>  #define EM_TACHYUM	261	/* Tachyum */
>  #define EM_56800EF	262	/* NXP 56800EF Digital Signal Controller (DSC) */
> +#define EM_NANOMIPS	263	/* MIPS Tech nanoMIPS architecture.  */

As the ELF spec itself is in a pretty sorry state (unless things have improved
lately), would you please provide (in the patch description) some reference as
to this number being officially allocated?

Jan