public inbox for elfutils@sourceware.org
 help / color / mirror / Atom feed
* [PATCH v3] Add support for Synopsys ARCv2 processors
@ 2022-12-20 11:56 Shahab Vahedi
  2022-12-20 17:33 ` Mark Wielaard
  2022-12-21 11:27 ` [PATCH v4] " Shahab Vahedi
  0 siblings, 2 replies; 4+ messages in thread
From: Shahab Vahedi @ 2022-12-20 11:56 UTC (permalink / raw)
  To: elfutils-devel
  Cc: Mark Wielaard, Shahab Vahedi, Shahab Vahedi, Claudiu Zissulescu,
	Francois Bedard

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.com>
---
Chagelog:
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 ChangLogs 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        |  55 +++++++++++++++++++++++
 backends/arc_reloc.def     |  87 +++++++++++++++++++++++++++++++++++++
 backends/arc_symbol.c      |  81 ++++++++++++++++++++++++++++++++++
 libebl/ChangeLog           |   5 +++
 libebl/eblopenbackend.c    |   2 +
 tests/ChangeLog            |   6 +++
 tests/Makefile.am          |   1 +
 tests/hello_arc_hs4.ko.bz2 | Bin 0 -> 15004 bytes
 tests/run-strip-reloc.sh   |   4 +-
 11 files changed, 253 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..8dc792fa 100644
--- a/backends/ChangeLog
+++ b/backends/ChangeLog
@@ -1,3 +1,12 @@
+2022-12-20  Shahab Vahedi  <shahab@synopsys.com>
+
+	* 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.chen@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..a013bc4e
--- /dev/null
+++ b/backends/arc_init.c
@@ -0,0 +1,55 @@
+/* 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/>.  */
+
+#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..3fb5801f 100644
--- a/libebl/ChangeLog
+++ b/libebl/ChangeLog
@@ -1,3 +1,8 @@
+2022-12-20  Shahab Vahedi  <shahab@synopsys.com>
+
+	* eblopenbackend.c (arc_init): New function declaration.
+	(machines): Add entry for arc.
+
 2022-12-02  Hengqi Chen  <hengqi.chen@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/tests/ChangeLog b/tests/ChangeLog
index b656029f..b5136869 100644
--- a/tests/ChangeLog
+++ b/tests/ChangeLog
@@ -1,3 +1,9 @@
+2022-12-20  Shahab Vahedi  <shahab@synopsys.com>
+
+	* 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  <amerey@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
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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


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v3] Add support for Synopsys ARCv2 processors
  2022-12-20 11:56 [PATCH v3] Add support for Synopsys ARCv2 processors Shahab Vahedi
@ 2022-12-20 17:33 ` Mark Wielaard
  2022-12-21 11:27 ` [PATCH v4] " Shahab Vahedi
  1 sibling, 0 replies; 4+ messages in thread
From: Mark Wielaard @ 2022-12-20 17:33 UTC (permalink / raw)
  To: Shahab Vahedi, elfutils-devel
  Cc: Shahab Vahedi, Claudiu Zissulescu, Francois Bedard

Hi Shabab,

On Tue, 2022-12-20 at 12:56 +0100, Shahab Vahedi wrote:
> 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.com>
> ---
> Chagelog:
> 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[].

It was, but you are (also) providing code for EM_ARCV2 don't you?
So I believe you do want:

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]))

>   - Add test for ARC HS4 in run-strip-reloc.
>   - Update ChangLogs 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        |  55 +++++++++++++++++++++++
>  backends/arc_reloc.def     |  87
> +++++++++++++++++++++++++++++++++++++
>  backends/arc_symbol.c      |  81 ++++++++++++++++++++++++++++++++++
>  libebl/ChangeLog           |   5 +++
>  libebl/eblopenbackend.c    |   2 +
>  tests/ChangeLog            |   6 +++
>  tests/Makefile.am          |   1 +
>  tests/hello_arc_hs4.ko.bz2 | Bin 0 -> 15004 bytes
>  tests/run-strip-reloc.sh   |   4 +-
>  11 files changed, 253 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..8dc792fa 100644
> --- a/backends/ChangeLog
> +++ b/backends/ChangeLog
> @@ -1,3 +1,12 @@
> +2022-12-20  Shahab Vahedi  <shahab@synopsys.com>
> +
> +	* 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.chen@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)

Looks good.

> diff --git a/backends/arc_init.c b/backends/arc_init.c
> new file mode 100644
> index 00000000..a013bc4e
> --- /dev/null
> +++ b/backends/arc_init.c
> @@ -0,0 +1,55 @@
> +/* 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/>.  */
> +
> +#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;
> +}

OK. That is a lot of frame registers though, only ppc has more.

> 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)

Looks OK. Could you add a reference to the ARC ELF spec that describes
these?

> 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;
> +}

OK.

> diff --git a/libebl/ChangeLog b/libebl/ChangeLog
> index 5f9ea552..3fb5801f 100644
> --- a/libebl/ChangeLog
> +++ b/libebl/ChangeLog
> @@ -1,3 +1,8 @@
> +2022-12-20  Shahab Vahedi  <shahab@synopsys.com>
> +
> +	* eblopenbackend.c (arc_init): New function declaration.
> +	(machines): Add entry for arc.
> +
>  2022-12-02  Hengqi Chen  <hengqi.chen@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]))

Good. Note that this only matches for ARCV2, but I assume that is
intended.

> diff --git a/tests/ChangeLog b/tests/ChangeLog
> index b656029f..b5136869 100644
> --- a/tests/ChangeLog
> +++ b/tests/ChangeLog
> @@ -1,3 +1,9 @@
> +2022-12-20  Shahab Vahedi  <shahab@synopsys.com>
> +
> +	* 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  <amerey@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..56ccb3c494e84450c7aeac5f57f
> 94aef8336f8e0
> GIT binary patch
> literal 15004
> [...]
> 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

Very nice, that makes it possible to test some of this on non-ARC
setups. (Seems to run fine here)

Let me know if you want this to go in as is or if you want to sent a v4
with the tweaks suggested above.

Cheers.

Mark
> 

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH v4] Add support for Synopsys ARCv2 processors
  2022-12-20 11:56 [PATCH v3] Add support for Synopsys ARCv2 processors Shahab Vahedi
  2022-12-20 17:33 ` Mark Wielaard
@ 2022-12-21 11:27 ` Shahab Vahedi
  2022-12-21 23:30   ` Mark Wielaard
  1 sibling, 1 reply; 4+ messages in thread
From: Shahab Vahedi @ 2022-12-21 11:27 UTC (permalink / raw)
  To: elfutils-devel
  Cc: Mark Wielaard, Shahab Vahedi, Claudiu Zissulescu, Francois Bedard

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.chen@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.chen@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.chen@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  <amerey@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
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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


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v4] Add support for Synopsys ARCv2 processors
  2022-12-21 11:27 ` [PATCH v4] " Shahab Vahedi
@ 2022-12-21 23:30   ` Mark Wielaard
  0 siblings, 0 replies; 4+ messages in thread
From: Mark Wielaard @ 2022-12-21 23:30 UTC (permalink / raw)
  To: Shahab Vahedi; +Cc: elfutils-devel, Claudiu Zissulescu, Francois Bedard

Hi Shahab,

On Wed, Dec 21, 2022 at 12:27:05PM +0100, Shahab Vahedi via Elfutils-devel wrote:
> 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.

Very nice. Pushed.

Thanks,

Mark

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2022-12-21 23:30 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-12-20 11:56 [PATCH v3] Add support for Synopsys ARCv2 processors Shahab Vahedi
2022-12-20 17:33 ` Mark Wielaard
2022-12-21 11:27 ` [PATCH v4] " Shahab Vahedi
2022-12-21 23:30   ` Mark Wielaard

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).