This is the mail archive of the
elfutils-devel@sourceware.org
mailing list for the elfutils project.
[PATCH 1/5] Add core file support for SuperH.
- From: Matt Fleming <matt at console-pimps dot org>
- To: elfutils-devel at lists dot fedorahosted dot org
- Date: Sat, 27 Mar 2010 19:31:57 +0000
- Subject: [PATCH 1/5] Add core file support for SuperH.
---
backends/Makefile.am | 2 +-
backends/sh_corenote.c | 84 ++++++++++++++++++++++++++++++++++++++++++++++++
backends/sh_init.c | 1 +
3 files changed, 86 insertions(+), 1 deletions(-)
create mode 100644 backends/sh_corenote.c
diff --git a/backends/Makefile.am b/backends/Makefile.am
index a18454d..fc6654f 100644
--- a/backends/Makefile.am
+++ b/backends/Makefile.am
@@ -52,7 +52,7 @@ cpu_i386 = ../libcpu/libcpu_i386.a
libebl_i386_pic_a_SOURCES = $(i386_SRCS)
am_libebl_i386_pic_a_OBJECTS = $(i386_SRCS:.c=.os)
-sh_SRCS = sh_init.c sh_symbol.c
+sh_SRCS = sh_init.c sh_symbol.c sh_corenote.c
libebl_sh_pic_a_SOURCES = $(sh_SRCS)
am_libebl_sh_pic_a_OBJECTS = $(sh_SRCS:.c=.os)
diff --git a/backends/sh_corenote.c b/backends/sh_corenote.c
new file mode 100644
index 0000000..6887120
--- /dev/null
+++ b/backends/sh_corenote.c
@@ -0,0 +1,84 @@
+/* SH specific core note handling.
+ Copyright (C) 2010 Matt Fleming <matt@console-pimps.org>
+ This file is part of Red Hat elfutils.
+
+ Red Hat elfutils is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by the
+ Free Software Foundation; version 2 of the License.
+
+ Red Hat 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 a copy of the GNU General Public License along
+ with Red Hat elfutils; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
+
+ Red Hat elfutils is an included package of the Open Invention Network.
+ An included package of the Open Invention Network is a package for which
+ Open Invention Network licensees cross-license their patents. No patent
+ license is granted, either expressly or impliedly, by designation as an
+ included package. Should you wish to participate in the Open Invention
+ Network licensing program, please visit www.openinventionnetwork.com
+ <http://www.openinventionnetwork.com>. */
+
+#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 sh_
+#include "libebl_CPU.h"
+
+static const Ebl_Register_Location prstatus_regs[] =
+ {
+#define GR(at, n, dwreg) \
+ { .offset = at * 4, .regno = dwreg, .count = n, .bits = 32 }
+ GR (0, 16, 0), /* r0-r15 */
+ GR (16, 1, 16), /* pc */
+ GR (17, 1, 17), /* pr */
+ GR (18, 1, 22), /* sr */
+ GR (19, 1, 18), /* gbr */
+ GR (20, 1, 20), /* mach */
+ GR (21, 1, 21), /* macl */
+ /* 22, 1, tra */
+#undef GR
+ };
+#define PRSTATUS_REGS_SIZE (23 * 4)
+
+#define ULONG uint32_t
+#define PID_T int32_t
+#define UID_T uint16_t
+#define GID_T uint16_t
+#define ALIGN_ULONG 4
+#define ALIGN_PID_T 4
+#define ALIGN_UID_T 2
+#define ALIGN_GID_T 2
+#define TYPE_ULONG ELF_T_WORD
+#define TYPE_PID_T ELF_T_SWORD
+#define TYPE_UID_T ELF_T_HALF
+#define TYPE_GID_T ELF_T_HALF
+
+#define PRSTATUS_REGSET_ITEMS \
+ { \
+ .name = "tra", .type = ELF_T_ADDR, .format = 'x', \
+ .offset = offsetof (struct EBLHOOK(prstatus), pr_reg[22]), \
+ .group = "register" \
+ }
+
+static const Ebl_Register_Location fpregset_regs[] =
+ {
+ { .offset = 0, .regno = 25, .count = 16, .bits = 32 }, /* fr0-fr15 */
+ { .offset = 16, .regno = 87, .count = 16, .bits = 32 }, /* xf0-xf15 */
+ { .offset = 32, .regno = 24, .count = 1, .bits = 32 }, /* fpscr */
+ { .offset = 33, .regno = 23, .count = 1, .bits = 32 } /* fpul */
+ };
+#define FPREGSET_SIZE (50 * 4)
+
+#include "linux-core-note.c"
diff --git a/backends/sh_init.c b/backends/sh_init.c
index 02502ab..248f23a 100644
--- a/backends/sh_init.c
+++ b/backends/sh_init.c
@@ -51,6 +51,7 @@ sh_init (elf, machine, eh, ehlen)
eh->name = "Hitachi SH";
sh_init_reloc (eh);
HOOK (eh, reloc_simple_type);
+ HOOK (eh, core_note);
return MODVERSION;
}
--
1.7.0.2