binutils-gdb/include
Jose E. Marchesi e9bffec9af opcodes: discriminate endianness and insn-endianness in CGEN ports
The CGEN support code in opcodes accesses instruction contents using a
couple of functions defined in cgen-opc.c: cgen_get_insn_value and
cgen_put_insn_value.  These functions use the "instruction endianness"
in the CPU description to order the read/written bytes.

The process of writing an instruction to the object file is:

  a) cgen_put_insn_value        ;; Writes out the opcodes.
  b) ARCH_cgen_insert_operand
       insert_normal
         insert_1
           cgen_put_insn_value  ;; Writes out the bytes of the
                                ;; operand.

Likewise, the process of reading an instruction from the object file
is:

  a) cgen_get_insn_value        ;; Reads the opcodes.
  b) ARCH_cgen_extract_operand
       extract_normal
         extract_1
           cgen_get_insn_value  ;; Reads in the bytes of the
                                ;; operand.

As can be seen above, cgen_{get,put}_insn_value are used to both
process the instruction opcodes (the constant fields conforming the
base instruction) and also the values of the instruction operands,
such as immediates.

This is problematic for architectures in which the endianness of
instructions is different to the endianness of data.  An example is
BPF, where instructions are always encoded big-endian but the data may
be either big or little.

This patch changes the cgen_{get,put}_insn_value functions in order to
get an extra argument with the endianness to use, and adapts the
existin callers to these functions in order to provide cd->endian or
cd->insn_endian, whatever appropriate.  Callers like extract_1 and
insert_1 pass cd->endian (since they are reading/writing operand
values) while callers reading/writing the base instruction pass
cd->insn_endian instead.

A few little adjustments have been needed in some existing CGEN based
ports:
* The BPF assembler uses cgen_put_insn_value.  It has been adapted to
  pass the new endian argument.
* The mep port has code in mep.opc that uses cgen_{get,put}_insn_value.
  It has been adapted to pass the new endianargument.  Ditto for a
  call in the assembler.

Tested with --enable-targets=all.
Regested in all supported targets.
No regressions.

include/ChangeLog:

2020-06-04  Jose E. Marchesi  <jose.marchesi@oracle.com>

	* opcode/cgen.h: Get an `endian' argument in both
	cgen_get_insn_value and cgen_put_insn_value.

opcodes/ChangeLog:

2020-06-04  Jose E. Marchesi  <jose.marchesi@oracle.com>

	* cgen-opc.c (cgen_get_insn_value): Get an `endian' argument.
	(cgen_put_insn_value): Likewise.
	(cgen_lookup_insn): Pass endianness to cgen_{get,put}_insn_value.
	* cgen-dis.in (print_insn): Likewise.
	* cgen-ibld.in (insert_1): Likewise.
	(insert_1): Likewise.
	(insert_insn_normal): Likewise.
	(extract_1): Likewise.
	* bpf-dis.c: Regenerate.
	* bpf-ibld.c: Likewise.
	* bpf-ibld.c: Likewise.
	* cgen-dis.in: Likewise.
	* cgen-ibld.in: Likewise.
	* cgen-opc.c: Likewise.
	* epiphany-dis.c: Likewise.
	* epiphany-ibld.c: Likewise.
	* fr30-dis.c: Likewise.
	* fr30-ibld.c: Likewise.
	* frv-dis.c: Likewise.
	* frv-ibld.c: Likewise.
	* ip2k-dis.c: Likewise.
	* ip2k-ibld.c: Likewise.
	* iq2000-dis.c: Likewise.
	* iq2000-ibld.c: Likewise.
	* lm32-dis.c: Likewise.
	* lm32-ibld.c: Likewise.
	* m32c-dis.c: Likewise.
	* m32c-ibld.c: Likewise.
	* m32r-dis.c: Likewise.
	* m32r-ibld.c: Likewise.
	* mep-dis.c: Likewise.
	* mep-ibld.c: Likewise.
	* mt-dis.c: Likewise.
	* mt-ibld.c: Likewise.
	* or1k-dis.c: Likewise.
	* or1k-ibld.c: Likewise.
	* xc16x-dis.c: Likewise.
	* xc16x-ibld.c: Likewise.
	* xstormy16-dis.c: Likewise.
	* xstormy16-ibld.c: Likewise.

gas/ChangeLog:

2020-06-04  Jose E. Marchesi  <jose.marchesi@oracle.com>

	* cgen.c (gas_cgen_finish_insn): Pass the endianness to
	cgen_put_insn_value.
	(gas_cgen_md_apply_fix): Likewise.
	(gas_cgen_md_apply_fix): Likewise.
	* config/tc-bpf.c (md_apply_fix): Pass data endianness to
	cgen_put_insn_value.
	* config/tc-mep.c (mep_check_ivc2_scheduling): Pass endianness to
	cgen_put_insn_value.

cpu/ChangeLog:

2020-06-02  Jose E. Marchesi  <jose.marchesi@oracle.com>

	* mep.opc (print_slot_insn): Pass the insn endianness to
	cgen_get_insn_value.
2020-06-04 16:17:42 +02:00
..
aout Fixes for the magic number used in PDP11 AOUT binaries. 2020-04-14 14:41:27 +01:00
cgen Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
coff coff-go32-exe: support variable-length stubs 2020-04-02 14:31:43 +01:00
elf ELF: Updated comments for ET_EXEC and ET_DYN 2020-05-25 11:26:48 -07:00
gdb Update copyright year range in all GDB files. 2020-01-01 10:20:53 +04:00
mach-o Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
opcode opcodes: discriminate endianness and insn-endianness in CGEN ports 2020-06-04 16:17:42 +02:00
som ubsan: som: left shift of 1 by 31 places 2020-03-10 17:58:02 +10:30
vms Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
alloca-conf.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
ansidecl.h Update libiberty sources with changes in the gcc mainline. 2020-01-17 14:13:22 +00:00
bfdlink.h ld: Add --warn-textrel and obsolete --warn-shared-textrel 2020-05-27 04:54:10 -07:00
binary-io.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
bout.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
ChangeLog opcodes: discriminate endianness and insn-endianness in CGEN ports 2020-06-04 16:17:42 +02:00
ChangeLog-0415
ChangeLog-2016
ChangeLog-2017 ChangeLog rotation 2018-01-03 17:49:42 +10:30
ChangeLog-2018 ChangeLog rotation 2019-01-01 21:25:40 +10:30
ChangeLog-2019 ChangeLog rotation 2020-01-01 18:12:08 +10:30
ChangeLog-9103
COPYING
COPYING3
ctf-api.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
ctf.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
demangle.h Update libiberty sources with changes in the gcc mainline. 2020-01-17 14:13:22 +00:00
diagnostics.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
dis-asm.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
dwarf2.def Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
dwarf2.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
dyn-string.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
environ.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
fibheap.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
filenames.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
floatformat.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
fnmatch.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
fopen-bin.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
fopen-same.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
fopen-vms.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
gcc-c-fe.def Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
gcc-c-interface.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
gcc-cp-fe.def Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
gcc-cp-interface.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
gcc-interface.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
getopt.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
hashtab.h Merge upstream GCC changes for include/ and libiberty/ directories 2020-02-25 17:04:42 +00:00
hp-symtab.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
leb128.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
libiberty.h Update libiberty sources with changes in the gcc mainline. 2020-01-17 14:13:22 +00:00
longlong.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
lto-symtab.h include: Sync lto-symtab.h and plugin-api.h with GCC 2020-03-21 03:39:18 -07:00
MAINTAINERS Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
md5.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
oasys.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
objalloc.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
obstack.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
os9k.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
partition.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
plugin-api.h include: Sync plugin-api.h with GCC 2020-04-01 02:36:11 -07:00
progress.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
safe-ctype.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
sha1.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
simple-object.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
sort.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
splay-tree.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
symcat.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
timeval-utils.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
vtv-change-permission.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
xregex2.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
xregex.h
xtensa-config.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
xtensa-isa-internal.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
xtensa-isa.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30