diff options
-rwxr-xr-x | gdb/regformats/regdat.sh | 14 | ||||
-rw-r--r-- | gdbserver/Makefile.in | 9 | ||||
-rw-r--r-- | gdbserver/linux-aarch32-tdesc.cc | 2 | ||||
-rw-r--r-- | gdbserver/linux-aarch64-tdesc.cc | 3 | ||||
-rw-r--r-- | gdbserver/linux-arc-low.cc | 2 | ||||
-rw-r--r-- | gdbserver/linux-arm-tdesc.cc | 2 | ||||
-rw-r--r-- | gdbserver/linux-csky-low.cc | 2 | ||||
-rw-r--r-- | gdbserver/linux-loongarch-low.cc | 2 | ||||
-rw-r--r-- | gdbserver/linux-riscv-low.cc | 2 | ||||
-rw-r--r-- | gdbserver/linux-x86-tdesc.cc | 15 | ||||
-rw-r--r-- | gdbserver/netbsd-aarch64-low.cc | 2 | ||||
-rw-r--r-- | gdbserver/netbsd-amd64-low.cc | 2 | ||||
-rw-r--r-- | gdbserver/netbsd-i386-low.cc | 2 | ||||
-rw-r--r-- | gdbserver/tdesc.cc | 5 | ||||
-rw-r--r-- | gdbserver/tdesc.h | 6 | ||||
-rw-r--r-- | gdbserver/win32-i386-low.cc | 4 | ||||
-rw-r--r-- | gdbserver/win32-low.h | 7 |
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. */ |