aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xgdb/regformats/regdat.sh14
-rw-r--r--gdbserver/Makefile.in9
-rw-r--r--gdbserver/linux-aarch32-tdesc.cc2
-rw-r--r--gdbserver/linux-aarch64-tdesc.cc3
-rw-r--r--gdbserver/linux-arc-low.cc2
-rw-r--r--gdbserver/linux-arm-tdesc.cc2
-rw-r--r--gdbserver/linux-csky-low.cc2
-rw-r--r--gdbserver/linux-loongarch-low.cc2
-rw-r--r--gdbserver/linux-riscv-low.cc2
-rw-r--r--gdbserver/linux-x86-tdesc.cc15
-rw-r--r--gdbserver/netbsd-aarch64-low.cc2
-rw-r--r--gdbserver/netbsd-amd64-low.cc2
-rw-r--r--gdbserver/netbsd-i386-low.cc2
-rw-r--r--gdbserver/tdesc.cc5
-rw-r--r--gdbserver/tdesc.h6
-rw-r--r--gdbserver/win32-i386-low.cc4
-rw-r--r--gdbserver/win32-low.h7
17 files changed, 56 insertions, 25 deletions
diff --git a/gdb/regformats/regdat.sh b/gdb/regformats/regdat.sh
index 38464c6..49aa02a 100755
--- a/gdb/regformats/regdat.sh
+++ b/gdb/regformats/regdat.sh
@@ -105,7 +105,7 @@ EOF
}
-exec > new-$2
+exec > new-$3
copyright $1
echo '#include "regdef.h"'
echo '#include "tdesc.h"'
@@ -118,6 +118,7 @@ xmlarch=x
xmlosabi=x
expedite=x
feature=x
+osabi=unknown
exec < $1
while do_read
do
@@ -143,7 +144,7 @@ do
elif test "${type}" = "xmlarch"; then
xmlarch="${entry}"
continue
- elif test "${type}" = "osabi"; then
+ elif test "${type}" = "xmlosabi"; then
xmlosabi="${entry}"
continue
elif test "${type}" = "expedite"; then
@@ -152,6 +153,9 @@ do
elif test "${type}" = "feature"; then
feature="${entry}"
continue
+ elif test "${type}" = "osabi"; then
+ osabi="${entry}"
+ continue
elif test "${name}" = x; then
echo "$0: $1 does not specify \`\`name''." 1>&2
exit 1
@@ -188,11 +192,13 @@ else
fi
echo
+osabi_enum=$(grep "${osabi}" "$2" | sed 's/.*(\([^,]\+\),.*/GDB_OSABI_\1/')
+
cat <<EOF
result->xmltarget = xmltarget_${name};
#endif
- init_target_desc (result, expedite_regs_${name});
+ init_target_desc (result, expedite_regs_${name}, ${osabi_enum});
tdesc_${name} = result;
}
@@ -200,4 +206,4 @@ EOF
# close things off
exec 1>&2
-mv -- "new-$2" "$2"
+mv -- "new-$3" "$3"
diff --git a/gdbserver/Makefile.in b/gdbserver/Makefile.in
index 6148ccf..f555ff4 100644
--- a/gdbserver/Makefile.in
+++ b/gdbserver/Makefile.in
@@ -488,6 +488,7 @@ stamp-xml: $(XML_DIR)/feature_to_c.sh Makefile $(XML_FILES)
MAKEOVERRIDES =
regdat_sh = $(srcdir)/../gdb/regformats/regdat.sh
+osabi_def = $(srcdir)/../gdbsupport/osabi.def
UST_CFLAGS = \
$(ustinc) \
@@ -588,11 +589,11 @@ target/%.o: ../gdb/target/%.c
# Rules for register format descriptions. Suffix destination files with
# -generated to identify and clean them easily.
-%-generated.cc: ../gdb/regformats/%.dat $(regdat_sh)
- $(ECHO_REGDAT) $(SHELL) $(regdat_sh) $< $@
+%-generated.cc: ../gdb/regformats/%.dat $(osabi_def) $(regdat_sh)
+ $(ECHO_REGDAT) $(SHELL) $(regdat_sh) $< $(osabi_def) $@
-%-generated.cc: ../gdb/regformats/rs6000/%.dat $(regdat_sh)
- $(ECHO_REGDAT) $(SHELL) $(regdat_sh) $< $@
+%-generated.cc: ../gdb/regformats/rs6000/%.dat $(osabi_def) $(regdat_sh)
+ $(ECHO_REGDAT) $(SHELL) $(regdat_sh) $< $(osabi_def) $@
# Rule for gdbreplay.o. This is the same as COMPILE, but includes common-defs.h
# instead of server.h.
diff --git a/gdbserver/linux-aarch32-tdesc.cc b/gdbserver/linux-aarch32-tdesc.cc
index b898775..441fe66 100644
--- a/gdbserver/linux-aarch32-tdesc.cc
+++ b/gdbserver/linux-aarch32-tdesc.cc
@@ -34,7 +34,7 @@ aarch32_linux_read_description ()
tdesc_aarch32 = aarch32_create_target_description (false);
static const char *expedite_regs[] = { "r11", "sp", "pc", 0 };
- init_target_desc (tdesc_aarch32, expedite_regs);
+ init_target_desc (tdesc_aarch32, expedite_regs, GDB_OSABI_LINUX);
}
return tdesc_aarch32;
}
diff --git a/gdbserver/linux-aarch64-tdesc.cc b/gdbserver/linux-aarch64-tdesc.cc
index 31ec785..39d5bcc 100644
--- a/gdbserver/linux-aarch64-tdesc.cc
+++ b/gdbserver/linux-aarch64-tdesc.cc
@@ -67,7 +67,8 @@ aarch64_linux_read_description (const aarch64_features &features)
expedited_registers.push_back (nullptr);
- init_target_desc (tdesc, (const char **) expedited_registers.data ());
+ init_target_desc (tdesc, (const char **) expedited_registers.data (),
+ GDB_OSABI_LINUX);
tdesc_aarch64_map[features] = tdesc;
}
diff --git a/gdbserver/linux-arc-low.cc b/gdbserver/linux-arc-low.cc
index 1bcaf6c..16d8d58 100644
--- a/gdbserver/linux-arc-low.cc
+++ b/gdbserver/linux-arc-low.cc
@@ -114,7 +114,7 @@ arc_linux_read_description (void)
target_desc_up tdesc = arc_create_target_description (features);
static const char *expedite_regs[] = { "sp", "status32", nullptr };
- init_target_desc (tdesc.get (), expedite_regs);
+ init_target_desc (tdesc.get (), expedite_regs, GDB_OSABI_LINUX);
return tdesc.release ();
}
diff --git a/gdbserver/linux-arm-tdesc.cc b/gdbserver/linux-arm-tdesc.cc
index 559f9b0..fff2e94 100644
--- a/gdbserver/linux-arm-tdesc.cc
+++ b/gdbserver/linux-arm-tdesc.cc
@@ -37,7 +37,7 @@ arm_linux_read_description (arm_fp_type fp_type)
tdesc = arm_create_target_description (fp_type, false);
static const char *expedite_regs[] = { "r11", "sp", "pc", 0 };
- init_target_desc (tdesc, expedite_regs);
+ init_target_desc (tdesc, expedite_regs, GDB_OSABI_LINUX);
tdesc_arm_list[fp_type] = tdesc;
}
diff --git a/gdbserver/linux-csky-low.cc b/gdbserver/linux-csky-low.cc
index 2eb5a2d..18a0d15 100644
--- a/gdbserver/linux-csky-low.cc
+++ b/gdbserver/linux-csky-low.cc
@@ -133,7 +133,7 @@ csky_target::low_arch_setup ()
if (tdesc->expedite_regs.empty ())
{
- init_target_desc (tdesc.get (), expedite_regs);
+ init_target_desc (tdesc.get (), expedite_regs, GDB_OSABI_LINUX);
gdb_assert (!tdesc->expedite_regs.empty ());
}
diff --git a/gdbserver/linux-loongarch-low.cc b/gdbserver/linux-loongarch-low.cc
index 584ea64..cf7d6c0 100644
--- a/gdbserver/linux-loongarch-low.cc
+++ b/gdbserver/linux-loongarch-low.cc
@@ -85,7 +85,7 @@ loongarch_target::low_arch_setup ()
if (tdesc->expedite_regs.empty ())
{
- init_target_desc (tdesc.get (), expedite_regs);
+ init_target_desc (tdesc.get (), expedite_regs, GDB_OSABI_LINUX);
gdb_assert (!tdesc->expedite_regs.empty ());
}
current_process ()->tdesc = tdesc.release ();
diff --git a/gdbserver/linux-riscv-low.cc b/gdbserver/linux-riscv-low.cc
index c4554c5..7170ad9 100644
--- a/gdbserver/linux-riscv-low.cc
+++ b/gdbserver/linux-riscv-low.cc
@@ -91,7 +91,7 @@ riscv_target::low_arch_setup ()
if (tdesc->expedite_regs.empty ())
{
- init_target_desc (tdesc.get (), expedite_regs);
+ init_target_desc (tdesc.get (), expedite_regs, GDB_OSABI_LINUX);
gdb_assert (!tdesc->expedite_regs.empty ());
}
diff --git a/gdbserver/linux-x86-tdesc.cc b/gdbserver/linux-x86-tdesc.cc
index 13c8076..6aa5c4a 100644
--- a/gdbserver/linux-x86-tdesc.cc
+++ b/gdbserver/linux-x86-tdesc.cc
@@ -26,10 +26,21 @@
void
x86_linux_post_init_tdesc (target_desc *tdesc, bool is_64bit)
{
+ enum gdb_osabi osabi = GDB_OSABI_LINUX;
+
+#ifndef IN_PROCESS_AGENT
+ /* x86 target descriptions are created with the osabi already set.
+ However, init_target_desc requires us to override the already set
+ value. That's fine, out new string should match the old one. */
+ gdb_assert (tdesc_osabi_name (tdesc) != nullptr);
+ gdb_assert (strcmp (tdesc_osabi_name (tdesc),
+ gdbarch_osabi_name (osabi)) == 0);
+#endif /* ! IN_PROCESS_AGENT */
+
#ifdef __x86_64__
if (is_64bit)
- init_target_desc (tdesc, amd64_expedite_regs);
+ init_target_desc (tdesc, amd64_expedite_regs, osabi);
else
#endif
- init_target_desc (tdesc, i386_expedite_regs);
+ init_target_desc (tdesc, i386_expedite_regs, osabi);
}
diff --git a/gdbserver/netbsd-aarch64-low.cc b/gdbserver/netbsd-aarch64-low.cc
index f20a1a7..8834e0a 100644
--- a/gdbserver/netbsd-aarch64-low.cc
+++ b/gdbserver/netbsd-aarch64-low.cc
@@ -98,7 +98,7 @@ netbsd_aarch64_target::low_arch_setup ()
= aarch64_create_target_description ({});
static const char *expedite_regs_aarch64[] = { "x29", "sp", "pc", NULL };
- init_target_desc (tdesc, expedite_regs_aarch64);
+ init_target_desc (tdesc, expedite_regs_aarch64, GDB_OSABI_NETBSD);
current_process ()->tdesc = tdesc;
}
diff --git a/gdbserver/netbsd-amd64-low.cc b/gdbserver/netbsd-amd64-low.cc
index b3f3aab..ad7cb43 100644
--- a/gdbserver/netbsd-amd64-low.cc
+++ b/gdbserver/netbsd-amd64-low.cc
@@ -193,7 +193,7 @@ netbsd_amd64_target::low_arch_setup ()
target_desc *tdesc
= amd64_create_target_description (X86_XSTATE_SSE_MASK, false, false, false);
- init_target_desc (tdesc, amd64_expedite_regs);
+ init_target_desc (tdesc, amd64_expedite_regs, GDB_OSABI_NETBSD);
current_process ()->tdesc = tdesc;
}
diff --git a/gdbserver/netbsd-i386-low.cc b/gdbserver/netbsd-i386-low.cc
index 247a397..ea6fce4 100644
--- a/gdbserver/netbsd-i386-low.cc
+++ b/gdbserver/netbsd-i386-low.cc
@@ -142,7 +142,7 @@ netbsd_i386_target::low_arch_setup ()
target_desc *tdesc
= i386_create_target_description (X86_XSTATE_SSE_MASK, false, false);
- init_target_desc (tdesc, i386_expedite_regs);
+ init_target_desc (tdesc, i386_expedite_regs, GDB_OSABI_NETBSD);
current_process ()->tdesc = tdesc;
}
diff --git a/gdbserver/tdesc.cc b/gdbserver/tdesc.cc
index d052f43..da1287a 100644
--- a/gdbserver/tdesc.cc
+++ b/gdbserver/tdesc.cc
@@ -53,7 +53,8 @@ void target_desc::accept (tdesc_element_visitor &v) const
void
init_target_desc (struct target_desc *tdesc,
- const char **expedite_regs)
+ const char **expedite_regs,
+ enum gdb_osabi osabi)
{
int offset = 0;
@@ -88,6 +89,8 @@ init_target_desc (struct target_desc *tdesc,
int expedite_count = 0;
while (expedite_regs[expedite_count] != nullptr)
tdesc->expedite_regs.push_back (expedite_regs[expedite_count++]);
+
+ set_tdesc_osabi (tdesc, osabi);
#endif
}
diff --git a/gdbserver/tdesc.h b/gdbserver/tdesc.h
index 4796b50..9264786 100644
--- a/gdbserver/tdesc.h
+++ b/gdbserver/tdesc.h
@@ -20,6 +20,7 @@
#define GDBSERVER_TDESC_H
#include "gdbsupport/tdesc.h"
+#include "gdbsupport/osabi.h"
#include "regdef.h"
#include <vector>
@@ -81,10 +82,11 @@ void copy_target_description (struct target_desc *dest,
const struct target_desc *src);
/* Initialize TDESC, and then set its expedite_regs field to
- EXPEDITE_REGS. */
+ EXPEDITE_REGS and its osabi to OSABI. */
void init_target_desc (struct target_desc *tdesc,
- const char **expedite_regs);
+ const char **expedite_regs,
+ enum gdb_osabi osabi);
/* Return the current inferior's target description. Never returns
NULL. */
diff --git a/gdbserver/win32-i386-low.cc b/gdbserver/win32-i386-low.cc
index 0a761ca..13f9aca 100644
--- a/gdbserver/win32-i386-low.cc
+++ b/gdbserver/win32-i386-low.cc
@@ -596,12 +596,12 @@ i386_arch_setup (void)
#ifdef __x86_64__
tdesc = amd64_create_target_description (X86_XSTATE_SSE_MASK, false,
false, false);
- init_target_desc (tdesc, amd64_expedite_regs);
+ init_target_desc (tdesc, amd64_expedite_regs, WINDOWS_OSABI);
win32_tdesc = tdesc;
#endif
tdesc = i386_create_target_description (X86_XSTATE_SSE_MASK, false, false);
- init_target_desc (tdesc, i386_expedite_regs);
+ init_target_desc (tdesc, i386_expedite_regs, WINDOWS_OSABI);
#ifdef __x86_64__
wow64_win32_tdesc = tdesc;
#else
diff --git a/gdbserver/win32-low.h b/gdbserver/win32-low.h
index ff997df..daed16a 100644
--- a/gdbserver/win32-low.h
+++ b/gdbserver/win32-low.h
@@ -21,6 +21,7 @@
#include <windows.h>
#include "nat/windows-nat.h"
+#include "gdbsupport/osabi.h"
struct target_desc;
@@ -31,6 +32,12 @@ extern const struct target_desc *win32_tdesc;
extern const struct target_desc *wow64_win32_tdesc;
#endif
+#ifdef __CYGWIN__
+constexpr enum gdb_osabi WINDOWS_OSABI = GDB_OSABI_CYGWIN;
+#else
+constexpr enum gdb_osabi WINDOWS_OSABI = GDB_OSABI_WINDOWS;
+#endif
+
struct win32_target_ops
{
/* Architecture-specific setup. */