summaryrefslogtreecommitdiff
path: root/payloads/libpayload/arch
diff options
context:
space:
mode:
Diffstat (limited to 'payloads/libpayload/arch')
-rw-r--r--payloads/libpayload/arch/arm64/Makefile.inc2
-rw-r--r--payloads/libpayload/arch/arm64/gdb.c69
2 files changed, 71 insertions, 0 deletions
diff --git a/payloads/libpayload/arch/arm64/Makefile.inc b/payloads/libpayload/arch/arm64/Makefile.inc
index 7107d0c799..bb09b8f919 100644
--- a/payloads/libpayload/arch/arm64/Makefile.inc
+++ b/payloads/libpayload/arch/arm64/Makefile.inc
@@ -40,6 +40,8 @@ libc-y += cache.c cpu.S
libc-y += selfboot.c
libcbfs-$(CONFIG_LP_CBFS) += dummy_media.c
+libgdb-y += gdb.c
+
# Add other classes here when you put assembly files into them!
head.o-S-ccopts += $(arm64_asm_flags)
libc-S-ccopts += $(arm64_asm_flags)
diff --git a/payloads/libpayload/arch/arm64/gdb.c b/payloads/libpayload/arch/arm64/gdb.c
new file mode 100644
index 0000000000..857272f095
--- /dev/null
+++ b/payloads/libpayload/arch/arm64/gdb.c
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2014 Google Inc.
+ *
+ * This program 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; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <exception.h>
+#include <gdb.h>
+#include <libpayload.h>
+
+struct gdb_regs
+{
+ u64 x[32];
+ struct fp_reg
+ {
+ u64 quad[2];
+ } __attribute__((packed)) f[32];
+ u32 fpcr;
+ u32 fpsr;
+ u32 spsr;
+} __attribute__((packed));
+
+static const u8 type_to_signal[] = {
+ [EXC_INV] = GDB_SIGILL,
+ [EXC_SYNC] = GDB_SIGTRAP,
+ [EXC_IRQ] = GDB_SIGSEGV,
+ [EXC_FIQ] = GDB_SIGSEGV,
+ [EXC_SERROR] = GDB_SIGSEGV
+};
+
+static int gdb_exception_hook(u32 type)
+{
+ return -1;
+}
+
+void gdb_arch_init(void)
+{
+ exception_install_hook(&gdb_exception_hook);
+}
+
+void gdb_arch_enter(void)
+{
+}
+
+int gdb_arch_set_single_step(int on)
+{
+ /* GDB seems to only need this on x86, ARM works fine without it. */
+ return -1;
+}
+
+void gdb_arch_encode_regs(struct gdb_message *message)
+{
+}
+
+void gdb_arch_decode_regs(int offset, struct gdb_message *message)
+{
+}