aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Eric Martin <John.Martin@emmicro-us.com>2017-07-19 09:56:55 +0200
committerclaziss <claziss@synopsys.com>2017-07-19 09:56:55 +0200
commit684d5a10b1332e2a1b03a1d6e7a899ef87b3ea16 (patch)
tree86314acf8134b81adb49a35e6f5c685607e03205
parente4943f2c7569a829eb6129f10f7c5401a96aaa08 (diff)
downloadgdb-684d5a10b1332e2a1b03a1d6e7a899ef87b3ea16.zip
gdb-684d5a10b1332e2a1b03a1d6e7a899ef87b3ea16.tar.gz
gdb-684d5a10b1332e2a1b03a1d6e7a899ef87b3ea16.tar.bz2
[ARC] Add JLI support.
The following relocation types were added to GCC/binutils: ARC_JLI_SECTOFF is a relocation type in Metaware that is now used by GCC as well to adjust the index of function calls to functions with attribute jli_call_always. bfd/ 2017-07-19 Claudiu Zissulescu <claziss@synopsys.com> John Eric Martin <John.Martin@emmicro-us.com> * bfd-in2.h: Regenerate. * libbfd.h: Regenerate. * elf32-arc.c (JLI): Define. * reloc.c: Add JLI relocations. gas/ 2017-07-19 Claudiu Zissulescu <claziss@synopsys.com> * testsuite/gas/arc/jli-1.d: New file. * testsuite/gas/arc/jli-1.s: Likewise. * testsuite/gas/arc/taux.d: Update for jli_base. include/ 2017-07-19 Claudiu Zissulescu <claziss@synopsys.com> John Eric Martin <John.Martin@emmicro-us.com> * elf/arc-reloc.def: Add JLI relocs howto. * opcode/arc-func.h (replace_jli): New function. ld/ 2017-07-19 Claudiu Zissulescu <claziss@synopsys.com> John Eric Martin <John.Martin@emmicro-us.com> * emulparams/arcelf.sh (JLI_START_TABLE): Define. * scripttempl/elfarc.sc: Handle jlitab section. * scripttempl/elfarcv2.sc: Likewise. * testsuite/ld-arc/arc.exp: Add JLI test. * testsuite/ld-arc/jli-script.ld: New file. * testsuite/ld-arc/jli-simple.dd: Likewise. * testsuite/ld-arc/jli-simple.rd: Likewise. * testsuite/ld-arc/jli-simple.s: Likewise. * testsuite/ld/testsuite/ld-arc/jli-overflow.s: Likewise. * testsuite/ld/testsuite/ld-arc/jli-overflow.d: Likewise. * testsuite/ld/testsuite/ld-arc/jli-overflow.err: Likewise. opcode/ 2017-07-19 Claudiu Zissulescu <claziss@synopsys.com> John Eric Martin <John.Martin@emmicro-us.com> * arc-opc.c (UIMM10_6_S_JLIOFF): Define. (UIMM3_23): Adjust accordingly. * arc-regs.h: Add/correct jli_base register. * arc-tbl.h (jli_s): Likewise.
-rw-r--r--bfd/ChangeLog8
-rw-r--r--bfd/bfd-in2.h1
-rw-r--r--bfd/elf32-arc.c3
-rw-r--r--bfd/libbfd.h1
-rw-r--r--bfd/reloc.c2
-rw-r--r--gas/ChangeLog6
-rw-r--r--gas/testsuite/gas/arc/jli-1.d25
-rw-r--r--gas/testsuite/gas/arc/jli-1.s11
-rw-r--r--gas/testsuite/gas/arc/taux.d1
-rw-r--r--include/ChangeLog6
-rw-r--r--include/elf/arc-reloc.def7
-rw-r--r--include/opcode/arc-func.h15
-rw-r--r--ld/ChangeLog15
-rw-r--r--ld/emulparams/arcelf.sh1
-rw-r--r--ld/emulparams/arcv2elf.sh3
-rw-r--r--ld/emulparams/arcv2elfx.sh3
-rw-r--r--ld/scripttempl/elfarc.sc6
-rw-r--r--ld/scripttempl/elfarcv2.sc5
-rw-r--r--ld/testsuite/ld-arc/arc.exp5
-rw-r--r--ld/testsuite/ld-arc/jli-overflow.d4
-rw-r--r--ld/testsuite/ld-arc/jli-overflow.err3
-rw-r--r--ld/testsuite/ld-arc/jli-overflow.s1050
-rw-r--r--ld/testsuite/ld-arc/jli-script.ld20
-rw-r--r--ld/testsuite/ld-arc/jli-simple.dd26
-rw-r--r--ld/testsuite/ld-arc/jli-simple.rd10
-rw-r--r--ld/testsuite/ld-arc/jli-simple.s24
-rw-r--r--opcodes/ChangeLog8
-rw-r--r--opcodes/arc-opc.c8
-rw-r--r--opcodes/arc-regs.h2
-rw-r--r--opcodes/arc-tbl.h1
30 files changed, 1274 insertions, 6 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index bdffccf..94ccaa0 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,11 @@
+2017-07-19 Claudiu Zissulescu <claziss@synopsys.com>
+ John Eric Martin <John.Martin@emmicro-us.com>
+
+ * bfd-in2.h: Regenerate.
+ * libbfd.h: Regenerate.
+ * elf32-arc.c (JLI): Define.
+ * reloc.c: Add JLI relocations.
+
2017-07-18 Nick Clifton <nickc@redhat.com>
PR 21775
diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
index 1343780..d126aed 100644
--- a/bfd/bfd-in2.h
+++ b/bfd/bfd-in2.h
@@ -3800,6 +3800,7 @@ pc-relative or some form of GOT-indirect relocation. */
BFD_RELOC_ARC_S25W_PCREL_PLT,
BFD_RELOC_ARC_S21H_PCREL_PLT,
BFD_RELOC_ARC_NPS_CMEM16,
+ BFD_RELOC_ARC_JLI_SECTOFF,
/* ADI Blackfin 16 bit immediate absolute reloc. */
BFD_RELOC_BFIN_16_IMM,
diff --git a/bfd/elf32-arc.c b/bfd/elf32-arc.c
index 93b21de..cdecdb1 100644
--- a/bfd/elf32-arc.c
+++ b/bfd/elf32-arc.c
@@ -1182,7 +1182,7 @@ arc_special_overflow_checks (const struct arc_relocation_data reloc_data,
+ (reloc_data.reloc_offset))))
#define SECTSTART (bfd_signed_vma) (reloc_data.sym_section->output_section->vma \
+ reloc_data.sym_section->output_offset)
-
+#define JLI (bfd_signed_vma) (reloc_data.sym_section->output_section->vma)
#define _SDA_BASE_ (bfd_signed_vma) (reloc_data.sdata_begin_symbol_vma)
#define TLS_REL (bfd_signed_vma) \
((elf_hash_table (info))->tls_sec->output_section->vma)
@@ -1359,6 +1359,7 @@ arc_do_relocation (bfd_byte * contents,
#undef P
#undef SECTSTAR
#undef SECTSTART
+#undef JLI
#undef _SDA_BASE_
#undef none
diff --git a/bfd/libbfd.h b/bfd/libbfd.h
index ae9bf76..17acda5 100644
--- a/bfd/libbfd.h
+++ b/bfd/libbfd.h
@@ -1752,6 +1752,7 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
"BFD_RELOC_ARC_S25W_PCREL_PLT",
"BFD_RELOC_ARC_S21H_PCREL_PLT",
"BFD_RELOC_ARC_NPS_CMEM16",
+ "BFD_RELOC_ARC_JLI_SECTOFF",
"BFD_RELOC_BFIN_16_IMM",
"BFD_RELOC_BFIN_16_HIGH",
"BFD_RELOC_BFIN_4_PCREL",
diff --git a/bfd/reloc.c b/bfd/reloc.c
index aa70fa58..8512261 100644
--- a/bfd/reloc.c
+++ b/bfd/reloc.c
@@ -3695,6 +3695,8 @@ ENUMX
BFD_RELOC_ARC_S21H_PCREL_PLT
ENUMX
BFD_RELOC_ARC_NPS_CMEM16
+ENUMX
+ BFD_RELOC_ARC_JLI_SECTOFF
ENUMDOC
ARC relocs.
diff --git a/gas/ChangeLog b/gas/ChangeLog
index dd6a34f..d247a5b 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,9 @@
+2017-07-19 Claudiu Zissulescu <claziss@synopsys.com>
+
+ * testsuite/gas/arc/jli-1.d: New file.
+ * testsuite/gas/arc/jli-1.s: Likewise.
+ * testsuite/gas/arc/taux.d: Update for jli_base.
+
2017-07-19 Tristan Gingold <gingold@adacore.com>
* as.c (start_sbrk): Remove.
diff --git a/gas/testsuite/gas/arc/jli-1.d b/gas/testsuite/gas/arc/jli-1.d
new file mode 100644
index 0000000..10550a2
--- /dev/null
+++ b/gas/testsuite/gas/arc/jli-1.d
@@ -0,0 +1,25 @@
+#as:
+#objdump: -Dr
+
+.*: +file format .*
+
+
+Disassembly of section .group:
+
+00000000 <jlitab.foo>:
+ 0: 0[10] 00 00 0[01] .word 0x00000001
+ 4: 0[60] 00 00 0[06] .word 0x00000006
+
+Disassembly of section .text:
+
+00000000 <.text>:
+ 0: 5800 jli_s 0
+ 0: R_ARC_JLI_SECTOFF __jli.foo
+
+Disassembly of section .jlitab:
+
+00000000 <__jli.foo>:
+ 0: 0001 0000 b 0 <foo>
+ 0: R_ARC_S25H_PCREL foo
+
+#...
diff --git a/gas/testsuite/gas/arc/jli-1.s b/gas/testsuite/gas/arc/jli-1.s
new file mode 100644
index 0000000..6890147
--- /dev/null
+++ b/gas/testsuite/gas/arc/jli-1.s
@@ -0,0 +1,11 @@
+;;; Test basic JLI relocs and constructs.
+
+ .cpu em4
+
+ jli_s __jli.foo ; Generates R_ARC_JLI_SECTOFF
+
+ .section .jlitab,"axG",%progbits,jlitab.foo,comdat
+ .align 4
+__jli.foo:
+ .weak __jli.foo
+ b @foo
diff --git a/gas/testsuite/gas/arc/taux.d b/gas/testsuite/gas/arc/taux.d
index 10f50ee..6303146 100644
--- a/gas/testsuite/gas/arc/taux.d
+++ b/gas/testsuite/gas/arc/taux.d
@@ -16,6 +16,7 @@
.* U d2l
.* U dpfp_status
.* U fp_status
+.* U jli_base
.* mx0
.* mx1
.* my0
diff --git a/include/ChangeLog b/include/ChangeLog
index cecaa88..a31f62e 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -1,3 +1,9 @@
+2017-07-19 Claudiu Zissulescu <claziss@synopsys.com>
+ John Eric Martin <John.Martin@emmicro-us.com>
+
+ * elf/arc-reloc.def: Add JLI relocs howto.
+ * opcode/arc-func.h (replace_jli): New function.
+
2017-07-18 Nick Clifton <nickc@redhat.com>
PR 21775
diff --git a/include/elf/arc-reloc.def b/include/elf/arc-reloc.def
index aa2309c..c58ca96 100644
--- a/include/elf/arc-reloc.def
+++ b/include/elf/arc-reloc.def
@@ -414,6 +414,13 @@ ARC_RELOC_HOWTO(ARC_S25H_PCREL_PLT, 61, \
signed, \
( ME ( ( ( ( L + A ) - P ) >> 1 ) ) ))
+ARC_RELOC_HOWTO(ARC_JLI_SECTOFF, 63, \
+ 1, \
+ 10, \
+ replace_jli, \
+ bitfield, \
+ ( ( S - JLI ) >> 2))
+
ARC_RELOC_HOWTO(ARC_TLS_DTPMOD, 66, \
2, \
32, \
diff --git a/include/opcode/arc-func.h b/include/opcode/arc-func.h
index c794593..fb45b07 100644
--- a/include/opcode/arc-func.h
+++ b/include/opcode/arc-func.h
@@ -274,8 +274,21 @@ replace_disp12s (unsigned insn, int value ATTRIBUTE_UNUSED)
insn = insn & ~0xfff;
insn |= ((value >> 0) & 0x003f) << 6;
insn |= ((value >> 6) & 0x003f) << 0;
-
return insn;
}
#endif /* REPLACE_disp12s */
+
+/* mask = 0000001111111111. */
+#ifndef REPLACE_jli
+#define REPLACE_jli
+ATTRIBUTE_UNUSED static unsigned
+replace_jli (unsigned insn, int value)
+{
+ insn = insn & ~0x3ff;
+ insn |= ((value >> 0) & 0x03ff) << 0;
+
+ return insn;
+}
+
+#endif /* REPLACE_jli */
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 4525236..00eada7 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,18 @@
+2017-07-19 Claudiu Zissulescu <claziss@synopsys.com>
+ John Eric Martin <John.Martin@emmicro-us.com>
+
+ * emulparams/arcelf.sh (JLI_START_TABLE): Define.
+ * scripttempl/elfarc.sc: Handle jlitab section.
+ * scripttempl/elfarcv2.sc: Likewise.
+ * testsuite/ld-arc/arc.exp: Add JLI test.
+ * testsuite/ld-arc/jli-script.ld: New file.
+ * testsuite/ld-arc/jli-simple.dd: Likewise.
+ * testsuite/ld-arc/jli-simple.rd: Likewise.
+ * testsuite/ld-arc/jli-simple.s: Likewise.
+ * testsuite/ld-arc/jli-overflow.s: Likewise.
+ * testsuite/ld-arc/jli-overflow.d: Likewise.
+ * testsuite/ld-arc/jli-overflow.err: Likewise.
+
2017-07-19 Tristan Gingold <gingold@adacore.com>
* ldmain.c (main): Remove display of data size.
diff --git a/ld/emulparams/arcelf.sh b/ld/emulparams/arcelf.sh
index 9b52e2c..21c5c82 100644
--- a/ld/emulparams/arcelf.sh
+++ b/ld/emulparams/arcelf.sh
@@ -16,6 +16,7 @@ ARCH=arc
MACHINE=
ENTRY=__start
SDATA_START_SYMBOLS='__SDATA_BEGIN__ = . + 0x100;'
+JLI_START_TABLE='__JLI_TABLE__ = .;'
OTHER_SECTIONS="/DISCARD/ : { *(.__arc_profile_*) }"
EMBEDDED=yes
diff --git a/ld/emulparams/arcv2elf.sh b/ld/emulparams/arcv2elf.sh
index e21882b..feedbe8 100644
--- a/ld/emulparams/arcv2elf.sh
+++ b/ld/emulparams/arcv2elf.sh
@@ -22,5 +22,6 @@ LITTLE_OUTPUT_FORMAT="elf32-littlearc"
BIG_OUTPUT_FORMAT="elf32-bigarc"
TEXT_START_ADDR=0x100
ENTRY=__start
-SDATA_START_SYMBOLS='__SDATA_BEGIN__ = .;'
+SDATA_START_SYMBOLS='__SDATA_BEGIN__ = . + 0x100;'
+JLI_START_TABLE='__JLI_TABLE__ = .;'
OTHER_SECTIONS="/DISCARD/ : { *(.__arc_profile_*) }"
diff --git a/ld/emulparams/arcv2elfx.sh b/ld/emulparams/arcv2elfx.sh
index 7a4f284..8a56509 100644
--- a/ld/emulparams/arcv2elfx.sh
+++ b/ld/emulparams/arcv2elfx.sh
@@ -18,6 +18,7 @@ LITTLE_OUTPUT_FORMAT="elf32-littlearc"
BIG_OUTPUT_FORMAT="elf32-bigarc"
TEXT_START_ADDR=0x100
ENTRY=__start
-SDATA_START_SYMBOLS='__SDATA_BEGIN__ = .;'
+SDATA_START_SYMBOLS='__SDATA_BEGIN__ = . + 0x100;'
+JLI_START_TABLE='__JLI_TABLE__ = .;'
OTHER_SECTIONS="/DISCARD/ : { *(.__arc_profile_*) }"
EMBEDDED=yes
diff --git a/ld/scripttempl/elfarc.sc b/ld/scripttempl/elfarc.sc
index 6754c02..4d8fef0 100644
--- a/ld/scripttempl/elfarc.sc
+++ b/ld/scripttempl/elfarc.sc
@@ -262,6 +262,12 @@ cat <<EOF
} =${NOP-0}
${DATA_PLT-${BSS_PLT-${PLT}}}
+ .jlitab ${RELOCATING-0} :
+ {
+ ${RELOCATING+${JLI_START_TABLE}}
+ jlitab*.o(.jlitab*)
+ *(.jlitab*)
+ } =${NOP-0}
.text ${RELOCATING-0} :
{
${RELOCATING+${TEXT_START_SYMBOLS}}
diff --git a/ld/scripttempl/elfarcv2.sc b/ld/scripttempl/elfarcv2.sc
index 0232d81..21bc74c 100644
--- a/ld/scripttempl/elfarcv2.sc
+++ b/ld/scripttempl/elfarcv2.sc
@@ -179,6 +179,11 @@ SECTIONS
.eh_frame : { KEEP (*(.eh_frame)) } ${RELOCATING+> ${TEXT_MEMORY}}
.gcc_except_table : { *(.gcc_except_table) *(.gcc_except_table.*) } ${RELOCATING+> ${TEXT_MEMORY}}
.plt : { *(.plt) } ${RELOCATING+> ${TEXT_MEMORY}}
+ .jlitab :
+ {
+ ${RELOCATING+${JLI_START_TABLE}}
+ jlitab*.o:(.jlitab*) *(.jlitab*)
+ } ${RELOCATING+> ${TEXT_MEMORY}}
.rodata ${RELOCATING-0} :
{
diff --git a/ld/testsuite/ld-arc/arc.exp b/ld/testsuite/ld-arc/arc.exp
index 2f2abe2..66f39cd 100644
--- a/ld/testsuite/ld-arc/arc.exp
+++ b/ld/testsuite/ld-arc/arc.exp
@@ -40,6 +40,11 @@ set arccommon_tests {
{tls-dtpoff.s}
{{objdump -fdw tls-dtpoff.dd} {readelf --relocs tls-dtpoff.rd}}
"sda-relocs.so" }
+ { "JLI simple"
+ "-q -T jli-script.ld -A elf32-arclittle" "" "-mcpu=em4 -EL"
+ {jli-simple.s}
+ {{objdump -fdw jli-simple.dd} {readelf --relocs jli-simple.rd}}
+ "jli-simple.so" }
}
run_ld_link_tests $arccommon_tests
diff --git a/ld/testsuite/ld-arc/jli-overflow.d b/ld/testsuite/ld-arc/jli-overflow.d
new file mode 100644
index 0000000..b1a2663
--- /dev/null
+++ b/ld/testsuite/ld-arc/jli-overflow.d
@@ -0,0 +1,4 @@
+#source: jli-overflow.s
+#as:
+#ld: -q -T jli-script.ld
+#error_output: jli-overflow.err
diff --git a/ld/testsuite/ld-arc/jli-overflow.err b/ld/testsuite/ld-arc/jli-overflow.err
new file mode 100644
index 0000000..022434e
--- /dev/null
+++ b/ld/testsuite/ld-arc/jli-overflow.err
@@ -0,0 +1,3 @@
+.*\.o: In function `test_1025':
+.*: relocation truncated to fit: R_ARC_JLI_SECTOFF against symbol.*
+#...
diff --git a/ld/testsuite/ld-arc/jli-overflow.s b/ld/testsuite/ld-arc/jli-overflow.s
new file mode 100644
index 0000000..7961cc9
--- /dev/null
+++ b/ld/testsuite/ld-arc/jli-overflow.s
@@ -0,0 +1,1050 @@
+;;;Macro
+ .macro jlifunc num
+ .section .text
+ .align 4
+ .global func\num
+ .type func\num, @function
+func\num:
+ j_s.d [blink]
+ add_s r0,r0,1
+ .size func\num, .-func\num
+ .align 4
+ .global test_\num
+ .type test_\num, @function
+test_\num:
+ jli_s @__jli.func\num
+ j_s [blink]
+ .size test_\num, .-test_\num
+ .section .jlitab, "axG", @progbits, .jlitab.func\num, comdat
+ .align 4
+__jli.func\num:
+ .weak __jli.func\num
+ b @func\num
+ .endm
+
+ .cpu HS
+ jlifunc 1
+ jlifunc 2
+ jlifunc 3
+ jlifunc 4
+ jlifunc 5
+ jlifunc 6
+ jlifunc 7
+ jlifunc 8
+ jlifunc 9
+ jlifunc 10
+ jlifunc 11
+ jlifunc 12
+ jlifunc 13
+ jlifunc 14
+ jlifunc 15
+ jlifunc 16
+ jlifunc 17
+ jlifunc 18
+ jlifunc 19
+ jlifunc 20
+ jlifunc 21
+ jlifunc 22
+ jlifunc 23
+ jlifunc 24
+ jlifunc 25
+ jlifunc 26
+ jlifunc 27
+ jlifunc 28
+ jlifunc 29
+ jlifunc 30
+ jlifunc 31
+ jlifunc 32
+ jlifunc 33
+ jlifunc 34
+ jlifunc 35
+ jlifunc 36
+ jlifunc 37
+ jlifunc 38
+ jlifunc 39
+ jlifunc 40
+ jlifunc 41
+ jlifunc 42
+ jlifunc 43
+ jlifunc 44
+ jlifunc 45
+ jlifunc 46
+ jlifunc 47
+ jlifunc 48
+ jlifunc 49
+ jlifunc 50
+ jlifunc 51
+ jlifunc 52
+ jlifunc 53
+ jlifunc 54
+ jlifunc 55
+ jlifunc 56
+ jlifunc 57
+ jlifunc 58
+ jlifunc 59
+ jlifunc 60
+ jlifunc 61
+ jlifunc 62
+ jlifunc 63
+ jlifunc 64
+ jlifunc 65
+ jlifunc 66
+ jlifunc 67
+ jlifunc 68
+ jlifunc 69
+ jlifunc 70
+ jlifunc 71
+ jlifunc 72
+ jlifunc 73
+ jlifunc 74
+ jlifunc 75
+ jlifunc 76
+ jlifunc 77
+ jlifunc 78
+ jlifunc 79
+ jlifunc 80
+ jlifunc 81
+ jlifunc 82
+ jlifunc 83
+ jlifunc 84
+ jlifunc 85
+ jlifunc 86
+ jlifunc 87
+ jlifunc 88
+ jlifunc 89
+ jlifunc 90
+ jlifunc 91
+ jlifunc 92
+ jlifunc 93
+ jlifunc 94
+ jlifunc 95
+ jlifunc 96
+ jlifunc 97
+ jlifunc 98
+ jlifunc 99
+ jlifunc 100
+ jlifunc 101
+ jlifunc 102
+ jlifunc 103
+ jlifunc 104
+ jlifunc 105
+ jlifunc 106
+ jlifunc 107
+ jlifunc 108
+ jlifunc 109
+ jlifunc 110
+ jlifunc 111
+ jlifunc 112
+ jlifunc 113
+ jlifunc 114
+ jlifunc 115
+ jlifunc 116
+ jlifunc 117
+ jlifunc 118
+ jlifunc 119
+ jlifunc 120
+ jlifunc 121
+ jlifunc 122
+ jlifunc 123
+ jlifunc 124
+ jlifunc 125
+ jlifunc 126
+ jlifunc 127
+ jlifunc 128
+ jlifunc 129
+ jlifunc 130
+ jlifunc 131
+ jlifunc 132
+ jlifunc 133
+ jlifunc 134
+ jlifunc 135
+ jlifunc 136
+ jlifunc 137
+ jlifunc 138
+ jlifunc 139
+ jlifunc 140
+ jlifunc 141
+ jlifunc 142
+ jlifunc 143
+ jlifunc 144
+ jlifunc 145
+ jlifunc 146
+ jlifunc 147
+ jlifunc 148
+ jlifunc 149
+ jlifunc 150
+ jlifunc 151
+ jlifunc 152
+ jlifunc 153
+ jlifunc 154
+ jlifunc 155
+ jlifunc 156
+ jlifunc 157
+ jlifunc 158
+ jlifunc 159
+ jlifunc 160
+ jlifunc 161
+ jlifunc 162
+ jlifunc 163
+ jlifunc 164
+ jlifunc 165
+ jlifunc 166
+ jlifunc 167
+ jlifunc 168
+ jlifunc 169
+ jlifunc 170
+ jlifunc 171
+ jlifunc 172
+ jlifunc 173
+ jlifunc 174
+ jlifunc 175
+ jlifunc 176
+ jlifunc 177
+ jlifunc 178
+ jlifunc 179
+ jlifunc 180
+ jlifunc 181
+ jlifunc 182
+ jlifunc 183
+ jlifunc 184
+ jlifunc 185
+ jlifunc 186
+ jlifunc 187
+ jlifunc 188
+ jlifunc 189
+ jlifunc 190
+ jlifunc 191
+ jlifunc 192
+ jlifunc 193
+ jlifunc 194
+ jlifunc 195
+ jlifunc 196
+ jlifunc 197
+ jlifunc 198
+ jlifunc 199
+ jlifunc 200
+ jlifunc 201
+ jlifunc 202
+ jlifunc 203
+ jlifunc 204
+ jlifunc 205
+ jlifunc 206
+ jlifunc 207
+ jlifunc 208
+ jlifunc 209
+ jlifunc 210
+ jlifunc 211
+ jlifunc 212
+ jlifunc 213
+ jlifunc 214
+ jlifunc 215
+ jlifunc 216
+ jlifunc 217
+ jlifunc 218
+ jlifunc 219
+ jlifunc 220
+ jlifunc 221
+ jlifunc 222
+ jlifunc 223
+ jlifunc 224
+ jlifunc 225
+ jlifunc 226
+ jlifunc 227
+ jlifunc 228
+ jlifunc 229
+ jlifunc 230
+ jlifunc 231
+ jlifunc 232
+ jlifunc 233
+ jlifunc 234
+ jlifunc 235
+ jlifunc 236
+ jlifunc 237
+ jlifunc 238
+ jlifunc 239
+ jlifunc 240
+ jlifunc 241
+ jlifunc 242
+ jlifunc 243
+ jlifunc 244
+ jlifunc 245
+ jlifunc 246
+ jlifunc 247
+ jlifunc 248
+ jlifunc 249
+ jlifunc 250
+ jlifunc 251
+ jlifunc 252
+ jlifunc 253
+ jlifunc 254
+ jlifunc 255
+ jlifunc 256
+ jlifunc 257
+ jlifunc 258
+ jlifunc 259
+ jlifunc 260
+ jlifunc 261
+ jlifunc 262
+ jlifunc 263
+ jlifunc 264
+ jlifunc 265
+ jlifunc 266
+ jlifunc 267
+ jlifunc 268
+ jlifunc 269
+ jlifunc 270
+ jlifunc 271
+ jlifunc 272
+ jlifunc 273
+ jlifunc 274
+ jlifunc 275
+ jlifunc 276
+ jlifunc 277
+ jlifunc 278
+ jlifunc 279
+ jlifunc 280
+ jlifunc 281
+ jlifunc 282
+ jlifunc 283
+ jlifunc 284
+ jlifunc 285
+ jlifunc 286
+ jlifunc 287
+ jlifunc 288
+ jlifunc 289
+ jlifunc 290
+ jlifunc 291
+ jlifunc 292
+ jlifunc 293
+ jlifunc 294
+ jlifunc 295
+ jlifunc 296
+ jlifunc 297
+ jlifunc 298
+ jlifunc 299
+ jlifunc 300
+ jlifunc 301
+ jlifunc 302
+ jlifunc 303
+ jlifunc 304
+ jlifunc 305
+ jlifunc 306
+ jlifunc 307
+ jlifunc 308
+ jlifunc 309
+ jlifunc 310
+ jlifunc 311
+ jlifunc 312
+ jlifunc 313
+ jlifunc 314
+ jlifunc 315
+ jlifunc 316
+ jlifunc 317
+ jlifunc 318
+ jlifunc 319
+ jlifunc 320
+ jlifunc 321
+ jlifunc 322
+ jlifunc 323
+ jlifunc 324
+ jlifunc 325
+ jlifunc 326
+ jlifunc 327
+ jlifunc 328
+ jlifunc 329
+ jlifunc 330
+ jlifunc 331
+ jlifunc 332
+ jlifunc 333
+ jlifunc 334
+ jlifunc 335
+ jlifunc 336
+ jlifunc 337
+ jlifunc 338
+ jlifunc 339
+ jlifunc 340
+ jlifunc 341
+ jlifunc 342
+ jlifunc 343
+ jlifunc 344
+ jlifunc 345
+ jlifunc 346
+ jlifunc 347
+ jlifunc 348
+ jlifunc 349
+ jlifunc 350
+ jlifunc 351
+ jlifunc 352
+ jlifunc 353
+ jlifunc 354
+ jlifunc 355
+ jlifunc 356
+ jlifunc 357
+ jlifunc 358
+ jlifunc 359
+ jlifunc 360
+ jlifunc 361
+ jlifunc 362
+ jlifunc 363
+ jlifunc 364
+ jlifunc 365
+ jlifunc 366
+ jlifunc 367
+ jlifunc 368
+ jlifunc 369
+ jlifunc 370
+ jlifunc 371
+ jlifunc 372
+ jlifunc 373
+ jlifunc 374
+ jlifunc 375
+ jlifunc 376
+ jlifunc 377
+ jlifunc 378
+ jlifunc 379
+ jlifunc 380
+ jlifunc 381
+ jlifunc 382
+ jlifunc 383
+ jlifunc 384
+ jlifunc 385
+ jlifunc 386
+ jlifunc 387
+ jlifunc 388
+ jlifunc 389
+ jlifunc 390
+ jlifunc 391
+ jlifunc 392
+ jlifunc 393
+ jlifunc 394
+ jlifunc 395
+ jlifunc 396
+ jlifunc 397
+ jlifunc 398
+ jlifunc 399
+ jlifunc 400
+ jlifunc 401
+ jlifunc 402
+ jlifunc 403
+ jlifunc 404
+ jlifunc 405
+ jlifunc 406
+ jlifunc 407
+ jlifunc 408
+ jlifunc 409
+ jlifunc 410
+ jlifunc 411
+ jlifunc 412
+ jlifunc 413
+ jlifunc 414
+ jlifunc 415
+ jlifunc 416
+ jlifunc 417
+ jlifunc 418
+ jlifunc 419
+ jlifunc 420
+ jlifunc 421
+ jlifunc 422
+ jlifunc 423
+ jlifunc 424
+ jlifunc 425
+ jlifunc 426
+ jlifunc 427
+ jlifunc 428
+ jlifunc 429
+ jlifunc 430
+ jlifunc 431
+ jlifunc 432
+ jlifunc 433
+ jlifunc 434
+ jlifunc 435
+ jlifunc 436
+ jlifunc 437
+ jlifunc 438
+ jlifunc 439
+ jlifunc 440
+ jlifunc 441
+ jlifunc 442
+ jlifunc 443
+ jlifunc 444
+ jlifunc 445
+ jlifunc 446
+ jlifunc 447
+ jlifunc 448
+ jlifunc 449
+ jlifunc 450
+ jlifunc 451
+ jlifunc 452
+ jlifunc 453
+ jlifunc 454
+ jlifunc 455
+ jlifunc 456
+ jlifunc 457
+ jlifunc 458
+ jlifunc 459
+ jlifunc 460
+ jlifunc 461
+ jlifunc 462
+ jlifunc 463
+ jlifunc 464
+ jlifunc 465
+ jlifunc 466
+ jlifunc 467
+ jlifunc 468
+ jlifunc 469
+ jlifunc 470
+ jlifunc 471
+ jlifunc 472
+ jlifunc 473
+ jlifunc 474
+ jlifunc 475
+ jlifunc 476
+ jlifunc 477
+ jlifunc 478
+ jlifunc 479
+ jlifunc 480
+ jlifunc 481
+ jlifunc 482
+ jlifunc 483
+ jlifunc 484
+ jlifunc 485
+ jlifunc 486
+ jlifunc 487
+ jlifunc 488
+ jlifunc 489
+ jlifunc 490
+ jlifunc 491
+ jlifunc 492
+ jlifunc 493
+ jlifunc 494
+ jlifunc 495
+ jlifunc 496
+ jlifunc 497
+ jlifunc 498
+ jlifunc 499
+ jlifunc 500
+ jlifunc 501
+ jlifunc 502
+ jlifunc 503
+ jlifunc 504
+ jlifunc 505
+ jlifunc 506
+ jlifunc 507
+ jlifunc 508
+ jlifunc 509
+ jlifunc 510
+ jlifunc 511
+ jlifunc 512
+ jlifunc 513
+ jlifunc 514
+ jlifunc 515
+ jlifunc 516
+ jlifunc 517
+ jlifunc 518
+ jlifunc 519
+ jlifunc 520
+ jlifunc 521
+ jlifunc 522
+ jlifunc 523
+ jlifunc 524
+ jlifunc 525
+ jlifunc 526
+ jlifunc 527
+ jlifunc 528
+ jlifunc 529
+ jlifunc 530
+ jlifunc 531
+ jlifunc 532
+ jlifunc 533
+ jlifunc 534
+ jlifunc 535
+ jlifunc 536
+ jlifunc 537
+ jlifunc 538
+ jlifunc 539
+ jlifunc 540
+ jlifunc 541
+ jlifunc 542
+ jlifunc 543
+ jlifunc 544
+ jlifunc 545
+ jlifunc 546
+ jlifunc 547
+ jlifunc 548
+ jlifunc 549
+ jlifunc 550
+ jlifunc 551
+ jlifunc 552
+ jlifunc 553
+ jlifunc 554
+ jlifunc 555
+ jlifunc 556
+ jlifunc 557
+ jlifunc 558
+ jlifunc 559
+ jlifunc 560
+ jlifunc 561
+ jlifunc 562
+ jlifunc 563
+ jlifunc 564
+ jlifunc 565
+ jlifunc 566
+ jlifunc 567
+ jlifunc 568
+ jlifunc 569
+ jlifunc 570
+ jlifunc 571
+ jlifunc 572
+ jlifunc 573
+ jlifunc 574
+ jlifunc 575
+ jlifunc 576
+ jlifunc 577
+ jlifunc 578
+ jlifunc 579
+ jlifunc 580
+ jlifunc 581
+ jlifunc 582
+ jlifunc 583
+ jlifunc 584
+ jlifunc 585
+ jlifunc 586
+ jlifunc 587
+ jlifunc 588
+ jlifunc 589
+ jlifunc 590
+ jlifunc 591
+ jlifunc 592
+ jlifunc 593
+ jlifunc 594
+ jlifunc 595
+ jlifunc 596
+ jlifunc 597
+ jlifunc 598
+ jlifunc 599
+ jlifunc 600
+ jlifunc 601
+ jlifunc 602
+ jlifunc 603
+ jlifunc 604
+ jlifunc 605
+ jlifunc 606
+ jlifunc 607
+ jlifunc 608
+ jlifunc 609
+ jlifunc 610
+ jlifunc 611
+ jlifunc 612
+ jlifunc 613
+ jlifunc 614
+ jlifunc 615
+ jlifunc 616
+ jlifunc 617
+ jlifunc 618
+ jlifunc 619
+ jlifunc 620
+ jlifunc 621
+ jlifunc 622
+ jlifunc 623
+ jlifunc 624
+ jlifunc 625
+ jlifunc 626
+ jlifunc 627
+ jlifunc 628
+ jlifunc 629
+ jlifunc 630
+ jlifunc 631
+ jlifunc 632
+ jlifunc 633
+ jlifunc 634
+ jlifunc 635
+ jlifunc 636
+ jlifunc 637
+ jlifunc 638
+ jlifunc 639
+ jlifunc 640
+ jlifunc 641
+ jlifunc 642
+ jlifunc 643
+ jlifunc 644
+ jlifunc 645
+ jlifunc 646
+ jlifunc 647
+ jlifunc 648
+ jlifunc 649
+ jlifunc 650
+ jlifunc 651
+ jlifunc 652
+ jlifunc 653
+ jlifunc 654
+ jlifunc 655
+ jlifunc 656
+ jlifunc 657
+ jlifunc 658
+ jlifunc 659
+ jlifunc 660
+ jlifunc 661
+ jlifunc 662
+ jlifunc 663
+ jlifunc 664
+ jlifunc 665
+ jlifunc 666
+ jlifunc 667
+ jlifunc 668
+ jlifunc 669
+ jlifunc 670
+ jlifunc 671
+ jlifunc 672
+ jlifunc 673
+ jlifunc 674
+ jlifunc 675
+ jlifunc 676
+ jlifunc 677
+ jlifunc 678
+ jlifunc 679
+ jlifunc 680
+ jlifunc 681
+ jlifunc 682
+ jlifunc 683
+ jlifunc 684
+ jlifunc 685
+ jlifunc 686
+ jlifunc 687
+ jlifunc 688
+ jlifunc 689
+ jlifunc 690
+ jlifunc 691
+ jlifunc 692
+ jlifunc 693
+ jlifunc 694
+ jlifunc 695
+ jlifunc 696
+ jlifunc 697
+ jlifunc 698
+ jlifunc 699
+ jlifunc 700
+ jlifunc 701
+ jlifunc 702
+ jlifunc 703
+ jlifunc 704
+ jlifunc 705
+ jlifunc 706
+ jlifunc 707
+ jlifunc 708
+ jlifunc 709
+ jlifunc 710
+ jlifunc 711
+ jlifunc 712
+ jlifunc 713
+ jlifunc 714
+ jlifunc 715
+ jlifunc 716
+ jlifunc 717
+ jlifunc 718
+ jlifunc 719
+ jlifunc 720
+ jlifunc 721
+ jlifunc 722
+ jlifunc 723
+ jlifunc 724
+ jlifunc 725
+ jlifunc 726
+ jlifunc 727
+ jlifunc 728
+ jlifunc 729
+ jlifunc 730
+ jlifunc 731
+ jlifunc 732
+ jlifunc 733
+ jlifunc 734
+ jlifunc 735
+ jlifunc 736
+ jlifunc 737
+ jlifunc 738
+ jlifunc 739
+ jlifunc 740
+ jlifunc 741
+ jlifunc 742
+ jlifunc 743
+ jlifunc 744
+ jlifunc 745
+ jlifunc 746
+ jlifunc 747
+ jlifunc 748
+ jlifunc 749
+ jlifunc 750
+ jlifunc 751
+ jlifunc 752
+ jlifunc 753
+ jlifunc 754
+ jlifunc 755
+ jlifunc 756
+ jlifunc 757
+ jlifunc 758
+ jlifunc 759
+ jlifunc 760
+ jlifunc 761
+ jlifunc 762
+ jlifunc 763
+ jlifunc 764
+ jlifunc 765
+ jlifunc 766
+ jlifunc 767
+ jlifunc 768
+ jlifunc 769
+ jlifunc 770
+ jlifunc 771
+ jlifunc 772
+ jlifunc 773
+ jlifunc 774
+ jlifunc 775
+ jlifunc 776
+ jlifunc 777
+ jlifunc 778
+ jlifunc 779
+ jlifunc 780
+ jlifunc 781
+ jlifunc 782
+ jlifunc 783
+ jlifunc 784
+ jlifunc 785
+ jlifunc 786
+ jlifunc 787
+ jlifunc 788
+ jlifunc 789
+ jlifunc 790
+ jlifunc 791
+ jlifunc 792
+ jlifunc 793
+ jlifunc 794
+ jlifunc 795
+ jlifunc 796
+ jlifunc 797
+ jlifunc 798
+ jlifunc 799
+ jlifunc 800
+ jlifunc 801
+ jlifunc 802
+ jlifunc 803
+ jlifunc 804
+ jlifunc 805
+ jlifunc 806
+ jlifunc 807
+ jlifunc 808
+ jlifunc 809
+ jlifunc 810
+ jlifunc 811
+ jlifunc 812
+ jlifunc 813
+ jlifunc 814
+ jlifunc 815
+ jlifunc 816
+ jlifunc 817
+ jlifunc 818
+ jlifunc 819
+ jlifunc 820
+ jlifunc 821
+ jlifunc 822
+ jlifunc 823
+ jlifunc 824
+ jlifunc 825
+ jlifunc 826
+ jlifunc 827
+ jlifunc 828
+ jlifunc 829
+ jlifunc 830
+ jlifunc 831
+ jlifunc 832
+ jlifunc 833
+ jlifunc 834
+ jlifunc 835
+ jlifunc 836
+ jlifunc 837
+ jlifunc 838
+ jlifunc 839
+ jlifunc 840
+ jlifunc 841
+ jlifunc 842
+ jlifunc 843
+ jlifunc 844
+ jlifunc 845
+ jlifunc 846
+ jlifunc 847
+ jlifunc 848
+ jlifunc 849
+ jlifunc 850
+ jlifunc 851
+ jlifunc 852
+ jlifunc 853
+ jlifunc 854
+ jlifunc 855
+ jlifunc 856
+ jlifunc 857
+ jlifunc 858
+ jlifunc 859
+ jlifunc 860
+ jlifunc 861
+ jlifunc 862
+ jlifunc 863
+ jlifunc 864
+ jlifunc 865
+ jlifunc 866
+ jlifunc 867
+ jlifunc 868
+ jlifunc 869
+ jlifunc 870
+ jlifunc 871
+ jlifunc 872
+ jlifunc 873
+ jlifunc 874
+ jlifunc 875
+ jlifunc 876
+ jlifunc 877
+ jlifunc 878
+ jlifunc 879
+ jlifunc 880
+ jlifunc 881
+ jlifunc 882
+ jlifunc 883
+ jlifunc 884
+ jlifunc 885
+ jlifunc 886
+ jlifunc 887
+ jlifunc 888
+ jlifunc 889
+ jlifunc 890
+ jlifunc 891
+ jlifunc 892
+ jlifunc 893
+ jlifunc 894
+ jlifunc 895
+ jlifunc 896
+ jlifunc 897
+ jlifunc 898
+ jlifunc 899
+ jlifunc 900
+ jlifunc 901
+ jlifunc 902
+ jlifunc 903
+ jlifunc 904
+ jlifunc 905
+ jlifunc 906
+ jlifunc 907
+ jlifunc 908
+ jlifunc 909
+ jlifunc 910
+ jlifunc 911
+ jlifunc 912
+ jlifunc 913
+ jlifunc 914
+ jlifunc 915
+ jlifunc 916
+ jlifunc 917
+ jlifunc 918
+ jlifunc 919
+ jlifunc 920
+ jlifunc 921
+ jlifunc 922
+ jlifunc 923
+ jlifunc 924
+ jlifunc 925
+ jlifunc 926
+ jlifunc 927
+ jlifunc 928
+ jlifunc 929
+ jlifunc 930
+ jlifunc 931
+ jlifunc 932
+ jlifunc 933
+ jlifunc 934
+ jlifunc 935
+ jlifunc 936
+ jlifunc 937
+ jlifunc 938
+ jlifunc 939
+ jlifunc 940
+ jlifunc 941
+ jlifunc 942
+ jlifunc 943
+ jlifunc 944
+ jlifunc 945
+ jlifunc 946
+ jlifunc 947
+ jlifunc 948
+ jlifunc 949
+ jlifunc 950
+ jlifunc 951
+ jlifunc 952
+ jlifunc 953
+ jlifunc 954
+ jlifunc 955
+ jlifunc 956
+ jlifunc 957
+ jlifunc 958
+ jlifunc 959
+ jlifunc 960
+ jlifunc 961
+ jlifunc 962
+ jlifunc 963
+ jlifunc 964
+ jlifunc 965
+ jlifunc 966
+ jlifunc 967
+ jlifunc 968
+ jlifunc 969
+ jlifunc 970
+ jlifunc 971
+ jlifunc 972
+ jlifunc 973
+ jlifunc 974
+ jlifunc 975
+ jlifunc 976
+ jlifunc 977
+ jlifunc 978
+ jlifunc 979
+ jlifunc 980
+ jlifunc 981
+ jlifunc 982
+ jlifunc 983
+ jlifunc 984
+ jlifunc 985
+ jlifunc 986
+ jlifunc 987
+ jlifunc 988
+ jlifunc 989
+ jlifunc 990
+ jlifunc 991
+ jlifunc 992
+ jlifunc 993
+ jlifunc 994
+ jlifunc 995
+ jlifunc 996
+ jlifunc 997
+ jlifunc 998
+ jlifunc 999
+ jlifunc 1000
+ jlifunc 1001
+ jlifunc 1002
+ jlifunc 1003
+ jlifunc 1004
+ jlifunc 1005
+ jlifunc 1006
+ jlifunc 1007
+ jlifunc 1008
+ jlifunc 1009
+ jlifunc 1010
+ jlifunc 1011
+ jlifunc 1012
+ jlifunc 1013
+ jlifunc 1014
+ jlifunc 1015
+ jlifunc 1016
+ jlifunc 1017
+ jlifunc 1018
+ jlifunc 1019
+ jlifunc 1020
+ jlifunc 1021
+ jlifunc 1022
+ jlifunc 1023
+ jlifunc 1024
+ jlifunc 1025
diff --git a/ld/testsuite/ld-arc/jli-script.ld b/ld/testsuite/ld-arc/jli-script.ld
new file mode 100644
index 0000000..fdb9e90
--- /dev/null
+++ b/ld/testsuite/ld-arc/jli-script.ld
@@ -0,0 +1,20 @@
+/* Default linker script, for normal executables. */
+OUTPUT_FORMAT("elf32-littlearc", "elf32-bigarc",
+ "elf32-littlearc")
+
+OUTPUT_ARCH(arc)
+ENTRY(__start)
+
+SECTIONS
+{
+ /* Read-only sections, merged into text segment: */
+ PROVIDE (__start = 0x10000);
+ . = 0x10000 + SIZEOF_HEADERS;
+
+ .text : {*(.text .stub .text.*)} =0
+ .jlitab : {jlitab*.o(.jlitab*) *(.jlitab*) }
+ .tdata : {.tdata = .; *(.tdata .tdata.* .gnu.linkonce.td.*) }
+ .tbss : {.tbss = .; *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+
+ /DISCARD/ : { *(.note.GNU-stack) }
+}
diff --git a/ld/testsuite/ld-arc/jli-simple.dd b/ld/testsuite/ld-arc/jli-simple.dd
new file mode 100644
index 0000000..cea0194
--- /dev/null
+++ b/ld/testsuite/ld-arc/jli-simple.dd
@@ -0,0 +1,26 @@
+
+.*: file format .*
+architecture: ARCv2, flags 0x00000113:
+HAS_RELOC, EXEC_P, HAS_SYMS, D_PAGED
+start address 0x00010000
+
+
+Disassembly of section .text:
+
+00010054 <test>:
+ 10054: 5800 jli_s 0
+ 10056: 5801 jli_s 0x1
+
+00010058 <foo>:
+ 10058: 2000 0000 add r0,r0,r0
+
+0001005c <bar>:
+ 1005c: 2100 0080 add r0,r1,r2
+
+Disassembly of section .jlitab:
+
+00010060 <__jli.foo>:
+ 10060: 07f9 ffcf b 10058 <foo>
+
+00010064 <__jli.bar>:
+ 10064: 07f9 ffcf b 1005c <bar>
diff --git a/ld/testsuite/ld-arc/jli-simple.rd b/ld/testsuite/ld-arc/jli-simple.rd
new file mode 100644
index 0000000..13b85bb
--- /dev/null
+++ b/ld/testsuite/ld-arc/jli-simple.rd
@@ -0,0 +1,10 @@
+
+Relocation section '\.rela\.text' .*:
+ Offset +Info +Type +Sym.Value +Sym. Name \+ Addend
+00010054 [0-9a-f]+ R_ARC_JLI_SECTOFF 00010060 __jli\.foo \+ 0
+00010056 [0-9a-f]+ R_ARC_JLI_SECTOFF 00010064 __jli\.bar \+ 0
+
+Relocation section '\.rela\.jlitab' .*:
+ Offset +Info +Type +Sym.Value +Sym. Name \+ Addend
+00010060 [0-9a-f]+ R_ARC_S25H_PCREL 00010054 .text \+ 4
+00010064 [0-9a-f]+ R_ARC_S25H_PCREL 00010054 .text \+ 8
diff --git a/ld/testsuite/ld-arc/jli-simple.s b/ld/testsuite/ld-arc/jli-simple.s
new file mode 100644
index 0000000..660fa05
--- /dev/null
+++ b/ld/testsuite/ld-arc/jli-simple.s
@@ -0,0 +1,24 @@
+ .cpu em4
+ .text
+ .align 4
+test:
+ jli_s __jli.foo
+ jli_s __jli.bar
+
+ .align 4
+foo:
+ add r0,r0,r0
+
+ .align 4
+bar:
+ add r0,r1,r2
+
+ .section .jlitab,"axG",%progbits,jli_group,comdat
+ .align 4
+__jli.foo:
+ .weak __jli.foo
+ b @foo
+ .align 4
+__jli.bar:
+ .weak __jli.bar
+ b @bar
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index c013974..e789003 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,3 +1,11 @@
+2017-07-19 Claudiu Zissulescu <claziss@synopsys.com>
+ John Eric Martin <John.Martin@emmicro-us.com>
+
+ * arc-opc.c (UIMM10_6_S_JLIOFF): Define.
+ (UIMM3_23): Adjust accordingly.
+ * arc-regs.h: Add/correct jli_base register.
+ * arc-tbl.h (jli_s): Likewise.
+
2017-07-18 Nick Clifton <nickc@redhat.com>
PR 21775
diff --git a/opcodes/arc-opc.c b/opcodes/arc-opc.c
index c266f4f..7f934ce 100644
--- a/opcodes/arc-opc.c
+++ b/opcodes/arc-opc.c
@@ -2039,8 +2039,14 @@ const struct arc_operand arc_operands[] =
| ARC_OPERAND_TRUNCATE | ARC_OPERAND_PCREL, insert_simm8_a16_9_s,
extract_simm8_a16_9_s},
+/* UIMM10_6_S_JLIOFF mask = 0000001111111111. */
+#define UIMM10_6_S_JLIOFF (SIMM8_A16_9_S + 1)
+ {12, 0, BFD_RELOC_ARC_JLI_SECTOFF, ARC_OPERAND_UNSIGNED
+ | ARC_OPERAND_ALIGNED32 | ARC_OPERAND_TRUNCATE, insert_uimm10_6_s,
+ extract_uimm10_6_s},
+
/* UIMM3_23 mask = 00000000000000000000000111000000. */
-#define UIMM3_23 (SIMM8_A16_9_S + 1)
+#define UIMM3_23 (UIMM10_6_S_JLIOFF + 1)
{3, 0, 0, ARC_OPERAND_UNSIGNED, insert_uimm3_23, extract_uimm3_23},
/* UIMM10_6_S mask = 0000001111111111. */
diff --git a/opcodes/arc-regs.h b/opcodes/arc-regs.h
index 0bdbd92..99c39a4 100644
--- a/opcodes/arc-regs.h
+++ b/opcodes/arc-regs.h
@@ -69,7 +69,6 @@ DEF (0x23, ARC_OPCODE_ARCALL, NONE, limit0)
DEF (0x24, ARC_OPCODE_ARCALL, NONE, pcport)
DEF (0x25, ARC_OPCODE_ARCALL, NONE, int_vector_base)
DEF (0x26, ARC_OPCODE_ARCALL, NONE, aux_vbfdw_mode)
-DEF (0x26, ARC_OPCODE_ARCALL, NONE, jli_base)
DEF (0x27, ARC_OPCODE_ARCALL, NONE, aux_vbfdw_bm0)
DEF (0x28, ARC_OPCODE_ARCALL, NONE, aux_vbfdw_bm1)
DEF (0x29, ARC_OPCODE_ARCALL, NONE, aux_vbfdw_accu)
@@ -261,6 +260,7 @@ DEF (0x236, ARC_OPCODE_ARCALL, NONE, ap_amm7)
DEF (0x237, ARC_OPCODE_ARCALL, NONE, ap_ac7)
DEF (0x278, ARC_OPCODE_ARCALL, NONE, pct_control)
DEF (0x279, ARC_OPCODE_ARCALL, NONE, pct_bank)
+DEF (0x290, ARC_OPCODE_ARCV2, NONE, jli_base)
DEF (0x300, ARC_OPCODE_ARCFPX, DPX, fp_status)
DEF (0x301, ARC_OPCODE_ARCFPX, DPX, aux_dpfp1l)
DEF (0x301, ARC_OPCODE_ARCFPX, DPX, d1l)
diff --git a/opcodes/arc-tbl.h b/opcodes/arc-tbl.h
index 79e6b89..07ff304 100644
--- a/opcodes/arc-tbl.h
+++ b/opcodes/arc-tbl.h
@@ -7955,6 +7955,7 @@
/* jli_s u10 010110uuuuuuuuuu. */
{ "jli_s", 0x00005800, 0x0000FC00, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, JLI, CD1, { UIMM10_6_S }, { 0 }},
+{ "jli_s", 0x00005800, 0x0000FC00, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, JLI, CD1, { UIMM10_6_S_JLIOFF }, { 0 }},
/* jl_s b 01111bbb01000000. */
{ "jl_s", 0x00007840, 0x0000F8FF, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700, JUMP, NONE, { BRAKET, RB_S, BRAKETdup }, { 0 }},