[PATCH V4 1/1] Add backend support for C-SKY

Mao Han han_mao@c-sky.com
Tue Jul 16 11:16:00 GMT 2019


C-SKY V2 ABI manual:
https://github.com/c-sky/csky-doc/blob/master/C-SKY_V2_CPU_Applications_Binary_Interface_Standards_Manual.pdf
C-SKY architecture user guide:
https://github.com/c-sky/csky-doc/blob/master/CSKY%20Architecture%20user_guide.pdf

Signed-off-by: Mao Han <han_mao@c-sky.com>
---
 backends/ChangeLog       |  12 ++++++
 backends/Makefile.am     |   9 ++++-
 backends/csky_attrs.c    |  67 +++++++++++++++++++++++++++++++
 backends/csky_cfi.c      |  60 ++++++++++++++++++++++++++++
 backends/csky_corenote.c |  61 ++++++++++++++++++++++++++++
 backends/csky_init.c     |  65 ++++++++++++++++++++++++++++++
 backends/csky_initreg.c  |  87 ++++++++++++++++++++++++++++++++++++++++
 backends/csky_regs.c     | 101 +++++++++++++++++++++++++++++++++++++++++++++++
 backends/csky_reloc.def  |  86 ++++++++++++++++++++++++++++++++++++++++
 backends/csky_symbol.c   |  77 ++++++++++++++++++++++++++++++++++++
 libebl/ChangeLog         |   4 ++
 libebl/eblopenbackend.c  |   1 +
 src/ChangeLog            |   4 ++
 src/elflint.c            |   2 +-
 src/readelf.c            |   4 +-
 tests/ChangeLog          |   7 ++++
 tests/hello_csky.ko.bz2  | Bin 0 -> 26448 bytes
 tests/run-addrcfi.sh     |  43 ++++++++++++++++++++
 tests/run-strip-reloc.sh |   3 +-
 tests/testfilecsky.bz2   | Bin 0 -> 3145 bytes
 20 files changed, 688 insertions(+), 5 deletions(-)
 create mode 100644 backends/csky_attrs.c
 create mode 100644 backends/csky_cfi.c
 create mode 100644 backends/csky_corenote.c
 create mode 100644 backends/csky_init.c
 create mode 100644 backends/csky_initreg.c
 create mode 100644 backends/csky_regs.c
 create mode 100644 backends/csky_reloc.def
 create mode 100644 backends/csky_symbol.c
 create mode 100644 tests/hello_csky.ko.bz2
 create mode 100644 tests/testfilecsky.bz2

diff --git a/backends/ChangeLog b/backends/ChangeLog
index af1a40e..f1eaf14 100644
--- a/backends/ChangeLog
+++ b/backends/ChangeLog
@@ -1,3 +1,15 @@
+2019-07-13 Mao Han <han_mao@c-sky.com>
+
+	* Makefile.am: Add C-SKY.
+	* csky_attrs.c: New file.
+	* csky_cfi.c: New file.
+	* csky_corenote.c: Likewise.
+	* csky_init.c: Likewise.
+	* csky_initreg.c: Likewise.
+	* csky_regs.c: Likewise.
+	* csky_reloc.def: Likewise.
+	* csky_symbol.c: Likewise.
+
 2019-06-28  Mark Wielaard  <mark@klomp.org>
 
 	* aarch64_init.c (aarch64_init.c): Remove eh->name;
diff --git a/backends/Makefile.am b/backends/Makefile.am
index 2126a2e..175468f 100644
--- a/backends/Makefile.am
+++ b/backends/Makefile.am
@@ -33,12 +33,13 @@ AM_CPPFLAGS += -I$(top_srcdir)/libebl -I$(top_srcdir)/libasm \
 
 
 modules = i386 sh x86_64 ia64 alpha arm aarch64 sparc ppc ppc64 s390 \
-	  tilegx m68k bpf riscv
+	  tilegx m68k bpf riscv csky
 libebl_pic = libebl_i386_pic.a libebl_sh_pic.a libebl_x86_64_pic.a    \
 	     libebl_ia64_pic.a libebl_alpha_pic.a libebl_arm_pic.a    \
 	     libebl_aarch64_pic.a libebl_sparc_pic.a libebl_ppc_pic.a \
 	     libebl_ppc64_pic.a libebl_s390_pic.a libebl_tilegx_pic.a \
-	     libebl_m68k_pic.a libebl_bpf_pic.a libebl_riscv_pic.a
+	     libebl_m68k_pic.a libebl_bpf_pic.a libebl_riscv_pic.a    \
+	     libebl_csky_pic.a
 noinst_LIBRARIES = $(libebl_pic)
 noinst_DATA = $(libebl_pic:_pic.a=.so)
 
@@ -136,6 +137,10 @@ riscv_SRCS = riscv_init.c riscv_symbol.c riscv_cfi.c riscv_regs.c \
 libebl_riscv_pic_a_SOURCES = $(riscv_SRCS)
 am_libebl_riscv_pic_a_OBJECTS = $(riscv_SRCS:.c=.os)
 
+csky_SRCS = csky_attrs.c csky_init.c csky_symbol.c csky_cfi.c \
+	    csky_regs.c csky_initreg.c csky_corenote.c
+libebl_csky_pic_a_SOURCES = $(csky_SRCS)
+am_libebl_csky_pic_a_OBJECTS = $(csky_SRCS:.c=.os)
 
 libebl_%.so libebl_%.map: libebl_%_pic.a $(libelf) $(libdw) $(libeu)
 	@rm -f $(@:.so=.map)
diff --git a/backends/csky_attrs.c b/backends/csky_attrs.c
new file mode 100644
index 0000000..9b236f1
--- /dev/null
+++ b/backends/csky_attrs.c
@@ -0,0 +1,67 @@
+/* C-SKY ABI-specified defaults for DWARF CFI.
+   Copyright (C) 2019 Hangzhou C-SKY Microsystems co.,ltd.
+   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 <string.h>
+#include <dwarf.h>
+
+#define BACKEND csky_
+#include "libebl_CPU.h"
+
+bool
+csky_check_object_attribute (Ebl *ebl __attribute__ ((unused)),
+			    const char *vendor, int tag,
+			    uint64_t value __attribute__ ((unused)),
+			    const char **tag_name,
+			    const char **value_name __attribute__ ((unused)))
+{
+  if (!strcmp (vendor, "gnu"))
+    switch (tag)
+      {
+      case 4:
+	*tag_name = "CSKY_ARCH_NAME";
+	return true;
+
+      case 5:
+	*tag_name = "CSKY_CPU_NAME";
+	return true;
+
+      case 6:
+        *tag_name = "CSKY_ISA_FLAGS";
+        return true;
+
+      case 7:
+        *tag_name = "CSKY_ISA_EXT_FLAGS";
+        return true;
+      }
+
+  return false;
+}
diff --git a/backends/csky_cfi.c b/backends/csky_cfi.c
new file mode 100644
index 0000000..7277dbd
--- /dev/null
+++ b/backends/csky_cfi.c
@@ -0,0 +1,60 @@
+/* C-SKY ABI-specified defaults for DWARF CFI.
+   Copyright (C) 2019 Hangzhou C-SKY Microsystems co.,ltd.
+   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 <dwarf.h>
+
+#define BACKEND csky_
+#include "libebl_CPU.h"
+
+
+int
+csky_abi_cfi (Ebl *ebl __attribute__ ((unused)), Dwarf_CIE *abi_info)
+{
+  static const uint8_t abi_cfi[] =
+    {
+      DW_CFA_def_cfa, ULEB128_7 (14), ULEB128_7 (0),
+      DW_CFA_val_offset, ULEB128_7 (14), ULEB128_7 (0),
+
+#define SV(n) DW_CFA_same_value, ULEB128_7 (n)
+      SV(4), SV (5), SV (6), SV (7), SV (8), SV (9),
+      SV(10), SV (11), SV (15), SV (16), SV (17)
+#undef SV
+    };
+
+  abi_info->initial_instructions = abi_cfi;
+  abi_info->initial_instructions_end = &abi_cfi[sizeof abi_cfi];
+  abi_info->data_alignment_factor = -4;
+
+  abi_info->return_address_register = 15; /* lr.  */
+
+  return 0;
+}
diff --git a/backends/csky_corenote.c b/backends/csky_corenote.c
new file mode 100644
index 0000000..a1479bd
--- /dev/null
+++ b/backends/csky_corenote.c
@@ -0,0 +1,61 @@
+/* C-SKY specific core note handling.
+   Copyright (C) 2019 Hangzhou C-SKY Microsystems co.,ltd.
+   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 <elf.h>
+#include <inttypes.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <sys/time.h>
+
+#define BACKEND	csky_
+#include "libebl_CPU.h"
+
+#define	ULONG			uint32_t
+#define PID_T			int32_t
+#define	UID_T			uint32_t
+#define	GID_T			uint32_t
+#define ALIGN_ULONG		4
+#define ALIGN_PID_T		4
+#define ALIGN_UID_T		4
+#define ALIGN_GID_T		4
+#define TYPE_ULONG		ELF_T_WORD
+#define TYPE_PID_T		ELF_T_SWORD
+#define TYPE_UID_T		ELF_T_WORD
+#define TYPE_GID_T		ELF_T_WORD
+
+static const Ebl_Register_Location prstatus_regs[] =
+  {
+    { .offset = 0, .regno = 0, .count = 36, .bits = 32 } /* r0..r31 */
+  };
+#define PRSTATUS_REGS_SIZE	(36 * 4)
+
+#include "linux-core-note.c"
diff --git a/backends/csky_init.c b/backends/csky_init.c
new file mode 100644
index 0000000..b34a03a
--- /dev/null
+++ b/backends/csky_init.c
@@ -0,0 +1,65 @@
+/* Initialization of C-SKY specific backend library.
+   Copyright (C) 2019 Hangzhou C-SKY Microsystems co.,ltd.
+   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		csky_
+#define RELOC_PREFIX	R_CKCORE_
+#include "libebl_CPU.h"
+
+/* This defines the common reloc hooks based on csky_reloc.def.  */
+#include "common-reloc.c"
+
+const char *
+csky_init (Elf *elf __attribute__ ((unused)),
+	   GElf_Half machine __attribute__ ((unused)),
+	   Ebl *eh,
+	   size_t ehlen)
+{
+  /* Check whether the Elf_BH object has a sufficent size.  */
+  if (ehlen < sizeof (Ebl))
+    return NULL;
+
+  /* We handle it.  */
+  csky_init_reloc (eh);
+  HOOK (eh, abi_cfi);
+  HOOK (eh, core_note);
+  HOOK (eh, check_object_attribute);
+  HOOK (eh, machine_flag_check);
+  HOOK (eh, reloc_simple_type);
+  HOOK (eh, register_info);
+  HOOK (eh, section_type_name);
+  HOOK (eh, set_initial_registers_tid);
+
+  /* gcc/config/ #define DWARF_FRAME_REGISTERS.  */
+  eh->frame_nregs = 38;
+
+  return MODVERSION;
+}
diff --git a/backends/csky_initreg.c b/backends/csky_initreg.c
new file mode 100644
index 0000000..81a0da3
--- /dev/null
+++ b/backends/csky_initreg.c
@@ -0,0 +1,87 @@
+/* Fetch live process registers from TID. C-SKY version.
+   Copyright (C) 2019 Hangzhou C-SKY Microsystems co.,ltd.
+   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 "system.h"
+#include <assert.h>
+#if defined __CSKY__ && defined __linux__
+# include <sys/uio.h>
+# include <sys/procfs.h>
+# include <sys/ptrace.h>
+#endif
+
+#define BACKEND csky_
+#include "libebl_CPU.h"
+
+bool
+csky_set_initial_registers_tid (pid_t tid __attribute__ ((unused)),
+			ebl_tid_registers_t *setfunc __attribute__ ((unused)),
+				void *arg __attribute__ ((unused)))
+{
+#if !defined __CSKY__ || !defined __linux__
+  return false;
+#else /* __CSKY__ */
+  struct pt_regs user_regs;
+  struct iovec iovec;
+  iovec.iov_base = &user_regs;
+  iovec.iov_len = sizeof (user_regs);
+  if (ptrace (PTRACE_GETREGSET, tid, NT_PRSTATUS, &iovec) != 0)
+    return false;
+
+  Dwarf_Word dwarf_regs[38];
+
+  /* lr.  */
+  dwarf_regs[15] = user_regs.lr;
+  /* sp.  */
+  dwarf_regs[14] = user_regs.usp;
+  /* r0 ~ r13.  */
+  dwarf_regs[0] = user_regs.a0;
+  dwarf_regs[1] = user_regs.a1;
+  dwarf_regs[2] = user_regs.a2;
+  dwarf_regs[3] = user_regs.a3;
+  for (int i = 4; i < 14; i++)
+    dwarf_regs[i] = user_regs.regs[i - 4];
+  /* r ~ r13.  */
+  for (int i = 16; i < 31; i++)
+    dwarf_regs[i] = user_regs.exregs[i - 16];
+  /* tls.  */
+  dwarf_regs[31] = user_regs.tls;
+  /* hi.  */
+  dwarf_regs[36] = user_regs.rhi;
+  /* lo.  */
+  dwarf_regs[37] = user_regs.rlo;
+  /* pc.  */
+  dwarf_regs[32] = user_regs.pc;
+  setfunc (-1, 1, &dwarf_regs[32], arg);
+
+  return setfunc (0, 38, dwarf_regs, arg);
+#endif
+}
diff --git a/backends/csky_regs.c b/backends/csky_regs.c
new file mode 100644
index 0000000..6d45c04
--- /dev/null
+++ b/backends/csky_regs.c
@@ -0,0 +1,101 @@
+/* Register names and numbers for C-SKY DWARF.
+   Copyright (C) 2019 Hangzhou C-SKY Microsystems co.,ltd.
+   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 <string.h>
+#include <dwarf.h>
+
+#define BACKEND csky_
+#include "libebl_CPU.h"
+
+ssize_t
+csky_register_info (Ebl *ebl  __attribute__ ((unused)),
+		    int regno, char *name, size_t namelen,
+		    const char **prefix, const char **setname,
+		    int *bits, int *type)
+{
+  if (name == NULL)
+    return 38;
+
+  *prefix = "";
+  *bits = 32;
+  *type = DW_ATE_signed;
+  *setname = "integer";
+
+  switch (regno)
+    {
+    case 0 ... 9:
+      name[0] = 'r';
+      name[1] = regno + '0';
+      namelen = 2;
+      break;
+
+    case 10 ... 13:
+    case 16 ... 30:
+      name[0] = 'r';
+      name[1] = regno / 10 + '0';
+      name[2] = regno % 10 + '0';
+      namelen = 3;
+      break;
+
+    case 14:
+      stpcpy (name, "sp");
+      namelen = 2;
+      break;
+
+    case 15:
+      stpcpy (name, "lr");
+      namelen = 2;
+      break;
+
+    case 31:
+      stpcpy (name, "tls");
+      namelen = 3;
+      break;
+
+    case 36:
+      stpcpy (name, "hi");
+      namelen = 2;
+      break;
+
+    case 37:
+      stpcpy (name, "lo");
+      namelen = 2;
+      break;
+
+    default:
+      *setname = NULL;
+      return 0;
+    }
+
+  name[namelen++] = '\0';
+  return namelen;
+}
diff --git a/backends/csky_reloc.def b/backends/csky_reloc.def
new file mode 100644
index 0000000..1108f0c
--- /dev/null
+++ b/backends/csky_reloc.def
@@ -0,0 +1,86 @@
+/* List the relocation types for csky.  -*- C -*-
+   Copyright (C) 2019 Hangzhou C-SKY Microsystems co.,ltd.
+   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,		REL|EXEC|DYN)
+RELOC_TYPE (ADDR32,		REL|EXEC|DYN)
+RELOC_TYPE (PCRELIMM8BY4,	REL)
+RELOC_TYPE (PCRELIMM11BY2,	REL)
+RELOC_TYPE (PCREL32,		REL|DYN)
+RELOC_TYPE (PCRELJSR_IMM11BY2,	REL)
+RELOC_TYPE (RELATIVE,		EXEC|DYN)
+RELOC_TYPE (COPY,		EXEC|DYN)
+RELOC_TYPE (GLOB_DAT,		EXEC|DYN)
+RELOC_TYPE (JUMP_SLOT,		EXEC|DYN)
+RELOC_TYPE (GOTOFF,		REL)
+RELOC_TYPE (GOTPC,		REL)
+RELOC_TYPE (GOT32,		REL)
+RELOC_TYPE (PLT32,		REL)
+RELOC_TYPE (ADDRGOT,		REL)
+RELOC_TYPE (ADDRPLT,		REL)
+RELOC_TYPE (PCREL_IMM26BY2,	REL)
+RELOC_TYPE (PCREL_IMM16BY2,	REL)
+RELOC_TYPE (PCREL_IMM16BY4,	REL)
+RELOC_TYPE (PCREL_IMM10BY2,	REL)
+RELOC_TYPE (PCREL_IMM10BY4,	REL)
+RELOC_TYPE (ADDR_HI16,		REL|DYN)
+RELOC_TYPE (ADDR_LO16,		REL|DYN)
+RELOC_TYPE (GOTPC_HI16,		REL)
+RELOC_TYPE (GOTPC_LO16,		REL)
+RELOC_TYPE (GOTOFF_HI16,	REL)
+RELOC_TYPE (GOTOFF_LO16,	REL)
+RELOC_TYPE (GOT12,		REL)
+RELOC_TYPE (GOT_HI16,		REL)
+RELOC_TYPE (GOT_LO16,		REL)
+RELOC_TYPE (PLT12,		REL)
+RELOC_TYPE (PLT_HI16,		REL)
+RELOC_TYPE (PLT_LO16,		REL)
+RELOC_TYPE (ADDRGOT_HI16,	REL)
+RELOC_TYPE (ADDRGOT_LO16,	REL)
+RELOC_TYPE (ADDRPLT_HI16,	REL)
+RELOC_TYPE (ADDRPLT_LO16,	REL)
+RELOC_TYPE (PCREL_JSR_IMM26BY2,	REL|DYN)
+RELOC_TYPE (TOFFSET_LO16,	REL)
+RELOC_TYPE (DOFFSET_LO16,	REL)
+RELOC_TYPE (PCREL_IMM18BY2,	REL)
+RELOC_TYPE (DOFFSET_IMM18,	REL)
+RELOC_TYPE (DOFFSET_IMM18BY2,	REL)
+RELOC_TYPE (DOFFSET_IMM18BY4,	REL)
+RELOC_TYPE (GOT_IMM18BY4,	REL)
+RELOC_TYPE (PLT_IMM18BY4,	REL)
+RELOC_TYPE (PCREL_IMM7BY4,	REL)
+RELOC_TYPE (TLS_LE32,		REL)
+RELOC_TYPE (TLS_IE32,		REL)
+RELOC_TYPE (TLS_GD32,		REL)
+RELOC_TYPE (TLS_LDM32,		REL)
+RELOC_TYPE (TLS_LDO32,		REL)
+RELOC_TYPE (TLS_DTPMOD32,	EXEC|DYN)
+RELOC_TYPE (TLS_DTPOFF32,	EXEC|DYN)
+RELOC_TYPE (TLS_TPOFF32,	EXEC|DYN)
diff --git a/backends/csky_symbol.c b/backends/csky_symbol.c
new file mode 100644
index 0000000..79b5bf9
--- /dev/null
+++ b/backends/csky_symbol.c
@@ -0,0 +1,77 @@
+/* C-SKY specific symbolic name handling.
+   Copyright (C) 2019 Hangzhou C-SKY Microsystems co.,ltd.
+   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 csky_
+#include "libebl_CPU.h"
+
+/* Check for the simple reloc types.  */
+Elf_Type
+csky_reloc_simple_type (Ebl *ebl __attribute__ ((unused)), int type,
+			int *addsub __attribute__ ((unused)))
+{
+  switch (type)
+    {
+    case R_CKCORE_ADDR32:
+      return ELF_T_WORD;
+    default:
+      return ELF_T_NUM;
+    }
+}
+
+bool
+csky_machine_flag_check (GElf_Word flags)
+{
+  switch (flags & EF_CSKY_ABIMASK)
+    {
+    case EF_CSKY_ABIV2:
+      return true;
+    case EF_CSKY_ABIV1:
+    default:
+      return false;
+    }
+}
+
+const char *
+csky_section_type_name (int type,
+		       char *buf __attribute__ ((unused)),
+		       size_t len __attribute__ ((unused)))
+{
+  if (type == SHT_CSKY_ATTRIBUTES)
+    return "CSKY_ATTRIBUTES";
+
+  return NULL;
+}
diff --git a/libebl/ChangeLog b/libebl/ChangeLog
index e42cd34..bb91c15 100644
--- a/libebl/ChangeLog
+++ b/libebl/ChangeLog
@@ -1,3 +1,7 @@
+2019-04-29 Mao Han <han_mao@c-sky.com>
+
+	* eblopenbackend.c: Add C-SKY.
+
 2019-06-28  Mark Wielaard  <mark@klomp.org>
 
 	* eblopenbackend.c (try_dlopen): Remove result->name check.
diff --git a/libebl/eblopenbackend.c b/libebl/eblopenbackend.c
index 9dd5195..01711f5 100644
--- a/libebl/eblopenbackend.c
+++ b/libebl/eblopenbackend.c
@@ -135,6 +135,7 @@ static const struct
   { "bpf", "elf_bpf", "bpf", 3, EM_BPF, 0, 0 },
   { "riscv", "elf_riscv", "riscv", 5, EM_RISCV, ELFCLASS64, ELFDATA2LSB },
   { "riscv", "elf_riscv", "riscv", 5, EM_RISCV, ELFCLASS32, ELFDATA2LSB },
+  { "csky", "elf_csky", "csky", 4, EM_CSKY, ELFCLASS32, ELFDATA2LSB },
 };
 #define nmachines (sizeof (machines) / sizeof (machines[0]))
 
diff --git a/src/ChangeLog b/src/ChangeLog
index 27812b0..911ad26 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,7 @@
+2019-07-13 Mao Han <han_mao@c-sky.com>
+
+	* elflint.c: Add C-SKY.
+
 2019-06-28  Mark Wielaard  <mark@klomp.org>
 
 	* readelf.c (print_ehdr): Use dwelf_elf_e_machine_string instead of
diff --git a/src/elflint.c b/src/elflint.c
index 810c8bd..edb466d 100644
--- a/src/elflint.c
+++ b/src/elflint.c
@@ -330,7 +330,7 @@ static const int valid_e_machine[] =
     EM_CRIS, EM_JAVELIN, EM_FIREPATH, EM_ZSP, EM_MMIX, EM_HUANY, EM_PRISM,
     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_TILEGX, EM_TILEPRO, EM_AARCH64, EM_BPF, EM_RISCV, EM_CSKY
   };
 #define nvalid_e_machine \
   (sizeof (valid_e_machine) / sizeof (valid_e_machine[0]))
diff --git a/src/readelf.c b/src/readelf.c
index cda7c93..2084fb1 100644
--- a/src/readelf.c
+++ b/src/readelf.c
@@ -3571,7 +3571,9 @@ print_attributes (Ebl *ebl, const GElf_Ehdr *ehdr)
 
       if (shdr == NULL || (shdr->sh_type != SHT_GNU_ATTRIBUTES
 			   && (shdr->sh_type != SHT_ARM_ATTRIBUTES
-			       || ehdr->e_machine != EM_ARM)))
+			       || ehdr->e_machine != EM_ARM)
+			   && (shdr->sh_type != SHT_CSKY_ATTRIBUTES
+			       || ehdr->e_machine != EM_CSKY)))
 	continue;
 
       printf (gettext ("\
diff --git a/tests/ChangeLog b/tests/ChangeLog
index 8162185..05910ab 100644
--- a/tests/ChangeLog
+++ b/tests/ChangeLog
@@ -1,3 +1,10 @@
+2019-07-16  Mao Han  <han_mao@c-sky.com>
+
+	* hello_csky.ko.bz2: New testfile.
+	* run-addrcfi.sh: Add C-SKY testfile.
+	* run-strip-reloc.sh: Likewise.
+	* testfilecsky.bz2: New testfile.
+
 2019-06-28  Mark Wielaard  <mark@klomp.org>
 
 	* Makefile.am (check_PROGRAMS): Add dwelf_elf_e_machine_string.
diff --git a/tests/hello_csky.ko.bz2 b/tests/hello_csky.ko.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..ed98c7f6717251116484a8ed967d9983868171b0
GIT binary patch
literal 26448
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
Rs2Tt9cO+AV2?CJ6f57~7&W8X1

literal 0
HcmV?d00001

diff --git a/tests/run-addrcfi.sh b/tests/run-addrcfi.sh
index fd89d02..64fa24d 100755
--- a/tests/run-addrcfi.sh
+++ b/tests/run-addrcfi.sh
@@ -3747,3 +3747,46 @@ testrun_compare ${abs_builddir}/addrcfi -e testfile-x32 0x00400390 <<\EOF
 	control reg66 (%fsw): undefined
 handle_cfi no CFI (.debug_frame): no error
 EOF
+
+# EM_CSKY (function bar 0x8440)
+testfiles testfilecsky
+testrun_compare ${abs_builddir}/addrcfi -e testfilecsky 0x8440 <<\EOF
+dwarf_cfi_addrframe (.eh_frame): no matching address range
+.debug_frame has 0x8440 => [0x8440, 0x844a):
+	return address in reg15
+	CFA location expression: bregx(14)
+	integer reg0 (r0): undefined
+	integer reg1 (r1): undefined
+	integer reg2 (r2): undefined
+	integer reg3 (r3): undefined
+	integer reg4 (r4): same_value
+	integer reg5 (r5): same_value
+	integer reg6 (r6): same_value
+	integer reg7 (r7): same_value
+	integer reg8 (r8): same_value
+	integer reg9 (r9): same_value
+	integer reg10 (r10): same_value
+	integer reg11 (r11): same_value
+	integer reg12 (r12): undefined
+	integer reg13 (r13): undefined
+	integer reg14 (sp): location expression: call_frame_cfa stack_value
+	integer reg15 (lr): same_value
+	integer reg16 (r16): same_value
+	integer reg17 (r17): same_value
+	integer reg18 (r18): undefined
+	integer reg19 (r19): undefined
+	integer reg20 (r20): undefined
+	integer reg21 (r21): undefined
+	integer reg22 (r22): undefined
+	integer reg23 (r23): undefined
+	integer reg24 (r24): undefined
+	integer reg25 (r25): undefined
+	integer reg26 (r26): undefined
+	integer reg27 (r27): undefined
+	integer reg28 (r28): undefined
+	integer reg29 (r29): undefined
+	integer reg30 (r30): undefined
+	integer reg31 (tls): undefined
+	integer reg36 (hi): undefined
+	integer reg37 (lo): undefined
+EOF
diff --git a/tests/run-strip-reloc.sh b/tests/run-strip-reloc.sh
index 0c6b1c2..b7ec142 100755
--- a/tests/run-strip-reloc.sh
+++ b/tests/run-strip-reloc.sh
@@ -18,7 +18,7 @@
 . $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_aarch64.ko hello_m68k.ko hello_riscv64.ko hello_csky.ko
 
 tempfiles readelf.out readelf.out1 readelf.out2
 tempfiles out.stripped1 out.debug1 out.stripped2 out.debug2
@@ -119,6 +119,7 @@ runtest hello_s390.ko 1
 runtest hello_aarch64.ko 1
 runtest hello_m68k.ko 1
 runtest hello_riscv64.ko 1
+runtest hello_csky.ko 1
 
 # self test, shouldn't impact non-ET_REL files at all.
 runtest ${abs_top_builddir}/src/strip 0
diff --git a/tests/testfilecsky.bz2 b/tests/testfilecsky.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..dfee449e7d6e767f32667a40b0d6f910741c54c9
GIT binary patch
literal 3145
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
a#uzKS*^awNY2-W7T%lhnQB2a1`SM>rgqz&}

literal 0
HcmV?d00001

-- 
2.7.4



More information about the Elfutils-devel mailing list