aboutsummaryrefslogtreecommitdiff
path: root/include/elf
diff options
context:
space:
mode:
authorClaudiu Zissulescu <claziss@synopsys.com>2023-09-25 10:55:51 +0300
committerClaudiu Zissulescu <claziss@gmail.com>2023-09-25 10:55:51 +0300
commit04414221df53bb5129e34bec354dae3121db436a (patch)
treef48b3ff309a2710bd1898134c2039141418b7218 /include/elf
parent4deb1ee57fdb711cac6f36fed75b3c8cb5112d99 (diff)
downloadgdb-04414221df53bb5129e34bec354dae3121db436a.zip
gdb-04414221df53bb5129e34bec354dae3121db436a.tar.gz
gdb-04414221df53bb5129e34bec354dae3121db436a.tar.bz2
arc: Update opcode related include files for ARCv3.
Add new ARCv3 CPUs and required bits to decode/encode ARCv3 ISA opcodes. Fix 32 bit relocations which were set as signed but should be bitfield: ARC_32_ME, ARC_GLOB_DAT, ARC_JMP_SLOT, ARC_RELATIVE. Remove non-ABI relocation ARC_32_ME_S. include/ xxxx-xx-xx Claudiu Zissulescu <claziss@synopsys.com> Cupertino Miranda <cupertinomiranda@gmail.com> Bruno Mauricio <brunoasmauricio@gmail.com> * include/elf/arc-cpu.def: Add new HS5x and HS6x CPUs. * include/elf/arc-reloc.def: Add new ARC64 relocations. * include/elf/arc.h (EF_ARC_CPU_ARC64): New define. * include/opcode/arc-attrs.h (FEATURE_LIST_NAME): Update predicate. * include/opcode/arc-func.h: Update formating. (replace_disp8ls): New function. (replace_disp9s): Likewise. (replace_disp6s): Likewise. (replace_disp7s): Likewise. (replace_disp12s): Likewise. * include/opcode/arc.h (ARC_OPCODE_ARC64): New define. (ARC_OPCODE_ARC32): Likewise. (ARC_OPERAND_FP): Likewise. (HARD_FIELDF): Likewise. (ARC_OPCODE_ARCVx): New macro. (arc_flag_class): Update structure to hold new extract/insert functions for flags. (INSN3OP): Update macro. (FP_SIZE, TPOF, DPOF, SOPF, COPF, CONVOPS): New enums. Signed-off-by: Claudiu Zissulescu <claziss@synopsys.com>
Diffstat (limited to 'include/elf')
-rw-r--r--include/elf/arc-cpu.def63
-rw-r--r--include/elf/arc-reloc.def171
-rw-r--r--include/elf/arc.h1
3 files changed, 195 insertions, 40 deletions
diff --git a/include/elf/arc-cpu.def b/include/elf/arc-cpu.def
index 8b039a1..49a35ab 100644
--- a/include/elf/arc-cpu.def
+++ b/include/elf/arc-cpu.def
@@ -19,35 +19,40 @@
02110-1301, USA. */
-ARC_CPU_TYPE_A7xx (arc700, 0x00),
-ARC_CPU_TYPE_A7xx (nps400, NPS400),
-
-ARC_CPU_TYPE_AV2EM (arcem, 0x00),
-ARC_CPU_TYPE_AV2EM (em, 0x00),
-ARC_CPU_TYPE_AV2EM (em_mini, 0x00),
-ARC_CPU_TYPE_AV2EM (em4, CD),
-ARC_CPU_TYPE_AV2EM (em4_dmips, CD),
-ARC_CPU_TYPE_AV2EM (em4_fpus, CD),
-ARC_CPU_TYPE_AV2EM (em4_fpuda, CD | DPA),
-ARC_CPU_TYPE_AV2EM (quarkse_em, CD | SPX | DPX),
-
-ARC_CPU_TYPE_AV2HS (archs, CD),
-ARC_CPU_TYPE_AV2HS (hs, CD),
-ARC_CPU_TYPE_AV2HS (hs34, CD),
-ARC_CPU_TYPE_AV2HS (hs38, CD),
-ARC_CPU_TYPE_AV2HS (hs38_linux, CD),
-ARC_CPU_TYPE_AV2HS (hs4x, CD),
-ARC_CPU_TYPE_AV2HS (hs4xd, CD),
-ARC_CPU_TYPE_AV2HS (hs4x_rel31, CD),
-
-ARC_CPU_TYPE_A6xx (arc600, 0x00),
-ARC_CPU_TYPE_A6xx (arc600_norm, 0x00),
-ARC_CPU_TYPE_A6xx (arc600_mul64, 0x00),
-ARC_CPU_TYPE_A6xx (arc600_mul32x16, 0x00),
-ARC_CPU_TYPE_A6xx (arc601, 0x00),
-ARC_CPU_TYPE_A6xx (arc601_norm, 0x00),
-ARC_CPU_TYPE_A6xx (arc601_mul64, 0x00),
-ARC_CPU_TYPE_A6xx (arc601_mul32x16, 0x00),
+ARC_CPU_TYPE_A64x (hs6x, CD | DIV)
+ARC_CPU_TYPE_A32x (hs5x, CD | DIV)
+ARC_CPU_TYPE_A64x (hs68, CD | DIV)
+ARC_CPU_TYPE_A32x (hs58, CD | DIV)
+
+ARC_CPU_TYPE_A7xx (arc700, 0x00)
+ARC_CPU_TYPE_A7xx (nps400, NPS400)
+
+ARC_CPU_TYPE_AV2EM (arcem, 0x00)
+ARC_CPU_TYPE_AV2EM (em, 0x00)
+ARC_CPU_TYPE_AV2EM (em_mini, 0x00)
+ARC_CPU_TYPE_AV2EM (em4, CD)
+ARC_CPU_TYPE_AV2EM (em4_dmips, CD)
+ARC_CPU_TYPE_AV2EM (em4_fpus, CD)
+ARC_CPU_TYPE_AV2EM (em4_fpuda, CD | DPA)
+ARC_CPU_TYPE_AV2EM (quarkse_em, CD | SPX | DPX)
+
+ARC_CPU_TYPE_AV2HS (archs, CD)
+ARC_CPU_TYPE_AV2HS (hs, CD)
+ARC_CPU_TYPE_AV2HS (hs34, CD)
+ARC_CPU_TYPE_AV2HS (hs38, CD)
+ARC_CPU_TYPE_AV2HS (hs38_linux, CD)
+ARC_CPU_TYPE_AV2HS (hs4x, CD)
+ARC_CPU_TYPE_AV2HS (hs4xd, CD)
+ARC_CPU_TYPE_AV2HS (hs4x_rel31, CD)
+
+ARC_CPU_TYPE_A6xx (arc600, 0x00)
+ARC_CPU_TYPE_A6xx (arc600_norm, 0x00)
+ARC_CPU_TYPE_A6xx (arc600_mul64, 0x00)
+ARC_CPU_TYPE_A6xx (arc600_mul32x16, 0x00)
+ARC_CPU_TYPE_A6xx (arc601, 0x00)
+ARC_CPU_TYPE_A6xx (arc601_norm, 0x00)
+ARC_CPU_TYPE_A6xx (arc601_mul64, 0x00)
+ARC_CPU_TYPE_A6xx (arc601_mul32x16, 0x00)
ARC_CPU_TYPE_NONE
diff --git a/include/elf/arc-reloc.def b/include/elf/arc-reloc.def
index 9d0e42e..fd04a55 100644
--- a/include/elf/arc-reloc.def
+++ b/include/elf/arc-reloc.def
@@ -64,6 +64,13 @@ ARC_RELOC_HOWTO(ARC_32, 4, \
bitfield, \
( S + A ))
+ARC_RELOC_HOWTO(ARC_64, 5, \
+ 8, \
+ 64, \
+ replace_word64, \
+ bitfield, \
+ ( S + A ))
+
ARC_RELOC_HOWTO(ARC_N8, 8, \
1, \
8, \
@@ -201,14 +208,7 @@ ARC_RELOC_HOWTO(ARC_32_ME, 27, \
4, \
32, \
replace_limm, \
- signed, \
- ( ME ( ( S + A ) ) ))
-
-ARC_RELOC_HOWTO(ARC_32_ME_S, 105, \
- 4, \
- 32, \
- replace_limms, \
- signed, \
+ bitfield, \
( ME ( ( S + A ) ) ))
ARC_RELOC_HOWTO(ARC_N32_ME, 28, \
@@ -369,21 +369,21 @@ ARC_RELOC_HOWTO(ARC_GLOB_DAT, 54, \
4, \
32, \
replace_word32, \
- signed, \
+ bitfield, \
S)
ARC_RELOC_HOWTO(ARC_JMP_SLOT, 55, \
4, \
32, \
replace_word32, \
- signed, \
+ bitfield, \
( ME ( S ) ))
ARC_RELOC_HOWTO(ARC_RELATIVE, 56, \
4, \
32, \
replace_word32, \
- signed, \
+ bitfield, \
( ME ( ( B + A ) ) ))
ARC_RELOC_HOWTO(ARC_GOTOFF, 57, \
@@ -511,3 +511,152 @@ ARC_RELOC_HOWTO(ARC_NPS_CMEM16, 78, \
replace_bits16, \
dont, \
( ME ( S + A )))
+
+ARC_RELOC_HOWTO(ARC_S9H_PCREL, 79, \
+ 4, \
+ 8, \
+ replace_disp8ls, \
+ signed, \
+ ( ME ( ( ( ( S + A ) - P ) >> 1 ) ) ) )
+
+ARC_RELOC_HOWTO(ARC_S7H_PCREL, 80, \
+ 2, \
+ 6, \
+ replace_disp6s, \
+ signed, \
+ ( ( ( ( S + A ) - P ) >> 1 ) ) )
+
+ARC_RELOC_HOWTO(ARC_S8H_PCREL, 81, \
+ 2, \
+ 7, \
+ replace_disp7s, \
+ signed, \
+ ( ( ( ( S + A ) - P ) >> 1 ) ) )
+
+ARC_RELOC_HOWTO(ARC_S10H_PCREL, 82, \
+ 2, \
+ 9, \
+ replace_disp9s, \
+ signed, \
+ ( ( ( ( S + A ) - P ) >> 1 ) ) )
+
+ARC_RELOC_HOWTO(ARC_S13H_PCREL, 83, \
+ 4, \
+ 12, \
+ replace_disp12s, \
+ signed, \
+ ( ME ( ( ( ( S + A ) - P ) >> 1 ) ) ) )
+
+ARC_RELOC_HOWTO(ARC_ALIGN, 84, \
+ 4, \
+ 0, \
+ replace_none, \
+ dont, \
+ 0 )
+
+ARC_RELOC_HOWTO(ARC_ADD8, 85, \
+ 1, \
+ 8, \
+ replace_bits8, \
+ dont, \
+ ( S + A ))
+
+ARC_RELOC_HOWTO(ARC_ADD16, 86, \
+ 2, \
+ 16, \
+ replace_bits16, \
+ dont, \
+ ( S + A ))
+
+ARC_RELOC_HOWTO(ARC_SUB8, 87, \
+ 1, \
+ 8, \
+ replace_bits8, \
+ dont, \
+ ( A - S + ICARRY ))
+
+ARC_RELOC_HOWTO(ARC_SUB16, 88, \
+ 2, \
+ 16, \
+ replace_bits16, \
+ dont, \
+ ( A - S + ICARRY ))
+
+ARC_RELOC_HOWTO(ARC_SUB32, 89, \
+ 4, \
+ 32, \
+ replace_word32, \
+ dont, \
+ ( A - S + ICARRY))
+
+ARC_RELOC_HOWTO(ARC_LO32, 90, \
+ 4, \
+ 32, \
+ replace_word32, \
+ dont, \
+ ( ( S + A ) & 4294967295 ))
+
+ARC_RELOC_HOWTO(ARC_HI32, 91, \
+ 4, \
+ 32, \
+ replace_word32, \
+ dont, \
+ ( ( S + A ) >> 32 ))
+
+ARC_RELOC_HOWTO(ARC_LO32_ME, 92, \
+ 4, \
+ 32, \
+ replace_word32, \
+ dont, \
+ ( ME ( ( ( S + A ) & 4294967295 ) ) ))
+
+ARC_RELOC_HOWTO(ARC_HI32_ME, 93, \
+ 4, \
+ 32, \
+ replace_word32, \
+ dont, \
+ ( ME ( ( ( S + A ) >> 32 ) ) ))
+
+ARC_RELOC_HOWTO(ARC_N64, 94, \
+ 4, \
+ 32, \
+ replace_word32, \
+ dont, \
+ ( DEREFP - ( S + A ) ))
+
+ARC_RELOC_HOWTO(ARC_SDA_LDST3, 95, \
+ 4, \
+ 9, \
+ replace_disp9ls, \
+ signed, \
+ ( ( ( S + A ) - _SDA_BASE_ ) >> 3 ))
+
+ARC_RELOC_HOWTO(ARC_NLO32, 96, \
+ 4, \
+ 32, \
+ replace_word32, \
+ dont, \
+ ( DEREFP - ( ( S + A ) & 4294967295 ) ))
+
+ARC_RELOC_HOWTO(ARC_NLO32_ME, 97, \
+ 4, \
+ 32, \
+ replace_word32, \
+ dont, \
+ ( ME ( ( DEREFP - ( ( S + A ) & 4294967295 ) ) ) ))
+
+ARC_RELOC_HOWTO(ARC_PCLO32_ME_2, 98, \
+ 4, \
+ 34, \
+ replace_word32, \
+ signed, \
+ ( ME ( ( ( ( S + A ) - P ) >> 2 ) & 0xFFFFFFFF ) ) )
+
+
+ARC_RELOC_HOWTO(ARC_PLT34, 99, \
+ 4, \
+ 34, \
+ replace_word32, \
+ signed, \
+ ( ME ( ( ( ( L + A ) - P ) >> 2 ) & 0xFFFFFFFF ) ) )
+
diff --git a/include/elf/arc.h b/include/elf/arc.h
index 57800e0..a6a84cc 100644
--- a/include/elf/arc.h
+++ b/include/elf/arc.h
@@ -50,6 +50,7 @@ END_RELOC_NUMBERS (R_ARC_max)
#define E_ARC_MACH_ARC700 0x00000003
#define EF_ARC_CPU_ARCV2EM 0x00000005
#define EF_ARC_CPU_ARCV2HS 0x00000006
+#define EF_ARC_CPU_ARC64 0x00000007
/* ARC Linux specific ABIs. */
#define E_ARC_OSABI_ORIG 0x00000000 /* MUST be 0 for back-compat. */