]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
gdb: add get_offsets hook
authorJie Zhang <jie@codesourcery.com>
Wed, 10 Mar 2010 15:37:44 +0000 (10:37 -0500)
committerMike Frysinger <vapier@gentoo.org>
Thu, 10 Nov 2022 18:44:13 +0000 (01:44 +0700)
Signed-off-by: Jie Zhang <jie@codesourcery.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
gdb/gdbarch-components.py
gdb/gdbarch-gen.h
gdb/gdbarch.c
gdb/remote.c

index e9051db3f174cf97cb247cebf750b4b5cf120903..0ac05c43575a753e789ec97ae92237d2539c4a5e 100644 (file)
@@ -2319,6 +2319,16 @@ True if inferiors share an address space (e.g., uClinux).
     invalid=False,
 )
 
+Value(
+    comment="""
+Query the remote side for the text, data and bss offsets.
+""",
+    type="int",
+    name="use_get_offsets",
+    predefault="1",
+    invalid=False,
+)
+
 Method(
     comment="""
 True if a fast tracepoint can be set at an address.
index be83db144df90f75934b2da21f60fccdd6045049..87ef21cbdd06a1fb3e3145afc8f3b25ea30d89cc 100644 (file)
@@ -1427,6 +1427,11 @@ typedef int (gdbarch_has_shared_address_space_ftype) (struct gdbarch *gdbarch);
 extern int gdbarch_has_shared_address_space (struct gdbarch *gdbarch);
 extern void set_gdbarch_has_shared_address_space (struct gdbarch *gdbarch, gdbarch_has_shared_address_space_ftype *has_shared_address_space);
 
+/* Query the remote side for the text, data and bss offsets. */
+
+extern int gdbarch_use_get_offsets (struct gdbarch *gdbarch);
+extern void set_gdbarch_use_get_offsets (struct gdbarch *gdbarch, int use_get_offsets);
+
 /* True if a fast tracepoint can be set at an address. */
 
 typedef int (gdbarch_fast_tracepoint_valid_at_ftype) (struct gdbarch *gdbarch, CORE_ADDR addr, std::string *msg);
index 8519be9c1056f6c2201a2263bdaa1bec08b0dd0d..5c6802daa0fc5dcb3d1b90da0ed8215d047936c7 100644 (file)
@@ -226,6 +226,7 @@ struct gdbarch
   int has_global_solist = 0;
   int has_global_breakpoints = 0;
   gdbarch_has_shared_address_space_ftype *has_shared_address_space = default_has_shared_address_space;
+  int use_get_offsets = 1;
   gdbarch_fast_tracepoint_valid_at_ftype *fast_tracepoint_valid_at = default_fast_tracepoint_valid_at;
   gdbarch_guess_tracepoint_registers_ftype *guess_tracepoint_registers = default_guess_tracepoint_registers;
   gdbarch_auto_charset_ftype *auto_charset = default_auto_charset;
@@ -485,6 +486,7 @@ verify_gdbarch (struct gdbarch *gdbarch)
   /* Skip verify of has_global_solist, invalid_p == 0 */
   /* Skip verify of has_global_breakpoints, invalid_p == 0 */
   /* Skip verify of has_shared_address_space, invalid_p == 0 */
+  /* Skip verify of use_get_offsets, invalid_p == 0 */
   /* Skip verify of fast_tracepoint_valid_at, invalid_p == 0 */
   /* Skip verify of guess_tracepoint_registers, invalid_p == 0 */
   /* Skip verify of auto_charset, invalid_p == 0 */
@@ -1256,6 +1258,9 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file)
   gdb_printf (file,
                       "gdbarch_dump: has_shared_address_space = <%s>\n",
                       host_address_to_string (gdbarch->has_shared_address_space));
+  gdb_printf (file,
+                      "gdbarch_dump: use_get_offsets = %s\n",
+                      plongest (gdbarch->use_get_offsets));
   gdb_printf (file,
                       "gdbarch_dump: fast_tracepoint_valid_at = <%s>\n",
                       host_address_to_string (gdbarch->fast_tracepoint_valid_at));
@@ -4801,6 +4806,23 @@ set_gdbarch_has_shared_address_space (struct gdbarch *gdbarch,
   gdbarch->has_shared_address_space = has_shared_address_space;
 }
 
+int
+gdbarch_use_get_offsets (struct gdbarch *gdbarch)
+{
+  gdb_assert (gdbarch != NULL);
+  /* Skip verify of use_get_offsets, invalid_p == 0 */
+  if (gdbarch_debug >= 2)
+    gdb_printf (gdb_stdlog, "gdbarch_use_get_offsets called\n");
+  return gdbarch->use_get_offsets;
+}
+
+void
+set_gdbarch_use_get_offsets (struct gdbarch *gdbarch,
+                             int use_get_offsets)
+{
+  gdbarch->use_get_offsets = use_get_offsets;
+}
+
 int
 gdbarch_fast_tracepoint_valid_at (struct gdbarch *gdbarch, CORE_ADDR addr, std::string *msg)
 {
index 5118ecd0a31254cf551f01292651284bfe42e1d9..6b9c427b5d48b0914fd55f2d33bc4aafb37261cf 100644 (file)
@@ -5006,6 +5006,10 @@ remote_target::start_remote_1 (int from_tty, int extended_p)
          return false;
        }
 
+      /* Get text, data & bss offsets.  */
+      if (gdbarch_use_get_offsets (target_gdbarch))
+       get_offsets ();
+
       /* Report all signals during attach/startup.  */
       pass_signals ({});