public inbox for elfutils@sourceware.org
 help / color / mirror / Atom feed
* [PATCH v2 0/2] Add initial support for Hexagon
@ 2024-04-02 19:55 Matheus Tavares Bernardino
  2024-04-02 19:55 ` [PATCH v2 1/2] Add " Matheus Tavares Bernardino
  2024-04-02 19:55 ` [PATCH v2 2/2] Hexagon: implement machine flag check Matheus Tavares Bernardino
  0 siblings, 2 replies; 8+ messages in thread
From: Matheus Tavares Bernardino @ 2024-04-02 19:55 UTC (permalink / raw)
  To: elfutils-devel; +Cc: bcain, sidneym, mark, quic_apinski, quic_mathbern

v1: https://sourceware.org/pipermail/elfutils-devel/2024q1/006938.html

Changes in v2:

- Moved Hexagon constants to libelf/elf-knowledge.h
- Added link to Hexagon ABI spec at commit message
  (i.e. https://lists.llvm.org/pipermail/llvm-dev/attachments/20190916/21516a52/attachment-0001.pdf)
- Added hello_hexagon.ko test

Matheus Tavares Bernardino (2):
  Add support for Hexagon
  Hexagon: implement machine flag check

 backends/Makefile.am        |   7 +-
 backends/hexagon_init.c     |  52 ++++++++++++++
 backends/hexagon_reloc.def  | 130 +++++++++++++++++++++++++++++++++++
 backends/hexagon_symbol.c   |  66 ++++++++++++++++++
 libebl/eblopenbackend.c     |   2 +
 libelf/elf-knowledge.h      | 131 ++++++++++++++++++++++++++++++++++++
 src/elflint.c               |   2 +-
 tests/Makefile.am           |   2 +-
 tests/hello_hexagon.ko.bz2  | Bin 0 -> 11184 bytes
 tests/run-strip-reloc-ko.sh |   3 +-
 10 files changed, 390 insertions(+), 5 deletions(-)
 create mode 100644 backends/hexagon_init.c
 create mode 100644 backends/hexagon_reloc.def
 create mode 100644 backends/hexagon_symbol.c
 create mode 100644 tests/hello_hexagon.ko.bz2

-- 
2.37.2


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

* [PATCH v2 1/2] Add support for Hexagon
  2024-04-02 19:55 [PATCH v2 0/2] Add initial support for Hexagon Matheus Tavares Bernardino
@ 2024-04-02 19:55 ` Matheus Tavares Bernardino
  2024-04-04 16:51   ` Mark Wielaard
  2024-04-02 19:55 ` [PATCH v2 2/2] Hexagon: implement machine flag check Matheus Tavares Bernardino
  1 sibling, 1 reply; 8+ messages in thread
From: Matheus Tavares Bernardino @ 2024-04-02 19:55 UTC (permalink / raw)
  To: elfutils-devel; +Cc: bcain, sidneym, mark, quic_apinski, quic_mathbern

This implements initial support for the Hexagon architecture. The
Hexagon ABI spec can be seen at
https://lists.llvm.org/pipermail/llvm-dev/attachments/20190916/21516a52/attachment-0001.pdf

A hello_hexagon.ko test is also added.

$ head tests/test-suite.log
  [...]
  # TOTAL: 275
  # PASS:  269
  # SKIP:  6
  # XFAIL: 0
  # FAIL:  0
  # XPASS: 0
  # ERROR: 0

$ cat tests/run-strip-reloc-ko.sh.log
  [...]
  runtest hello_hexagon.ko
  PASS run-strip-reloc-ko.sh (exit status: 0)

Signed-off-by: Matheus Tavares Bernardino <quic_mathbern@quicinc.com>
---
 backends/Makefile.am        |   7 +-
 backends/hexagon_init.c     |  51 ++++++++++++++
 backends/hexagon_reloc.def  | 130 +++++++++++++++++++++++++++++++++++
 backends/hexagon_symbol.c   |  58 ++++++++++++++++
 libebl/eblopenbackend.c     |   2 +
 libelf/elf-knowledge.h      | 131 ++++++++++++++++++++++++++++++++++++
 src/elflint.c               |   2 +-
 tests/Makefile.am           |   2 +-
 tests/hello_hexagon.ko.bz2  | Bin 0 -> 11184 bytes
 tests/run-strip-reloc-ko.sh |   3 +-
 10 files changed, 381 insertions(+), 5 deletions(-)
 create mode 100644 backends/hexagon_init.c
 create mode 100644 backends/hexagon_reloc.def
 create mode 100644 backends/hexagon_symbol.c
 create mode 100644 tests/hello_hexagon.ko.bz2

diff --git a/backends/Makefile.am b/backends/Makefile.am
index b946fd30..e22b522c 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 arc mips
+	  m68k bpf riscv csky loongarch arc mips hexagon
 
 i386_SRCS = i386_init.c i386_symbol.c i386_corenote.c i386_cfi.c \
 	    i386_retval.c i386_regs.c i386_auxv.c \
@@ -104,12 +104,15 @@ arc_SRCS = arc_init.c arc_symbol.c
 
 mips_SRCS = mips_init.c mips_symbol.c
 
+hexagon_SRCS = hexagon_init.c hexagon_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) $(arc_SRCS) $(mips_SRCS)
+			    $(loongarch_SRCS) $(arc_SRCS) $(mips_SRCS) \
+			    $(hexagon_SRCS)
 
 libebl_backends_pic_a_SOURCES =
 am_libebl_backends_pic_a_OBJECTS = $(libebl_backends_a_SOURCES:.c=.os)
diff --git a/backends/hexagon_init.c b/backends/hexagon_init.c
new file mode 100644
index 00000000..9c8c6d8d
--- /dev/null
+++ b/backends/hexagon_init.c
@@ -0,0 +1,51 @@
+/* Initialization of Hexagon specific backend library.
+   Copyright (C) 2024 Qualcomm Innovation Center, Inc. All Rights Reserved.
+   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         hexagon_
+#define RELOC_PREFIX    R_HEX_
+#include "libebl_CPU.h"
+
+/* This defines the common reloc hooks based on hexagon_reloc.def.  */
+#include "common-reloc.c"
+
+
+Ebl *
+hexagon_init (Elf *elf __attribute__ ((unused)),
+                GElf_Half machine __attribute__ ((unused)),
+                Ebl *eh)
+{
+  hexagon_init_reloc (eh);
+  HOOK (eh, reloc_simple_type);
+
+  return eh;
+}
+
diff --git a/backends/hexagon_reloc.def b/backends/hexagon_reloc.def
new file mode 100644
index 00000000..cd55d374
--- /dev/null
+++ b/backends/hexagon_reloc.def
@@ -0,0 +1,130 @@
+/* List the relocation types for Hexagon.  -*- C -*-
+   Copyright (C) 2024 Qualcomm Innovation Center, Inc. All Rights Reserved.
+   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,                     0)
+RELOC_TYPE (B22_PCREL,                REL)
+RELOC_TYPE (B15_PCREL,                REL)
+RELOC_TYPE (B7_PCREL,                 REL)
+RELOC_TYPE (LO16,                     REL)
+RELOC_TYPE (HI16,                     REL)
+RELOC_TYPE (32,                       REL)
+RELOC_TYPE (16,                       REL)
+RELOC_TYPE (8,                        REL)
+RELOC_TYPE (GPREL16_0,                REL)
+RELOC_TYPE (GPREL16_1,                REL)
+RELOC_TYPE (GPREL16_2,                REL)
+RELOC_TYPE (GPREL16_3,                REL)
+RELOC_TYPE (HL16,                     REL)
+RELOC_TYPE (B13_PCREL,                REL)
+RELOC_TYPE (B9_PCREL,                 REL)
+RELOC_TYPE (B32_PCREL_X,              REL)
+RELOC_TYPE (32_6_X,                   REL)
+RELOC_TYPE (B22_PCREL_X,              REL)
+RELOC_TYPE (B15_PCREL_X,              REL)
+RELOC_TYPE (B13_PCREL_X,              REL)
+RELOC_TYPE (B9_PCREL_X,               REL)
+RELOC_TYPE (B7_PCREL_X,               REL)
+RELOC_TYPE (16_X,                     REL)
+RELOC_TYPE (12_X,                     REL)
+RELOC_TYPE (11_X,                     REL)
+RELOC_TYPE (10_X,                     REL)
+RELOC_TYPE (9_X,                      REL)
+RELOC_TYPE (8_X,                      REL)
+RELOC_TYPE (7_X,                      REL)
+RELOC_TYPE (6_X,                      REL)
+RELOC_TYPE (32_PCREL,                 REL)
+RELOC_TYPE (COPY,                     REL)
+RELOC_TYPE (GLOB_DAT,                 REL)
+RELOC_TYPE (JMP_SLOT,                 REL)
+RELOC_TYPE (RELATIVE,                 REL)
+RELOC_TYPE (PLT_B22_PCREL,            REL)
+RELOC_TYPE (GOTREL_LO16,              REL)
+RELOC_TYPE (GOTREL_HI16,              REL)
+RELOC_TYPE (GOTREL_32,                REL)
+RELOC_TYPE (GOT_LO16,                 REL)
+RELOC_TYPE (GOT_HI16,                 REL)
+RELOC_TYPE (GOT_32,                   REL)
+RELOC_TYPE (GOT_16,                   REL)
+RELOC_TYPE (DTPMOD_32,                REL)
+RELOC_TYPE (DTPREL_LO16,              REL)
+RELOC_TYPE (DTPREL_HI16,              REL)
+RELOC_TYPE (DTPREL_32,                REL)
+RELOC_TYPE (DTPREL_16,                REL)
+RELOC_TYPE (GD_PLT_B22_PCREL,         REL)
+RELOC_TYPE (GD_GOT_LO16,              REL)
+RELOC_TYPE (GD_GOT_HI16,              REL)
+RELOC_TYPE (GD_GOT_32,                REL)
+RELOC_TYPE (GD_GOT_16,                REL)
+RELOC_TYPE (IE_LO16,                  REL)
+RELOC_TYPE (IE_HI16,                  REL)
+RELOC_TYPE (IE_32,                    REL)
+RELOC_TYPE (IE_GOT_LO16,              REL)
+RELOC_TYPE (IE_GOT_HI16,              REL)
+RELOC_TYPE (IE_GOT_32,                REL)
+RELOC_TYPE (IE_GOT_16,                REL)
+RELOC_TYPE (TPREL_LO16,               REL)
+RELOC_TYPE (TPREL_HI16,               REL)
+RELOC_TYPE (TPREL_32,                 REL)
+RELOC_TYPE (TPREL_16,                 REL)
+RELOC_TYPE (6_PCREL_X,                REL)
+RELOC_TYPE (GOTREL_32_6_X,            REL)
+RELOC_TYPE (GOTREL_16_X,              REL)
+RELOC_TYPE (GOTREL_11_X,              REL)
+RELOC_TYPE (GOT_32_6_X,               REL)
+RELOC_TYPE (GOT_16_X,                 REL)
+RELOC_TYPE (GOT_11_X,                 REL)
+RELOC_TYPE (DTPREL_32_6_X,            REL)
+RELOC_TYPE (DTPREL_16_X,              REL)
+RELOC_TYPE (DTPREL_11_X,              REL)
+RELOC_TYPE (GD_GOT_32_6_X,            REL)
+RELOC_TYPE (GD_GOT_16_X,              REL)
+RELOC_TYPE (GD_GOT_11_X,              REL)
+RELOC_TYPE (IE_32_6_X,                REL)
+RELOC_TYPE (IE_16_X,                  REL)
+RELOC_TYPE (IE_GOT_32_6_X,            REL)
+RELOC_TYPE (IE_GOT_16_X,              REL)
+RELOC_TYPE (IE_GOT_11_X,              REL)
+RELOC_TYPE (TPREL_32_6_X,             REL)
+RELOC_TYPE (TPREL_16_X,               REL)
+RELOC_TYPE (TPREL_11_X,               REL)
+RELOC_TYPE (LD_PLT_B22_PCREL,         REL)
+RELOC_TYPE (LD_GOT_LO16,              REL)
+RELOC_TYPE (LD_GOT_HI16,              REL)
+RELOC_TYPE (LD_GOT_32,                REL)
+RELOC_TYPE (LD_GOT_16,                REL)
+RELOC_TYPE (LD_GOT_32_6_X,            REL)
+RELOC_TYPE (LD_GOT_16_X,              REL)
+RELOC_TYPE (LD_GOT_11_X,              REL)
+RELOC_TYPE (23_REG,                   REL)
+RELOC_TYPE (GD_PLT_B22_PCREL_X,       REL)
+RELOC_TYPE (GD_PLT_B32_PCREL_X,       REL)
+RELOC_TYPE (LD_PLT_B22_PCREL_X,       REL)
+RELOC_TYPE (LD_PLT_B32_PCREL_X,       REL)
+RELOC_TYPE (27_REG,                   REL)
diff --git a/backends/hexagon_symbol.c b/backends/hexagon_symbol.c
new file mode 100644
index 00000000..b341243e
--- /dev/null
+++ b/backends/hexagon_symbol.c
@@ -0,0 +1,58 @@
+/* Hexagon specific symbolic name handling.
+   Copyright (C) 2024 Qualcomm Innovation Center, Inc. All Rights Reserved.
+   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 hexagon_
+#include "libebl_CPU.h"
+
+
+/* Check for the simple reloc types.  */
+Elf_Type
+hexagon_reloc_simple_type (Ebl *ebl __attribute__ ((unused)), int type,
+                             int *addsub __attribute__ ((unused)))
+{
+  switch (type)
+    {
+    case R_HEX_32:
+      return ELF_T_WORD;
+    case R_HEX_16:
+      return ELF_T_HALF;
+    case R_HEX_8:
+      return ELF_T_BYTE;
+    default:
+      return ELF_T_NUM;
+    }
+}
diff --git a/libebl/eblopenbackend.c b/libebl/eblopenbackend.c
index a5f7467a..b68dea7a 100644
--- a/libebl/eblopenbackend.c
+++ b/libebl/eblopenbackend.c
@@ -58,6 +58,7 @@ Ebl *csky_init (Elf *, GElf_Half, Ebl *);
 Ebl *loongarch_init (Elf *, GElf_Half, Ebl *);
 Ebl *arc_init (Elf *, GElf_Half, Ebl *);
 Ebl *mips_init (Elf *, GElf_Half, Ebl *);
+Ebl *hexagon_init (Elf *, GElf_Half, Ebl *);
 
 /* This table should contain the complete list of architectures as far
    as the ELF specification is concerned.  */
@@ -156,6 +157,7 @@ static const struct
   { loongarch_init, "elf_loongarch", "loongarch", 9, EM_LOONGARCH, ELFCLASS64, ELFDATA2LSB },
   { arc_init, "elf_arc", "arc", 3, EM_ARCV2, ELFCLASS32, ELFDATA2LSB },
   { mips_init, "elf_mips", "mips", 4, EM_MIPS, 0, 0 },
+  { hexagon_init, "elf_hexagon", "hexagon", 9, EM_QDSP6, ELFCLASS32, ELFDATA2LSB },
 };
 #define nmachines (sizeof (machines) / sizeof (machines[0]))
 
diff --git a/libelf/elf-knowledge.h b/libelf/elf-knowledge.h
index 6e005fa5..71535934 100644
--- a/libelf/elf-knowledge.h
+++ b/libelf/elf-knowledge.h
@@ -98,4 +98,135 @@
 #define GNU_BUILD_ATTRIBUTE_PIC		7
 #define GNU_BUILD_ATTRIBUTE_SHORT_ENUM	8
 
+/* Hexagon specific declarations.  */
+
+/* Processor specific flags for the Ehdr e_flags field.  */
+#define EF_HEXAGON_MACH_V2   0x00000001 /* Hexagon V2 */
+#define EF_HEXAGON_MACH_V3   0x00000002 /* Hexagon V3 */
+#define EF_HEXAGON_MACH_V4   0x00000003 /* Hexagon V4 */
+#define EF_HEXAGON_MACH_V5   0x00000004 /* Hexagon V5 */
+#define EF_HEXAGON_MACH_V55  0x00000005 /* Hexagon V55 */
+#define EF_HEXAGON_MACH_V60  0x00000060 /* Hexagon V60 */
+#define EF_HEXAGON_MACH_V61  0x00000061 /* Hexagon V61 */
+#define EF_HEXAGON_MACH_V62  0x00000062 /* Hexagon V62 */
+#define EF_HEXAGON_MACH_V65  0x00000065 /* Hexagon V65 */
+#define EF_HEXAGON_MACH_V66  0x00000066 /* Hexagon V66 */
+#define EF_HEXAGON_MACH_V67  0x00000067 /* Hexagon V67 */
+#define EF_HEXAGON_MACH_V67T 0x00008067 /* Hexagon V67T */
+#define EF_HEXAGON_MACH_V68  0x00000068 /* Hexagon V68 */
+#define EF_HEXAGON_MACH_V69  0x00000069 /* Hexagon V68 */
+#define EF_HEXAGON_MACH_V71  0x00000071 /* Hexagon V71 */
+#define EF_HEXAGON_MACH_V71T 0x00008071 /* Hexagon V71T */
+#define EF_HEXAGON_MACH_V73  0x00000073 /* Hexagon V73 */
+#define EF_HEXAGON_MACH      0x000003ff /* Hexagon V.. */
+
+/* Special section indices.  */
+#define SHN_HEXAGON_SCOMMON    0xff00 /* Other access sizes */
+#define SHN_HEXAGON_SCOMMON_1  0xff01 /* Byte-sized access */
+#define SHN_HEXAGON_SCOMMON_2  0xff02 /* Half-word-sized access */
+#define SHN_HEXAGON_SCOMMON_4  0xff03 /* Word-sized access */
+#define SHN_HEXAGON_SCOMMON_8  0xff04 /* Double-word-size access */
+
+/* Hexagon specific relocs.  */
+#define R_HEX_NONE                0
+#define R_HEX_B22_PCREL           1
+#define R_HEX_B15_PCREL           2
+#define R_HEX_B7_PCREL            3
+#define R_HEX_LO16                4
+#define R_HEX_HI16                5
+#define R_HEX_32                  6
+#define R_HEX_16                  7
+#define R_HEX_8                   8
+#define R_HEX_GPREL16_0           9
+#define R_HEX_GPREL16_1           10
+#define R_HEX_GPREL16_2           11
+#define R_HEX_GPREL16_3           12
+#define R_HEX_HL16                13
+#define R_HEX_B13_PCREL           14
+#define R_HEX_B9_PCREL            15
+#define R_HEX_B32_PCREL_X         16
+#define R_HEX_32_6_X              17
+#define R_HEX_B22_PCREL_X         18
+#define R_HEX_B15_PCREL_X         19
+#define R_HEX_B13_PCREL_X         20
+#define R_HEX_B9_PCREL_X          21
+#define R_HEX_B7_PCREL_X          22
+#define R_HEX_16_X                23
+#define R_HEX_12_X                24
+#define R_HEX_11_X                25
+#define R_HEX_10_X                26
+#define R_HEX_9_X                 27
+#define R_HEX_8_X                 28
+#define R_HEX_7_X                 29
+#define R_HEX_6_X                 30
+#define R_HEX_32_PCREL            31
+#define R_HEX_COPY                32
+#define R_HEX_GLOB_DAT            33
+#define R_HEX_JMP_SLOT            34
+#define R_HEX_RELATIVE            35
+#define R_HEX_PLT_B22_PCREL       36
+#define R_HEX_GOTREL_LO16         37
+#define R_HEX_GOTREL_HI16         38
+#define R_HEX_GOTREL_32           39
+#define R_HEX_GOT_LO16            40
+#define R_HEX_GOT_HI16            41
+#define R_HEX_GOT_32              42
+#define R_HEX_GOT_16              43
+#define R_HEX_DTPMOD_32           44
+#define R_HEX_DTPREL_LO16         45
+#define R_HEX_DTPREL_HI16         46
+#define R_HEX_DTPREL_32           47
+#define R_HEX_DTPREL_16           48
+#define R_HEX_GD_PLT_B22_PCREL    49
+#define R_HEX_GD_GOT_LO16         50
+#define R_HEX_GD_GOT_HI16         51
+#define R_HEX_GD_GOT_32           52
+#define R_HEX_GD_GOT_16           53
+#define R_HEX_IE_LO16             54
+#define R_HEX_IE_HI16             55
+#define R_HEX_IE_32               56
+#define R_HEX_IE_GOT_LO16         57
+#define R_HEX_IE_GOT_HI16         58
+#define R_HEX_IE_GOT_32           59
+#define R_HEX_IE_GOT_16           60
+#define R_HEX_TPREL_LO16          61
+#define R_HEX_TPREL_HI16          62
+#define R_HEX_TPREL_32            63
+#define R_HEX_TPREL_16            64
+#define R_HEX_6_PCREL_X           65
+#define R_HEX_GOTREL_32_6_X       66
+#define R_HEX_GOTREL_16_X         67
+#define R_HEX_GOTREL_11_X         68
+#define R_HEX_GOT_32_6_X          69
+#define R_HEX_GOT_16_X            70
+#define R_HEX_GOT_11_X            71
+#define R_HEX_DTPREL_32_6_X       72
+#define R_HEX_DTPREL_16_X         73
+#define R_HEX_DTPREL_11_X         74
+#define R_HEX_GD_GOT_32_6_X       75
+#define R_HEX_GD_GOT_16_X         76
+#define R_HEX_GD_GOT_11_X         77
+#define R_HEX_IE_32_6_X           78
+#define R_HEX_IE_16_X             79
+#define R_HEX_IE_GOT_32_6_X       80
+#define R_HEX_IE_GOT_16_X         81
+#define R_HEX_IE_GOT_11_X         82
+#define R_HEX_TPREL_32_6_X        83
+#define R_HEX_TPREL_16_X          84
+#define R_HEX_TPREL_11_X          85
+#define R_HEX_LD_PLT_B22_PCREL    86
+#define R_HEX_LD_GOT_LO16         87
+#define R_HEX_LD_GOT_HI16         88
+#define R_HEX_LD_GOT_32           89
+#define R_HEX_LD_GOT_16           90
+#define R_HEX_LD_GOT_32_6_X       91
+#define R_HEX_LD_GOT_16_X         92
+#define R_HEX_LD_GOT_11_X         93
+#define R_HEX_23_REG              94
+#define R_HEX_GD_PLT_B22_PCREL_X  95
+#define R_HEX_GD_PLT_B32_PCREL_X  96
+#define R_HEX_LD_PLT_B22_PCREL_X  97
+#define R_HEX_LD_PLT_B32_PCREL_X  98
+#define R_HEX_27_REG              99
+
 #endif	/* elf-knowledge.h */
diff --git a/src/elflint.c b/src/elflint.c
index 864de710..e56e1465 100644
--- a/src/elflint.c
+++ b/src/elflint.c
@@ -331,7 +331,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
+    EM_ARCV2, EM_QDSP6
   };
 #define nvalid_e_machine \
   (sizeof (valid_e_machine) / sizeof (valid_e_machine[0]))
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 40e0eaa5..b7fb7238 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -320,7 +320,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.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 \
+	     hello_arc_hs4.ko.bz2 hello_hexagon.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_hexagon.ko.bz2 b/tests/hello_hexagon.ko.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..e60d2c1bda6e11cc6483f8db5537c36b583a4b5b
GIT binary patch
literal 11184
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
Lj({e)<=Ou~-H|>u

literal 0
HcmV?d00001

diff --git a/tests/run-strip-reloc-ko.sh b/tests/run-strip-reloc-ko.sh
index 55fa74db..7bc685e6 100755
--- a/tests/run-strip-reloc-ko.sh
+++ b/tests/run-strip-reloc-ko.sh
@@ -4,7 +4,7 @@
 
 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_arc_hs4.ko
+	hello_arc_hs4.ko hello_hexagon.ko
 
 # Most simple hello world kernel module for various architectures.
 # Make sure that it contains debuginfo with CONFIG_DEBUG_INFO=y.
@@ -47,5 +47,6 @@ runtest hello_m68k.ko 1
 runtest hello_riscv64.ko 1
 runtest hello_csky.ko 1
 runtest hello_arc_hs4.ko 1
+runtest hello_hexagon.ko 1
 
 exit $runtest_status
-- 
2.37.2


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

* [PATCH v2 2/2] Hexagon: implement machine flag check
  2024-04-02 19:55 [PATCH v2 0/2] Add initial support for Hexagon Matheus Tavares Bernardino
  2024-04-02 19:55 ` [PATCH v2 1/2] Add " Matheus Tavares Bernardino
@ 2024-04-02 19:55 ` Matheus Tavares Bernardino
  2024-04-02 21:38   ` Brian Cain
  1 sibling, 1 reply; 8+ messages in thread
From: Matheus Tavares Bernardino @ 2024-04-02 19:55 UTC (permalink / raw)
  To: elfutils-devel; +Cc: bcain, sidneym, mark, quic_apinski, quic_mathbern

This fixes the "invalid machine flag" error from eu-elflint when passing
hexagon binaries.

Signed-off-by: Matheus Tavares Bernardino <quic_mathbern@quicinc.com>
---
 backends/hexagon_init.c   | 1 +
 backends/hexagon_symbol.c | 8 ++++++++
 2 files changed, 9 insertions(+)

diff --git a/backends/hexagon_init.c b/backends/hexagon_init.c
index 9c8c6d8d..1cd27513 100644
--- a/backends/hexagon_init.c
+++ b/backends/hexagon_init.c
@@ -45,6 +45,7 @@ hexagon_init (Elf *elf __attribute__ ((unused)),
 {
   hexagon_init_reloc (eh);
   HOOK (eh, reloc_simple_type);
+  HOOK (eh, machine_flag_check);
 
   return eh;
 }
diff --git a/backends/hexagon_symbol.c b/backends/hexagon_symbol.c
index b341243e..1e681e9f 100644
--- a/backends/hexagon_symbol.c
+++ b/backends/hexagon_symbol.c
@@ -56,3 +56,11 @@ hexagon_reloc_simple_type (Ebl *ebl __attribute__ ((unused)), int type,
       return ELF_T_NUM;
     }
 }
+
+bool
+hexagon_machine_flag_check (GElf_Word flags)
+{
+  GElf_Word arch_variant = flags &~ EF_HEXAGON_MACH;
+  /* 0x8000 covers the "tiny core" arch variants. */
+  return arch_variant == 0 || arch_variant == 0x8000;
+}
-- 
2.37.2


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

* RE: [PATCH v2 2/2] Hexagon: implement machine flag check
  2024-04-02 19:55 ` [PATCH v2 2/2] Hexagon: implement machine flag check Matheus Tavares Bernardino
@ 2024-04-02 21:38   ` Brian Cain
  2024-04-04 16:29     ` Mark Wielaard
  0 siblings, 1 reply; 8+ messages in thread
From: Brian Cain @ 2024-04-02 21:38 UTC (permalink / raw)
  To: Matheus Bernardino (QUIC), elfutils-devel
  Cc: Sid Manning, mark, Andrew Pinski (QUIC)



> -----Original Message-----
> From: Matheus Bernardino (QUIC) <quic_mathbern@quicinc.com>
> Sent: Tuesday, April 2, 2024 2:56 PM
> To: elfutils-devel@sourceware.org
> Cc: Brian Cain <bcain@quicinc.com>; Sid Manning <sidneym@quicinc.com>;
> mark@klomp.org; Andrew Pinski (QUIC) <quic_apinski@quicinc.com>;
> Matheus Bernardino (QUIC) <quic_mathbern@quicinc.com>
> Subject: [PATCH v2 2/2] Hexagon: implement machine flag check
> 
> This fixes the "invalid machine flag" error from eu-elflint when passing
> hexagon binaries.
> 
> Signed-off-by: Matheus Tavares Bernardino <quic_mathbern@quicinc.com>
> ---
>  backends/hexagon_init.c   | 1 +
>  backends/hexagon_symbol.c | 8 ++++++++
>  2 files changed, 9 insertions(+)
> 
> diff --git a/backends/hexagon_init.c b/backends/hexagon_init.c
> index 9c8c6d8d..1cd27513 100644
> --- a/backends/hexagon_init.c
> +++ b/backends/hexagon_init.c
> @@ -45,6 +45,7 @@ hexagon_init (Elf *elf __attribute__ ((unused)),
>  {
>    hexagon_init_reloc (eh);
>    HOOK (eh, reloc_simple_type);
> +  HOOK (eh, machine_flag_check);
> 
>    return eh;
>  }
> diff --git a/backends/hexagon_symbol.c b/backends/hexagon_symbol.c
> index b341243e..1e681e9f 100644
> --- a/backends/hexagon_symbol.c
> +++ b/backends/hexagon_symbol.c
> @@ -56,3 +56,11 @@ hexagon_reloc_simple_type (Ebl *ebl __attribute__
> ((unused)), int type,
>        return ELF_T_NUM;
>      }
>  }
> +
> +bool
> +hexagon_machine_flag_check (GElf_Word flags)
> +{
> +  GElf_Word arch_variant = flags &~ EF_HEXAGON_MACH;
> +  /* 0x8000 covers the "tiny core" arch variants. */
> +  return arch_variant == 0 || arch_variant == 0x8000;
> +}
> --
> 2.37.2

What about this instead?

bool hexagon_machine_flag_check(GElf_Word flags) {
	GElf_Word reserved_flags = ~(EF_HEXAGON_TINY | EF_HEXAGON_MACH);

	return (flags & reserved_flags) == 0;
}

... implies a new EF_HEXAGON_TINY 0x8000 definition BTW.

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

* Re: [PATCH v2 2/2] Hexagon: implement machine flag check
  2024-04-02 21:38   ` Brian Cain
@ 2024-04-04 16:29     ` Mark Wielaard
  2024-04-04 16:31       ` Brian Cain
  0 siblings, 1 reply; 8+ messages in thread
From: Mark Wielaard @ 2024-04-04 16:29 UTC (permalink / raw)
  To: Brian Cain, Matheus Bernardino (QUIC), elfutils-devel
  Cc: Sid Manning, Andrew Pinski (QUIC)

Hi,

On Tue, 2024-04-02 at 21:38 +0000, Brian Cain wrote:
> > diff --git a/backends/hexagon_symbol.c b/backends/hexagon_symbol.c
> > index b341243e..1e681e9f 100644
> > --- a/backends/hexagon_symbol.c
> > +++ b/backends/hexagon_symbol.c
> > @@ -56,3 +56,11 @@ hexagon_reloc_simple_type (Ebl *ebl __attribute__
> > ((unused)), int type,
> >        return ELF_T_NUM;
> >      }
> >  }
> > +
> > +bool
> > +hexagon_machine_flag_check (GElf_Word flags)
> > +{
> > +  GElf_Word arch_variant = flags &~ EF_HEXAGON_MACH;
> > +  /* 0x8000 covers the "tiny core" arch variants. */
> > +  return arch_variant == 0 || arch_variant == 0x8000;
> > +}
> > --
> > 2.37.2
> 
> What about this instead?
> 
> bool hexagon_machine_flag_check(GElf_Word flags) {
> 	GElf_Word reserved_flags = ~(EF_HEXAGON_TINY | EF_HEXAGON_MACH);
> 
> 	return (flags & reserved_flags) == 0;
> }
> 
> ... implies a new EF_HEXAGON_TINY 0x8000 definition BTW.

You obviously know this architecture better than me. But is the TINY
flag (bit 15) appropriate for all machines? It looks like it can only
be set on V67 and V71. If so maybe just check those two explicitly?

Cheers,

Mark

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

* RE: [PATCH v2 2/2] Hexagon: implement machine flag check
  2024-04-04 16:29     ` Mark Wielaard
@ 2024-04-04 16:31       ` Brian Cain
  2024-04-04 16:54         ` Mark Wielaard
  0 siblings, 1 reply; 8+ messages in thread
From: Brian Cain @ 2024-04-04 16:31 UTC (permalink / raw)
  To: Mark Wielaard, Matheus Bernardino (QUIC), elfutils-devel
  Cc: Sid Manning, Andrew Pinski (QUIC)



> -----Original Message-----
> From: Mark Wielaard <mark@klomp.org>
> Sent: Thursday, April 4, 2024 11:29 AM
> To: Brian Cain <bcain@quicinc.com>; Matheus Bernardino (QUIC)
> <quic_mathbern@quicinc.com>; elfutils-devel@sourceware.org
> Cc: Sid Manning <sidneym@quicinc.com>; Andrew Pinski (QUIC)
> <quic_apinski@quicinc.com>
> Subject: Re: [PATCH v2 2/2] Hexagon: implement machine flag check
> 
> WARNING: This email originated from outside of Qualcomm. Please be wary
> of any links or attachments, and do not enable macros.
> 
> Hi,
> 
> On Tue, 2024-04-02 at 21:38 +0000, Brian Cain wrote:
> > > diff --git a/backends/hexagon_symbol.c b/backends/hexagon_symbol.c
> > > index b341243e..1e681e9f 100644
> > > --- a/backends/hexagon_symbol.c
> > > +++ b/backends/hexagon_symbol.c
> > > @@ -56,3 +56,11 @@ hexagon_reloc_simple_type (Ebl *ebl __attribute__
> > > ((unused)), int type,
> > >        return ELF_T_NUM;
> > >      }
> > >  }
> > > +
> > > +bool
> > > +hexagon_machine_flag_check (GElf_Word flags)
> > > +{
> > > +  GElf_Word arch_variant = flags &~ EF_HEXAGON_MACH;
> > > +  /* 0x8000 covers the "tiny core" arch variants. */
> > > +  return arch_variant == 0 || arch_variant == 0x8000;
> > > +}
> > > --
> > > 2.37.2
> >
> > What about this instead?
> >
> > bool hexagon_machine_flag_check(GElf_Word flags) {
> >       GElf_Word reserved_flags = ~(EF_HEXAGON_TINY |
> EF_HEXAGON_MACH);
> >
> >       return (flags & reserved_flags) == 0;
> > }
> >
> > ... implies a new EF_HEXAGON_TINY 0x8000 definition BTW.
> 
> You obviously know this architecture better than me. But is the TINY
> flag (bit 15) appropriate for all machines? It looks like it can only
> be set on V67 and V71. If so maybe just check those two explicitly?

So far, V67T and V71T are the only ones with this variation.  It could also be specified on yet-to-be-created future devices (some theoretical V99T might exist).  What should the behavior be in those cases?

-Brian

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

* Re: [PATCH v2 1/2] Add support for Hexagon
  2024-04-02 19:55 ` [PATCH v2 1/2] Add " Matheus Tavares Bernardino
@ 2024-04-04 16:51   ` Mark Wielaard
  0 siblings, 0 replies; 8+ messages in thread
From: Mark Wielaard @ 2024-04-04 16:51 UTC (permalink / raw)
  To: Matheus Tavares Bernardino, elfutils-devel; +Cc: bcain, sidneym, quic_apinski

Hi Matheus,

On Tue, 2024-04-02 at 16:55 -0300, Matheus Tavares Bernardino wrote:
> This implements initial support for the Hexagon architecture. The
> Hexagon ABI spec can be seen at
> https://lists.llvm.org/pipermail/llvm-dev/attachments/20190916/21516a52/attachment-0001.pdf
> 
> A hello_hexagon.ko test is also added.
> 
> $ head tests/test-suite.log
>   [...]
>   # TOTAL: 275
>   # PASS:  269
>   # SKIP:  6
>   # XFAIL: 0
>   # FAIL:  0
>   # XPASS: 0
>   # ERROR: 0
> 
> $ cat tests/run-strip-reloc-ko.sh.log
>   [...]
>   runtest hello_hexagon.ko
>   PASS run-strip-reloc-ko.sh (exit status: 0)

Very nice. Thanks for including the new testcase. Now we have at least
a little test coverage that can be run on any arch to check hexagon is
supported.

The only thing I did before pushing this was to add a ChangeLog entry
to the commit message:

    * backends/Makefile.am (modules): Add hexagon.
    (hexagon_SRCS): New var for hexagon_init.c and hexagon_symbol.c.
    (libebl_backends_a_SOURCES): Add hexagon_SRCS.
    * backends/hexagon_init.c: New file.
    * backends/hexagon_reloc.def: Likewise.
    * backends/hexagon_symbol.c: Likewise.
    * libebl/eblopenbackend.c (hexagon_init): Declare.
    (machines): Add hexagon.
    * libelf/elf-knowledge.h: Add hexagon e_flags values, section
    indices and and relocs.
    * src/elflint.c (valid_e_machine): Add EM_QDSP6.
    * tests/Makefile.am (EXTRA_DIST): Add hello_hexagon.ko.bz2.
    * tests/hello_hexagon.ko.bz2: New test file.
    * tests/run-strip-reloc-ko.sh: Add hello_hexagon.ko.

This is mainly for my own review, so I know all changes were actually
intended.

Pushed,

Mark

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

* Re: [PATCH v2 2/2] Hexagon: implement machine flag check
  2024-04-04 16:31       ` Brian Cain
@ 2024-04-04 16:54         ` Mark Wielaard
  0 siblings, 0 replies; 8+ messages in thread
From: Mark Wielaard @ 2024-04-04 16:54 UTC (permalink / raw)
  To: Brian Cain, Matheus Bernardino (QUIC), elfutils-devel
  Cc: Sid Manning, Andrew Pinski (QUIC)

Hi Brian,

On Thu, 2024-04-04 at 16:31 +0000, Brian Cain wrote:
> > > ... implies a new EF_HEXAGON_TINY 0x8000 definition BTW.
> > 
> > You obviously know this architecture better than me. But is the TINY
> > flag (bit 15) appropriate for all machines? It looks like it can only
> > be set on V67 and V71. If so maybe just check those two explicitly?
> 
> So far, V67T and V71T are the only ones with this variation.
> It could also be specified on yet-to-be-created future devices
> (some theoretical V99T might exist).
> What should the behavior be in those cases?

OK, if there could be other TINY variants then either the check
suggested by Matheus or you would be more correct. I do like the idea
to have a self documenting EF_HEXAGON_TINY constant for this.

Thanks,

Mark

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

end of thread, other threads:[~2024-04-04 16:54 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-04-02 19:55 [PATCH v2 0/2] Add initial support for Hexagon Matheus Tavares Bernardino
2024-04-02 19:55 ` [PATCH v2 1/2] Add " Matheus Tavares Bernardino
2024-04-04 16:51   ` Mark Wielaard
2024-04-02 19:55 ` [PATCH v2 2/2] Hexagon: implement machine flag check Matheus Tavares Bernardino
2024-04-02 21:38   ` Brian Cain
2024-04-04 16:29     ` Mark Wielaard
2024-04-04 16:31       ` Brian Cain
2024-04-04 16:54         ` 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).