There is no regression in tests for an x86_64 build, while the new hello_arc_hs4.ko is added as well. This is the only meaningful test that I could add at the moment, given the features supported by this port.
$ cat tests/test-suite.log ========================================== elfutils 0.188: tests/test-suite.log ========================================== # TOTAL: 236 # PASS: 235 # SKIP: 1 # XFAIL: 0 # FAIL: 0 # XPASS: 0 # ERROR: 0 .. contents:: :depth: 2 SKIP: run-lfs-symbols.sh ======================== LFS testing is irrelevant on this system SKIP run-lfs-symbols.sh (exit status: 77) $ cat tests/run-strip-reloc.sh.log runtest hello_i386.ko runtest hello_x86_64.ko runtest hello_ppc64.ko runtest hello_s390.ko runtest hello_aarch64.ko runtest hello_m68k.ko runtest hello_riscv64.ko runtest hello_csky.ko runtest hello_arc_hs4.ko <-- [ new ARC HS4 test ] runtest /home/shahab/pahole_pkg/elfutils-git/bld_arc/src/strip runtest /home/shahab/pahole_pkg/elfutils-git/bld_arc/src/strip.o runtest strip-uncompressed.o runtest strip-compressed.o runtest testfile-debug-rel-ppc64.o runtest testfile-debug-rel-ppc64-z.o runtest testfile-debug-rel-ppc64-g.o PASS run-strip-reloc.sh (exit status: 0) Signed-off-by: Shahab Vahedi <shahab@synopsys.email> --- Changelog: v4: - Add EM_ARCV2 to valid_e_machine[] in src/elflint.c. - Add a link to ARCv3 elf document in arc_init.c. - Update ChangeLogs. v3: - Drop libelf/elf.h changes now that they're synced from glibc. - Drop src/elflint.c changes as EM_ARC was already in valid_e_machine[]. - Add test for ARC HS4 in run-strip-reloc. - Update ChangeLogs and a few more cosemitic changes. - Reword the commit message. v2: - Add ChangeLog entries. - Reduce number of changes in libelf/elf.h - Reword the commit message. backends/ChangeLog | 9 ++++ backends/Makefile.am | 6 ++- backends/arc_init.c | 59 +++++++++++++++++++++++++ backends/arc_reloc.def | 87 +++++++++++++++++++++++++++++++++++++ backends/arc_symbol.c | 81 ++++++++++++++++++++++++++++++++++ libebl/ChangeLog | 5 +++ libebl/eblopenbackend.c | 2 + src/ChangeLog | 4 ++ src/elflint.c | 1 + tests/ChangeLog | 6 +++ tests/Makefile.am | 1 + tests/hello_arc_hs4.ko.bz2 | Bin 0 -> 15004 bytes tests/run-strip-reloc.sh | 4 +- 13 files changed, 262 insertions(+), 3 deletions(-) create mode 100644 backends/arc_init.c create mode 100644 backends/arc_reloc.def create mode 100644 backends/arc_symbol.c create mode 100644 tests/hello_arc_hs4.ko.bz2 diff --git a/backends/ChangeLog b/backends/ChangeLog index 5813ddcc..13afc116 100644 --- a/backends/ChangeLog +++ b/backends/ChangeLog @@ -1,3 +1,12 @@ +2022-12-21 Shahab Vahedi <shahab@synopsys.email> + + * Makefile.am (modules): Add arc. + (arc_SRCS): Added. + (libebl_backends_a_SOURCES): Append arc_SRCS. + * arc_init.c: New file. + * arc_reloc.def: New file. + * arc_symbol.c: New file. + 2022-12-02 Hengqi Chen <hengqi.c...@gmail.com> * Makefile.am (modules): Add loongarch. diff --git a/backends/Makefile.am b/backends/Makefile.am index 0824123d..f373e5fb 100644 --- a/backends/Makefile.am +++ b/backends/Makefile.am @@ -37,7 +37,7 @@ AM_CPPFLAGS += -I$(top_srcdir)/libebl -I$(top_srcdir)/libasm \ noinst_LIBRARIES = libebl_backends.a libebl_backends_pic.a modules = i386 sh x86_64 ia64 alpha arm aarch64 sparc ppc ppc64 s390 \ - m68k bpf riscv csky loongarch + m68k bpf riscv csky loongarch arc i386_SRCS = i386_init.c i386_symbol.c i386_corenote.c i386_cfi.c \ i386_retval.c i386_regs.c i386_auxv.c \ @@ -98,12 +98,14 @@ csky_SRCS = csky_attrs.c csky_init.c csky_symbol.c csky_cfi.c \ loongarch_SRCS = loongarch_init.c loongarch_symbol.c +arc_SRCS = arc_init.c arc_symbol.c + libebl_backends_a_SOURCES = $(i386_SRCS) $(sh_SRCS) $(x86_64_SRCS) \ $(ia64_SRCS) $(alpha_SRCS) $(arm_SRCS) \ $(aarch64_SRCS) $(sparc_SRCS) $(ppc_SRCS) \ $(ppc64_SRCS) $(s390_SRCS) \ $(m68k_SRCS) $(bpf_SRCS) $(riscv_SRCS) $(csky_SRCS) \ - $(loongarch_SRCS) + $(loongarch_SRCS) $(arc_SRCS) libebl_backends_pic_a_SOURCES = am_libebl_backends_pic_a_OBJECTS = $(libebl_backends_a_SOURCES:.c=.os) diff --git a/backends/arc_init.c b/backends/arc_init.c new file mode 100644 index 00000000..a7cceceb --- /dev/null +++ b/backends/arc_init.c @@ -0,0 +1,59 @@ +/* Initialization of ARC specific backend library. + Copyright (C) 2022 Synopsys Inc. + This file is part of elfutils. + + This file is free software; you can redistribute it and/or modify + it under the terms of either + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at + your option) any later version + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at + your option) any later version + + or both in parallel, as here. + + elfutils is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see <http://www.gnu.org/licenses/>. */ + +/* More details on an ARC elf can be found at: + https://github.com/foss-for-synopsys-dwc-arc-processors/ \ + arc-ABI-manual/blob/master/arcv3-elf.md */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#define BACKEND arc_ +#define RELOC_PREFIX R_ARC_ +#include "libebl_CPU.h" + +/* This defines the common reloc hooks based on arc_reloc.def. */ +#include "common-reloc.c" + +Ebl * +arc_init (Elf *elf __attribute__ ((unused)), + GElf_Half machine __attribute__ ((unused)), + Ebl *eh) +{ + arc_init_reloc (eh); + HOOK (eh, machine_flag_check); + HOOK (eh, reloc_simple_type); + HOOK (eh, section_type_name); + + /* /bld/gcc-stage2/arc-snps-linux-gnu/libgcc/libgcc.map.in + #define __LIBGCC_DWARF_FRAME_REGISTERS__. */ + eh->frame_nregs = 146; + + return eh; +} diff --git a/backends/arc_reloc.def b/backends/arc_reloc.def new file mode 100644 index 00000000..dfa30629 --- /dev/null +++ b/backends/arc_reloc.def @@ -0,0 +1,87 @@ +/* List the relocation types for ARC. -*- C -*- + This file is part of elfutils. + + This file is free software; you can redistribute it and/or modify + it under the terms of either + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at + your option) any later version + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at + your option) any later version + + or both in parallel, as here. + + elfutils is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see <http://www.gnu.org/licenses/>. */ + +/* NAME, REL|EXEC|DYN */ + +RELOC_TYPE (NONE, EXEC|DYN) +RELOC_TYPE (8, REL|EXEC|DYN) +RELOC_TYPE (16, REL|EXEC|DYN) +RELOC_TYPE (24, REL|EXEC|DYN) +RELOC_TYPE (32, REL|EXEC|DYN) +RELOC_TYPE (N8, REL|EXEC|DYN) +RELOC_TYPE (N16, REL|EXEC|DYN) +RELOC_TYPE (N24, REL|EXEC|DYN) +RELOC_TYPE (N32, REL|EXEC|DYN) +RELOC_TYPE (SDA, REL) +RELOC_TYPE (SECTOFF, REL) +RELOC_TYPE (S21H_PCREL, REL) +RELOC_TYPE (S21W_PCREL, REL) +RELOC_TYPE (S25H_PCREL, REL) +RELOC_TYPE (S25W_PCREL, REL) +RELOC_TYPE (SDA32, REL) +RELOC_TYPE (SDA_LDST, REL) +RELOC_TYPE (SDA_LDST1, REL) +RELOC_TYPE (SDA_LDST2, REL) +RELOC_TYPE (SDA16_LD, REL) +RELOC_TYPE (SDA16_LD1, REL) +RELOC_TYPE (SDA16_LD2, REL) +RELOC_TYPE (S13_PCREL, REL) +RELOC_TYPE (W, REL) +RELOC_TYPE (32_ME, REL) +RELOC_TYPE (N32_ME, REL) +RELOC_TYPE (SECTOFF_ME, REL) +RELOC_TYPE (SDA32_ME, REL) +RELOC_TYPE (W_ME, REL) +RELOC_TYPE (SDA_12, REL) +RELOC_TYPE (SDA16_ST2, REL) +RELOC_TYPE (32_PCREL, REL) +RELOC_TYPE (PC32, REL) +RELOC_TYPE (GOTPC32, REL) +RELOC_TYPE (PLT32, REL) +RELOC_TYPE (COPY, EXEC|DYN) +RELOC_TYPE (GLOB_DAT, EXEC|DYN) +RELOC_TYPE (JMP_SLOT, EXEC|DYN) +RELOC_TYPE (RELATIVE, EXEC|DYN) +RELOC_TYPE (GOTOFF, REL) +RELOC_TYPE (GOTPC, REL) +RELOC_TYPE (GOT32, REL) +RELOC_TYPE (S21W_PCREL_PLT, REL) +RELOC_TYPE (S25H_PCREL_PLT, REL) +RELOC_TYPE (JLI_SECTOFF, REL) +RELOC_TYPE (TLS_DTPMOD, REL) +RELOC_TYPE (TLS_DTPOFF, REL) +RELOC_TYPE (TLS_TPOFF, REL) +RELOC_TYPE (TLS_GD_GOT, REL) +RELOC_TYPE (TLS_GD_LD, REL) +RELOC_TYPE (TLS_GD_CALL, REL) +RELOC_TYPE (TLS_IE_GOT, REL) +RELOC_TYPE (TLS_DTPOFF_S9, REL) +RELOC_TYPE (TLS_LE_S9, REL) +RELOC_TYPE (TLS_LE_32, REL) +RELOC_TYPE (S25W_PCREL_PLT, REL) +RELOC_TYPE (S21H_PCREL_PLT, REL) +RELOC_TYPE (NPS_CMEM16, REL) diff --git a/backends/arc_symbol.c b/backends/arc_symbol.c new file mode 100644 index 00000000..be69814e --- /dev/null +++ b/backends/arc_symbol.c @@ -0,0 +1,81 @@ +/* ARC specific symbolic name handling. + This file is part of elfutils. + + This file is free software; you can redistribute it and/or modify + it under the terms of either + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at + your option) any later version + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at + your option) any later version + + or both in parallel, as here. + + elfutils is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see <http://www.gnu.org/licenses/>. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <assert.h> +#include <elf.h> +#include <stddef.h> +#include <string.h> + +#define BACKEND arc_ +#include "libebl_CPU.h" + + +/* Check whether machine flags are valid. */ +bool +arc_machine_flag_check (GElf_Word flags) +{ + return ((flags & ~EF_ARC_ALL_MSK) == 0); +} + +/* Check for the simple reloc types. */ +Elf_Type +arc_reloc_simple_type (Ebl *ebl __attribute__ ((unused)), int type, + int *addsub __attribute ((unused))) +{ + switch (type) + { + case R_ARC_32: + return ELF_T_WORD; + case R_ARC_16: + return ELF_T_HALF; + case R_ARC_8: + return ELF_T_BYTE; + default: + return ELF_T_NUM; + } +} + +/* Return symbolic representation of section type. */ +const char * +arc_section_type_name (int type, + char *buf __attribute__ ((unused)), + size_t len __attribute__ ((unused))) +{ + switch (type) + { + case SHT_ARC_ATTRIBUTES: + return "ARC_ATTRIBUTES"; + default: + break; + } + + return NULL; +} diff --git a/libebl/ChangeLog b/libebl/ChangeLog index 5f9ea552..3226cfb4 100644 --- a/libebl/ChangeLog +++ b/libebl/ChangeLog @@ -1,3 +1,8 @@ +2022-12-21 Shahab Vahedi <shahab@synopsys.email> + + * eblopenbackend.c (arc_init): New function declaration. + (machines): Add entry for arc. + 2022-12-02 Hengqi Chen <hengqi.c...@gmail.com> * eblopenbackend.c (machines): Add entries for LoongArch. diff --git a/libebl/eblopenbackend.c b/libebl/eblopenbackend.c index b87aef19..084a1544 100644 --- a/libebl/eblopenbackend.c +++ b/libebl/eblopenbackend.c @@ -56,6 +56,7 @@ Ebl *bpf_init (Elf *, GElf_Half, Ebl *); Ebl *riscv_init (Elf *, GElf_Half, Ebl *); Ebl *csky_init (Elf *, GElf_Half, Ebl *); Ebl *loongarch_init (Elf *, GElf_Half, Ebl *); +Ebl *arc_init (Elf *, GElf_Half, Ebl *); /* This table should contain the complete list of architectures as far as the ELF specification is concerned. */ @@ -152,6 +153,7 @@ static const struct { riscv_init, "elf_riscv", "riscv", 5, EM_RISCV, ELFCLASS32, ELFDATA2LSB }, { csky_init, "elf_csky", "csky", 4, EM_CSKY, ELFCLASS32, ELFDATA2LSB }, { loongarch_init, "elf_loongarch", "loongarch", 9, EM_LOONGARCH, ELFCLASS64, ELFDATA2LSB }, + { arc_init, "elf_arc", "arc", 3, EM_ARCV2, ELFCLASS32, ELFDATA2LSB }, }; #define nmachines (sizeof (machines) / sizeof (machines[0])) diff --git a/src/ChangeLog b/src/ChangeLog index b679f092..e8d8aad6 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2022-12-21 Shahab Vahedi <shahab@synopsys.email> + + * elflint.c (valid_e_machine): Add EM_ARCV2. + 2022-12-02 Hengqi Chen <hengqi.c...@gmail.com> * elflint.c (valid_e_machine): Add EM_LOONGARCH. diff --git a/src/elflint.c b/src/elflint.c index b9548862..b4eac32f 100644 --- a/src/elflint.c +++ b/src/elflint.c @@ -330,6 +330,7 @@ static const int valid_e_machine[] = EM_AVR, EM_FR30, EM_D10V, EM_D30V, EM_V850, EM_M32R, EM_MN10300, EM_MN10200, EM_PJ, EM_OPENRISC, EM_ARC_A5, EM_XTENSA, EM_ALPHA, EM_TILEGX, EM_TILEPRO, EM_AARCH64, EM_BPF, EM_RISCV, EM_CSKY, EM_LOONGARCH, + EM_ARCV2 }; #define nvalid_e_machine \ (sizeof (valid_e_machine) / sizeof (valid_e_machine[0])) diff --git a/tests/ChangeLog b/tests/ChangeLog index b656029f..9cb8a2cf 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,9 @@ +2022-12-21 Shahab Vahedi <shahab@synopsys.email> + + * hello_arc_hs4.ko.bz2: New testfile. + * run-strip-reloc.sh: Add ARC HS4 test. + * Makefile.am (EXTRA_DIST): Add hello_arc_hs4.ko.bz2. + 2022-11-01 Aaron Merey <ame...@redhat.com> * run-debuginfod-section.sh (RPM_BUILDID): Use buildid from non-zstd diff --git a/tests/Makefile.am b/tests/Makefile.am index 356b3fbf..c35a7c33 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -285,6 +285,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \ run-strip-reloc.sh hello_i386.ko.bz2 hello_x86_64.ko.bz2 \ hello_ppc64.ko.bz2 hello_s390.ko.bz2 hello_aarch64.ko.bz2 \ hello_m68k.ko.bz2 hello_riscv64.ko.bz2 hello_csky.ko.bz2 \ + hello_arc_hs4.ko.bz2 \ run-unstrip-test.sh run-unstrip-test2.sh \ testfile-info-link.bz2 testfile-info-link.debuginfo.bz2 \ testfile-info-link.stripped.bz2 run-unstrip-test3.sh \ diff --git a/tests/hello_arc_hs4.ko.bz2 b/tests/hello_arc_hs4.ko.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..56ccb3c494e84450c7aeac5f57f94aef8336f8e0 GIT binary patch literal 15004 zcmai4Q*b2=tgekyyL)Qu)ZE&(jZ@p$+O}=m?bhwqwryjJ-M#;PyKnc)V<wp|$xJfy zO+<CUylf&m)M`3z2u5-c;*tOUU+nY#K;^^Rt^b(y-J0s&{tW?1+Xtap2>}6ta7^Y) zQC)?z{Vw94AI~sFcO|<8?dfziH4h)M{+}NuuuyEzs-HQw9tZ&!2w^+V<wg25e|w7# zL{%oPgeI@#Ac69QF7%y-TvBNyD;5WsqCzaN3Cd&1XHsAxh8o9agE$D;aK0-^W~0Jv zLKdP#J}+=s2hL;Bl&E1%<S0OJKyd|@TL*#(AqWX&QI(_t|8asuRGWxHh2Sa=<bdFS zfEI>;fGqrv%m0OSVK8-6Qkv3|l1x==`J>wNB*kV$vNvJiiy#mcvOEx4s*(d0z7os< z@$z37D!MfEG6eX46F>`d%tN3oN3n4rmMK}L3FNB=WS5U}*(g;05rwQMUD}Ks!nYw+ z_Q?hrQvkux)L4)NgoF?%)Zt=cKscZY#|sDyh6~5S2sVMlOa#dKswqI_mu%8qL<wZ) zP_Lkpsv&0E_$Y92Ks@Itd&}pSETEDqKTBp4LO^hE%!9#%D1mU{f&cLU|8H4I7*K>@ zC>T@oOa($4so?yo8xHxx@9Mtl&laR5B9Zfg6w87@_)DPmB`SfSFa+v<CHVXojQZas z{_Dxx{Yr^j<e%BpTG1qYQAxxpFd-6!yfml8r9eUggyGmV>TU?mz<ucz7r`<?P?{!e zRNYOq<pf(DvW<#J^7iJ7n3{>Vx7YLaqJ-jnWAP|_M3WyA+kIxz{P2Kr;IxOwIosZN ze7KtOSnbdwn{eKRZlOjUa`!>b5WO|&TMy)=kf?*|C@V6ugRA!te)VuxArHhDTQfPv z<tJ%xA&=MVK`T2uDaZSCZH7)}ddc2s8NRBO`bek&$hpq^5F3<|KqQQw;>pv8DLh$O zT{~I3V_}loJcMZF9yJYA!->JZuCWgtlvTzR6a5V>T?SMEP|D&H4+|Tv{6n&cC(G<{ z(~%@iA2wg*_$_$iH&^F_ytkI*t%1v*C<gvk^57l)i3?x7rI$=(jo#c6ku;E?<(Xn3 z5K$!~-7)z`p<m|N4v*TkX7*43NX!#qgnZeR8C8gz<Vn6owLcQw6YsZ=E_rfZxwfKd zzyviLZ(61Nz}k&qmP`wtY<Z_&7{6`(di#-hK2aa0Lfsz1*NTC@Ndg#?)r(Cusa%vj zHI59F;n>POIx;yf1NAWfG~4jl$W=797(|)GR$_zI;)tYm!%&9?L7F7KpKJ*ju94PJ zD-?(+g$}i?7;ItMK*w%l5K`tf$)(boOIUS5BpPnPkS1&?#uvmq!!LM$5<QdVPKXQ! z(WDIb|1-VPrl<`~sTE#?TjxR{lDgg!gd0cGxZ(WzbCkI0k^Rs1)E3%?VCG^h^WwOo z;vRVZau!GH&j`=5A<6y?-}7nc3cR7C3YWuwXb~tQn?fb0o;XBr_47!bvW?g)FMDGy z;dAxixr>Ou;!LgQjmw6~fckk}eYf^1t#e0SAf5BuMq(6eR?O!jvLqJ*k>_BwbOg$H z=y(v%*GIx0?r%7KXo1MAzoL=l=2!=7&IVv`(NJ};H2I$!CEH4|J>hqi_xp<yKZ?rg zY}qw4-zP<Yl}lz?E!}itE-3+GF4>SZkt|C1`|Ug5-v$Y&GHxQXVXDeC@ssW(7Qy5a za$n?b4hBxPn?KFf(hPWhoPImaCN2Ju(3y7xD{#fkh2ctT!reFil2zeVJw>aUN7L)- z9c)UICm)lfOVfj<M$S(G#g)@TtEdII!<XA;OX_xCv7Ve?{hOY?UK8d5ghKqctToUV zU8bu&C1&8Gs|mu+NH>>l4(337%Y52w0)0c+R^-CAQDLEwY6vDm#_g=(3Tmj}?o^cD zO2V78IoFK^DL*Qf={y~Bnej}r_+ru<(^CEcju27R1&u=vRG@Gd%P@iES)8GCE&enC z^kK4Cwgx|kZyC?*WsI8I-5Z8ahW*1arA5dosgvops#uqi>nWq!4l28UQ~2hH%pJbH zel}^1*KV9`nM!4yfzd74$pYh2UmS{SFztCm;ma59uwaM^!b<hGkakeMaH~Hri(6vL zUP7_hOd^XAWCnU;l+r;-js>N6dF~kc6GdbZw5u%K7zF<J2grWsK_-OSLDD1hwL{0s z<1)Au^qql+tb|ctvnGYC7-?SCzfwCCR`jQA6A`dQN~Ll0&(rqK*R8p;euH02wr>e` z=Te{Fw@BCK!W?O2Omb#=hCBEfdr&^*Mte8Pbyp|}p1Tz&V&?pZ-idZ|ndVB`&bAN= z!|mKlkfk&&nBd!g-#1&{?b$AFAIl4{9l<c~OiC<u+tmkXiEMvfxo@=ebnsaxE(mqp zFZD<&rl|Gs+Jx&nhWm8iL~t&s_m%GVu+H?N@-m|({&MZy2#h~iHE^99c6Sr)tvDL3 z?P*`P{{BPWJ?zh>n1+DU-EB%)ir$p9K@X4j9tqKrMV?=OhR7U`M^R3CH~-ldq{r(_ zto9PsAF44~X2qT!6B=KKLx=JlvV-vu9e%PKIFud9n;qY4yTtjg^1$-G4kHWp1u5Fj zQA&f7ju@x<9lbmfKfdg$IoiA*vNN2{KkYzQ4YIX+RBZQiV6UtCD`!lHAK`f%?w?yk zwF}--ilp>scTLY4hZY#mIi42v1-LC%+?-=?mL%<%YKQH{@>QCtFX!C`2FnVA@9JO4 z7ZttV4c{w4&*r=*dknM>bgN!H1yVl81H*=GB0v1q#5nU7xrgpBPQ2SG@&iyT4ZIcG z<&1P}dVIE!9&Ef!w~Eh}@?Pb&+SaZ2LsiGzmRzKUV(aT;-452$h*(Bg){<|CWX9|m z@3UuaDBb#a?~4UbdTjc4sJ7ozn02=B9JIK5@SYE;Z}xpuTGTpKz7sJXj752bYUK-- zgh$!AbN@<EFaGd;6ES4>D%ws_G-49?CJ|2*c|wkM_S@p^opSVa>1boWl4OVI^fh=a znZsoOF#Ckoj|3pn)o*xfA7D!sx7~nxxD2EU*3p4p0DRsTm#RQbBYm$Y2i(F{@H#?j znua(hV0Wt{4P4rWk*wQYcl<nTC@3hMHs~jH=;|q2PSszN6Xj&Zm^0oM%_IWo%#5iB zAs`W(Xq48&C1CYsaMatd_QolOmq!cTkaf-oA+1nQGZ9#nhsElrFWUOQ)zPvoP!f?; zq?xE^B1K^)i7u|um%T~0#i$}%J0g)`n^i#=Ps9Y?_f?BQfP}jt>PDL{$~cNBFC{Co zrc;V&*sZ6NBTTB16ClKw^&7)&(vpW7R2uYa>beip%}~?1wj7dW3=E>Y8*j;7I<Qre zu*;Alk(60Wk5T^^gSu1lR)++?YTSwK;}b99v`^dUF=0+=DE7tqtQjp4jC~5>hiK%p zOH3fDwM-n)7QJ9OqyRJ0mB7djaAQ2JhW!vES)?p8x3L5n5JL+xj2egDjk0<Z3B!li z^c9FgDI-}EjK?H;M08bR)!Y#zqr5z+0VmVDx4_)(Gjo$7UYgwy6pdiIK&&s81Oo%* zSNNLN8nb&M!Q{JMo-APnJ(%4UgH7ydZ^qOAoiY)8^3w&8OFlw0P+$B+9Y=y(yA4Rw zn_^;JIA9Elz8_vXQK^_LI@yb)C+guuH3J|?Rx6^wH7*&aO`h+L;}#YTO>4ISq!at> z4U>V8r5rEYZK~RkgTK9oXjf5Wbas|_)Z&^7NUL=l0?=NTGz+{F$5Qb#2fV<s%iG_e z${8tjRcECklp7b9$p=BIlZ?@9*5^R>rS7#K#eZ*#k+vKuQ^aElp#_=DrHdGRH+C<o z1LYuQ(_QFG=VDtMX&ss3ZHgsxbEA)Ei9oVRv+5)}>vk($JaT54^l>o1*Z_dp7DjPz z$28N`dxKKlox{XbUgypTLzP+eC$uQH6w-^Fi4lW^r=~0Gv*y*s1QC87<@f;GA9&q} zba4k+rJje45^4(i^%=*66noGaqMH*Sk*Hto*8{jN<fgEw3^r+EM4n;sC5nYaK+VVM z-O%X}jdkU4_K{a+)W?gQR0@`wI>i{gOX1ztxf5}Z)rHN{#%gI_@|8UbXG<7a1l)36 z^4*j%j0D`I)HkM4(Nu*oLqy19i4mzj+BR$ocJcU%SUW%Jwwq`J^Z6!`@R$Ujo9;<! zuqKs04^@RLmBAN};be<^bXGB|diIM*77hmF)dn0*cvh`zK=Ih&K~T0{;jltOGO2Qz zBo@7&9V79RRF-YCGlf?vgSuQj!e&FmL#d%osY+o(noTB~L_Y`)WF{4gp?)tL5vpI5 z-2ZNATb;;gCpnw8`&}TP1O&e*+r?~F1X&HMOI|^r0z1agjJMz!nzQwt8cI|GY1r4W z>r~W9z;q@6_T;HNi_+j?d1bE;>@}7;H)xD7`)A(fbqI3X{V4m3?Zg#l-+3#wC%Y7m zzJMPpJCc(gIgG$uq1;N}M<G|h)xAuM1gYyfH!>z0O@r(S=eNTd(ddnYs5g$0D$Hs6 zc1RX<`wFxAnkE`9g(n5V%4<W)(UlUn@cv5O3zPmdisCj_R4}tA=+=*Zw8T4X)(qwt zH8xIx4q=Ea2^&BX-PFgAf!o276%j?NdW|oCRs~2;yr~(AA}K)AcC@o%Or)agTRiiX z2xVtWKBm9&gsl`f7pB@Mu5OBb;8LEw)){tzOERUpl?dh~y~2v5&}N>Z-WMN1?QZ@x zj)%7OyS@S{E6wLS%nc^}EwLsGnclGy@gN^xC`=C$E;W!<q8|73#DUw2Z~5B>bd893 zmzC<Nr@*|xs!j39fQII=4)JALEkQ5?xhUO*nKpF{Y%D@<B=t@T_mqdm+v1}z0iGui z_4Xo-Y1Cs<CqA1=<Rn7YQ5%gO`DD-r8Y#OeNvkNg@lH>1Ec0NenM2^Goi0YSdZ@C# zgth1<cX_$cRXSM_Z<@UF{eB-`&kr8TDy|Egt0Ej3&1E$Ts0l2-u(&&6{)9|cfJ>8~ zT&%fOvY~n<>TI1&YW1ncfu38v)h(0%#n{YLXyAEqSO~KB_9T_GuSxj~v9$WA-bD2= zets{xL4@G;yY0r@j-+qyNmA9w3X*V^++b=uX2UjpYbE5-dvT<&+OkIaIZQkX^wSRm z1d+F({9$yHXZEoHws{yLIH2RrP20)G(IE~kkf|LmlR{_T1fo}xiguF-IhX)jLlkP2 zVq{()f(@SMznv1U&-q{_s7T5w1|wc-kgA^qos$W)rErrg+`>>Nb`lN66{{vEGq2T7 zLgn(&{2PDC%=p|(+PgdZ8W>6$z!VpZ#46(-@*W4n@vRMv2$nH>X@ne~ArL2xV*ggv zaq7FdB}uFcbqZfl4ijVKNR?Ln#OCvNB0JDfkL5r-S&I$Zm`n^}cbUV^+U|v^wWzAn zAs=?l$1tFA7!vgw=XD;7o(0{4#7><Kb`S<GQOyLpEVxZr2IFZ#G^w3_5eiNpr=g~T z3Zk0Ni#i-R2ZvJf^E{{~IFr*&_#w%yQEhX?O9kfKvYR<M_44p=)dMI5F+#-%eaMlK z3$hQp*%rC|?$YQrA&ixHO8gEz(B}(E!FQ<Vb3UgFj8ladVMcMp;;3Zk4eu0L9uSll zOOMPI3aBqU^l-Pkf>^VqEhHu<C)ouOqh#AlfX^h>oOM<xCNnL~cEp^t5hIjnA%2?t zEV}N_uRqf*L|R4F%eloq_wI{YrN5ic#~OC=l{+WT$yH;jqe&gH@NB=lO=pR=?CEVL z((W8t%J-_?%~h>`8s+8;A9*YwF8$MBHgW!H$kpFB!|?91pJti8UA=jsqHv^lJ@-Uf z!+dGAAvPk65$Wxv$l-*f?Bs@3+gAM&Zrug!m^{jf6M{MyT;^q!Wb`yJeZ-GIC=}i= z6rb(Z7;WRX{X*j+yz4Tcd{Vdd+qM6IbBv?RQ4vrx@(B)adq;oP6tdKOm6wVJwj*GR z@jzv=bJPNu7E{|VKZtCXYqA719tGx8WmgWo8T(JV5{F=2$@jM7N2yx%Hk`z=7Y{3Y z-YHcm)Qd0bnoSm_Sc5s1S?7H9sWy?bn2;H&$h5k2Ai#hvthAJE&`loF<Gp^Vq(C;Z z(f%sJfo`DvL`s@&x6yH#438GJ>aXS-{c1cuPoCVb+Sx!Dw8G2PDkr=5XD5H0;~ci$ zXdGINn}+YLgFfy1WmiL*=L^NRlZJmFaOs=GVVS&~bS~!!%;IM+4?E}~@$6>m7~I04 zjl<R~e_7B4YwK1Lj{UN4OU_m?^0sg&*Ri}%x4N*mY3*}SBI(eVORp-wYzgP1^^J9t zzVW=(V+S>iPrgPUWp`4uA}lxo;BzU&5iknFA~ssed6KX)Yw*_G)OZ3n86!KgHPh?m zV+4}z7Mg23B|{Y|G)&VqlYymMhsBt0afra*u`=i+Fk*30(uFh>*bqq)^nr+K*rkx@ zT_+57-k6W?iV{V#pPDcNX&&l%R}Fka>X71p(e<&I>MqQ$SOlA=09`rR_j|*(t*f*5 z#rCUeuXX-hue%=~J!L`*w+D_VI&;q?e>#me{~g{m+IraAcugA_y0LJrc;XW;l@QCO zjm-y)WD^k?1b;1dq&YY#XL5-XBR36wV78Ei?Qs<Klivu!ZT6_?*kcJ{`$_4DA>v!) zr~)VDKPj^iN(OEyA=RrXd7d$Oj%P}OY0_*{dfhIqbp|=nr|_5u9lr6-71UI(N*Nkh zZbt$h2~eZpolz{oFh<`_f1Xh{_##Eur=_2bWXD%L(Y!90du^}xpl28kH4Azc7}94q z8SEWuX&qZzLNUr8GYJ{ZlK6*czj-^%V|oW8um+k#q2RJC5G<Uw`>#slFXfMZd}V16 zb4uSW7OLD0@n-5adGF9FMm><wjv_*r+$&X;`YtM5b7DO%v8mMX?$TcL*oXc*ZBcJB z9gV?dbaHC9=F!m5>}dNwHu4Q5+}>^e<|XEQ65?#<|8wyArS||OoR8REQ_DDQ)F*vA z(K`~24lSvr=O1NfL78BZ=8;_7WWm<XX4|;AjLyEfFJ8dX&J#ZllQnc}+pfoFYJQ}U zxyNDG*(hgky4U$mugW$9(yV9l;8kDQhZlZjXT&+J#3d>cW>*Up+)LW8FD-_sFw)mx zOJvAgsU_S%nJ_pTxOZZyN6BA>tuDtO?hZ&82IuDBBYNP`f+X``;hwFLPRi-;TQ%gq z_x4WDzi)SoPnS<R1jw9)&X!4k@naW%&^fz~hSHgjT|b1+&xhy#CkYOPApm6o;C!S# zK;kw&Ll8kCJFDu*4>xSCe}B$~H|-qpk#yp^zYLLwp#>A&cRC!6yMB}>OkPCo_G`|& zHxLk5d4_4MCLr}7hw~9U&_L}n#e7l!y{&j3n|cx03qJ3e6F;T|PQXC7jGU7FY7!Oj zm7$Ofc7TIW2ORyG0d$0jFvcbNbnZc1QQdz4?lHa$1o1p)RJfZ2QC#@4#^3_$HIA-o zSH)4fyZ@2QeD3u*x=qaRSbAzWZoVsocW?Z@{_@v}bzrZk^H|J8QQS1CC<#fe^ZGEQ z<P>a!bps(U+yB*kqcH%(0`2lj+8+E+di09MexQkkgby5*ZTUdB%uBsxvPFtW`dnk& zt06Aij7$2Wp>)v~zz+%!P5xpO-Vg2f+#$oZk4Ps&z!bA~G?z#+rv#4dsdl$vVpa-+ zki_-ZLk|)Wvv8gVC<!nS?pIOfpFKQprVx~7{(f5_i+N|ssLiiUwEJ>K*RqH08y)?3 zHxkkTqz8ZQ5at!o_u_k<R%KFIKuQCI74XU3?7N`Z>I5V3Y)1!uv7ydQqXW$4FLC-h z(im)NH$_Dg%Z^rCA!SSHs9NQQ5B>a-y*>F@7K-trPL}N}UfZ;$jb4mMe-ieMQj&FC zI~Z4#4E4x?*h#xbwGt$V{_4qzo4Gmh?77uy;gu~H{jeYpj1aaD7sm&E2N9wPQ<G7+ z>gSfyM%r}{Hp9;bxbs?Ge<b)WUUnJo{a*7$N$iz^rcSgB1KL*`^0W$E8T6^XeXeNT z*)Gf(*;?J`Ux0QpuR>v6zkRGja4M6WnH3!s-|gqf)CB>3x4^_w?Pb8wVJX+`ujIfY zVT3dhV8L`1>!v%*OZoId6`Mq6k^i#by85hHeL?g#C+tHB?h5_7HBpRD0cS9|HiHEU zKjE8<q{Zy+bf|%9P!}JZIO?92&1h+KZ&36Ty1BX4@yj#&fj&<p<O6r=MzTkKauMZ) z)t~S~t``y-C2a))o9Ujhzv33}Qibj+)pD%HrPJmadWI>`p2r=Or6c1sx*5%3fCwHw z__8mRtlN5CCdg$W6g3_;Uv>w+{ARrBTZ*EEc&st~<FK`j^CI;Zc3)nZmaG1>?XO0G zKGa^o&Ja8vCS)@jXCc7@KD!w$&{Sf|A*)NjiFfSxZA)uReN#xQ;{%S=ui^Pq!7Rj# zjAF>+$<KW^lgItPdrzpRApt8d^A^27Q3~?E7FXQie)QPd*%z&k(tR=V0obp9zJ@p0 z(#&seZ5cL%q5x<o{v`|3%>g-o6(ZO5;f0{epGUEgTcopDQwBS5E^cABYGm-Z%`f~Z zrAm-D2B;nei)4b>$q4=Hq*f?T*zz+kX?yZKC}wJwy1@c!+yQG-8|~c`i~BpWgQ2H1 zupf)7%FQhdT;43r+v1PrrHL~TnY1nGtaJ`{0z&Wv($EWe^#Q$C7Vf%n4c13Sux7jl z3^6)W?aEdMLXG1yn^ZF;>eG6y&kC&Fs(Jbbznvw1SC)1VubltnnRRbnF$`5nE`WHt z`R>*<UjCQA71^fNA(9&s#61N5nf9jC@ImOW>GhG`j6K53n<_>k9&1A5gaPK<kX$jw zAS8K{kVU{x9g(Dm!XKD7&Q69i?kCjmDNu@kkvxA%d>WfkxAx5XWz_K<zYF!x?1%$` zmh(H|ZH6q?d#BI(S<RKJqj4456>Si<2|FNM+$diz`2iV5#U=y@3WAeRu+5j2knvsw zerKS|IZ;wkL^pg7uQG{Gcm;VG3atHLl+>)2bO_PeI<s^PFuG8*4j3QG|Mx0%rJ!`) zqrBESl5ureFnYDWdD$$0`)@5OZiD%kZHLmH{{||{r4e^tz!METE7OGIEV31mjG`>2 zmR*?R`qT4_Hf8L9auGygC`{~sMsFwW_(4RMVCBH{u5GD1J3C+KeD$tFh*q$1={M%# zF}M4UH|7w&7J4wjT%?u!D<>mA_soFa%V#aSvd&h&r=~{(mQI!j?RHS(LK;d1?cfBk z&x>|hT0cylm=*n$B-nLG_vt&0C)wh@9`V)Fh`JuzkyM+0UT*sGGhC&BplFHH?}%~P z$KPAZ)a*ssLFCgN{?PxYV!(Pqj}2LX90DQ$19rUb;Op+lBi(+v>+4S%X7Qp%F-|H3 z^C=>nI257E&CxZBgDU&-UH!MwxC-Y2pEDQm3%#tdYCB8cO>K9_Hx7rKyhyW($H~Pf zJONkkge26uaHaIO5!9<oNCTAeJ?7erK$TO3P=PW{rNxGC{CM|PWQ^v}JgENY>PV*U za-rSEz(HPTWznxp5jd|5F2u)aca)I&-}Ay=DA-pZB;|=DWT(9ccCK1Kz0BBMrLW}T z=8&<LUbnSn7rTP~Rxi}lOvNdR!i`LyExuL(m*RX8q=eUZWcw-8(vCWm5;zn{2vey8 z|59zH0HhG>Og8+<W-8I(tISV%j=QYisuM&<bSnh#J2+4OggbO}>>7MNP2bxKnsErU zque{zOs~}#s<m(J#)O0-*LY$>^U$07@eH1ZIyk*_|N2HTCXfvpdhgOnkZXCOCqz?7 z$*xphEbCRmClIfTIXjIWY9wpnB!*`Z1W_cZys|^oLUB??*i3Lt)($20oKsK*Sm+CP zaWcAKb0DAN%Y1z)UOjk`ILxJg6fAL|h90%L0Tu>G1JLyVitP3cRmguWAnc;c{Q_eB zzviO9*R$jYH^^WZDnjH=%kI<6L`G%6a-_@*cvr%IMZ?Dhmw(W<i}>K58<VyAprf`` z&e0Gp-~7gLf&06c;m=E|8{~;9(M+u_Tj=2Axf#k2gR^fmR3&#X^RoU*Lb~O;`eJl6 z;<??>_U!L?^r|EcgbB54Qx!>M@~U(bQ<)h-08mi_Ouh83TyK=v0q=PX?cWB^`>#I; zwySf`TD)`fsIq**UN&j%nFBDdN{da^hVJlvQXt8Q7nc=yo{>Nn!gdm)<d~A*(07;q z)iCq-TQ*SzB_eW`t{X!p%&b#tj6nlIWQd7!elx6Qyk+fPf0~=!aEyrJ>d-qb0&AR4 zehY1r&yA|8@;zJrb1?i~T=QUrGFNMPrCVYC&mn>xj`>uYRSyOzL4d&CiGThAkjb(} zL3V#6D_0oJk<crXwa<Aw4~6X$j-R7388{WcC!lw9FvtrFGql~)VqbfA;{3h~2U<8Z zEZDk?xD}ay-sR!pKsv$RP#5<wsuC1T_u<EBZN<(&wz*|$>2dzz#zR@*FBSg9COk@V zs+O4~mF31Ga4CNJ6B`gPMFxk?LwT*Wm-UXTZxp7e#k?VV^z~5l`BzEs`;BY!w%%VK zrZY#ix`N-=zq@?}R!Uo@e%Q?=Wj}Kⅇ$;Yx}n`tRj+g_5HUVsT%<&XI}*D78+^n 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 literal 0 HcmV?d00001 diff --git a/tests/run-strip-reloc.sh b/tests/run-strip-reloc.sh index b7ec1420..033ed278 100755 --- a/tests/run-strip-reloc.sh +++ b/tests/run-strip-reloc.sh @@ -18,7 +18,8 @@ . $srcdir/test-subr.sh testfiles hello_i386.ko hello_x86_64.ko hello_ppc64.ko hello_s390.ko \ - hello_aarch64.ko hello_m68k.ko hello_riscv64.ko hello_csky.ko + hello_aarch64.ko hello_m68k.ko hello_riscv64.ko hello_csky.ko \ + hello_arc_hs4.ko tempfiles readelf.out readelf.out1 readelf.out2 tempfiles out.stripped1 out.debug1 out.stripped2 out.debug2 @@ -120,6 +121,7 @@ runtest hello_aarch64.ko 1 runtest hello_m68k.ko 1 runtest hello_riscv64.ko 1 runtest hello_csky.ko 1 +runtest hello_arc_hs4.ko 1 # self test, shouldn't impact non-ET_REL files at all. runtest ${abs_top_builddir}/src/strip 0 -- 2.38.1