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]

[PATCH] aarch64-newlib-tdep patch


Hi,

This is a re-spin of the AArch64 aarch64-newlib-tdep patch addressing comments raised here:

http://www.sourceware.org/ml/gdb-patches/2013-01/msg00257.html

OK, thanks for the explanation. I don't have any experience with
newlib, but I think it would be helpful in the long run if we could
add a newlib sniffer. It might not be obvious, and might in fact
require assistance from the newlib developers.

The sniffer is on my TODO list, I'm hoping this issue is not a blocker to the patch being accepted?


In the meantime, I think we will need to document somewhere the fact that a user has to execute this command to switch to the "newlib" ABI... I'm just not sure where. Ask EliZ?

Pedro also commented that we need to update the documentation w.r.t the AArch64 port. There will be a separate patch for documentation shortly...


Cheers
/Marcus

Proposed ChangeLog:

2013-01-22  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.
        * configure.tgt: Add aarch64-newlib-tdep.o to gdb_target_obs of
        aarch64*-*-elf.
        * defs.h (enum gdb_osabi): Add GDB_OSABI_NEWLIB.
        * Makefile.in (ALL_64_TARGET_OBS): Add aarch64-newlib-tdep.o.
        (ALLDEPFILES): Add aarch64-newlib-tdep.c.
        * osabi.c (gdb_osabi_names): Add "Newlib".
diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index a3fc2d3..4b052d2 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-tdep.o aarch64-linux-tdep.o \
+	aarch64-tdep.o aarch64-linux-tdep.o aarch64-newlib-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 \
@@ -1417,7 +1417,7 @@ force_update:
 MAKEOVERRIDES=
 
 ALLDEPFILES = \
-	aarch64-tdep.c aarch64-linux-tdep.c \
+	aarch64-tdep.c aarch64-linux-tdep.c aarch64-newlib-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..47ce687
--- /dev/null
+++ b/gdb/aarch64-newlib-tdep.c
@@ -0,0 +1,47 @@
+/* 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"
+
+/* Implement the 'init_osabi' method of struct gdb_osabi_handler.  */
+
+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 10365c1..d2aacfd 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>"
 };

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