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