@@ -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)
new file mode 100644
@@ -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;
+}
+
new file mode 100644
@@ -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)
new file mode 100644
@@ -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;
+ }
+}
@@ -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]))
@@ -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 */
@@ -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]))
@@ -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 \
new file mode 100644
GIT binary patch
literal 11184
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
Lj({e)<=Ou~-H|>u
literal 0
HcmV?d00001
@@ -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