This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 3/5] aarch64-newlib-tdep patch


On 23/12/12 06:50, Joel Brobecker wrote:

As mentioned in the review of patch #1, can you explain how this
code would be activated, and why you need a new osabi value?

The code is activated by "set osabi Newlib". The code is required because we want somewhere to hang setjmp longjmp handling for newlib without hardwiring the assumption that all bare-metal environments use newlib.


Patch re-spun with copyright year update...

/Marcus

2013-01-07  Jim MacArthur  <jim.macarthur@arm.com>
            Marcus Shawcroft  <marcus.shawcroft@arm.com>
            Nigel Stephens  <nigel.stephens@arm.com>
            Yufeng Zhang  <yufeng.zhang@arm.com>

        * aarch64-newlib-tdep.c: New file.
        * defs.h (enum gdb_osabi): Add GDB_OSABI_NEWLIB.
        * osabi.c (gdb_osabi_names): Add "Newlib".
diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index 02fe931..58803e9 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -519,7 +519,7 @@ TARGET_OBS = @TARGET_OBS@
 # All target-dependent objects files that require 64-bit CORE_ADDR
 # (used with --enable-targets=all --enable-64-bit-bfd).
 ALL_64_TARGET_OBS = \
-	aarch64-linux-tdep.o aarch64-tdep.o \
+	aarch64-linux-tdep.o aarch64-newlib-tdep.o aarch64-tdep.o \
 	alphabsd-tdep.o alphafbsd-tdep.o alpha-linux-tdep.o alpha-mdebug-tdep.o \
 	alphanbsd-tdep.o alphaobsd-tdep.o alpha-osf1-tdep.o alpha-tdep.o \
 	amd64fbsd-tdep.o amd64-darwin-tdep.o amd64-dicos-tdep.o \
@@ -1413,7 +1413,7 @@ force_update:
 MAKEOVERRIDES=
 
 ALLDEPFILES = \
-	aarch64-linux-tdep.c aarch64-tdep.c \
+	aarch64-linux-tdep.c aarch64-newlib-tdep.c aarch64-tdep.c \
 	aix-thread.c \
 	alpha-nat.c alphabsd-nat.c alpha-linux-nat.c \
 	alpha-tdep.c alpha-mdebug-tdep.c \
diff --git a/gdb/aarch64-newlib-tdep.c b/gdb/aarch64-newlib-tdep.c
new file mode 100644
index 0000000..11dd1fe
--- /dev/null
+++ b/gdb/aarch64-newlib-tdep.c
@@ -0,0 +1,45 @@
+/* Target-dependent code for Newlib AArch64.
+
+   Copyright (C) 2011-2013 Free Software Foundation, Inc.
+   Contributed by ARM Ltd.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include "defs.h"
+
+#include "gdbarch.h"
+#include "aarch64-tdep.h"
+#include "osabi.h"
+
+static void
+aarch64_newlib_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
+{
+  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+
+  /* Jump buffer - support for longjmp.
+     Offset of original PC in jump buffer (in registers).  */
+  tdep->jb_pc = 11;
+}
+
+/* Provide a prototype to silence -Wmissing-prototypes.  */
+extern initialize_file_ftype _initialize_aarch64_newlib_tdep;
+
+void
+_initialize_aarch64_newlib_tdep (void)
+{
+  gdbarch_register_osabi (bfd_arch_aarch64, 0, GDB_OSABI_NEWLIB,
+			  aarch64_newlib_init_abi);
+}
diff --git a/gdb/configure.tgt b/gdb/configure.tgt
index 9f7b17e..b16e610 100644
--- a/gdb/configure.tgt
+++ b/gdb/configure.tgt
@@ -33,7 +33,7 @@ esac
 case "${targ}" in
 aarch64*-*-elf)
 	# Target: AArch64 embedded system
-	gdb_target_obs="aarch64-tdep.o"
+	gdb_target_obs="aarch64-tdep.o aarch64-newlib-tdep.o"
 	;;
 
 aarch64*-*-linux*)
diff --git a/gdb/defs.h b/gdb/defs.h
index 10089b0..d8a1adb 100644
--- a/gdb/defs.h
+++ b/gdb/defs.h
@@ -595,6 +595,7 @@ enum gdb_osabi
   GDB_OSABI_SYMBIAN,
   GDB_OSABI_OPENVMS,
   GDB_OSABI_LYNXOS178,
+  GDB_OSABI_NEWLIB,
 
   GDB_OSABI_INVALID		/* keep this last */
 };
diff --git a/gdb/osabi.c b/gdb/osabi.c
index 54300d6..a123ea0 100644
--- a/gdb/osabi.c
+++ b/gdb/osabi.c
@@ -74,6 +74,7 @@ static const char * const gdb_osabi_names[] =
   "Symbian",
   "OpenVMS",
   "LynxOS178",
+  "Newlib",
 
   "<invalid>"
 };
-- 
1.7.9.5

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]