}
-exec > new-$2
+exec > new-$3
copyright $1
echo '#include "regdef.h"'
echo '#include "tdesc.h"'
xmlosabi=x
expedite=x
feature=x
+osabi=unknown
exec < $1
while do_read
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
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
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;
}
# close things off
exec 1>&2
-mv -- "new-$2" "$2"
+mv -- "new-$3" "$3"
MAKEOVERRIDES =
regdat_sh = $(srcdir)/../gdb/regformats/regdat.sh
+osabi_def = $(srcdir)/../gdbsupport/osabi.def
UST_CFLAGS = \
$(ustinc) \
# 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.
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;
}
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;
}
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 ();
}
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;
}
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 ());
}
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 ();
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 ());
}
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);
}
= 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;
}
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;
}
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;
}
void
init_target_desc (struct target_desc *tdesc,
- const char **expedite_regs)
+ const char **expedite_regs,
+ enum gdb_osabi osabi)
{
int offset = 0;
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
}
#define GDBSERVER_TDESC_H
#include "gdbsupport/tdesc.h"
+#include "gdbsupport/osabi.h"
#include "regdef.h"
#include <vector>
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. */
#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
#include <windows.h>
#include "nat/windows-nat.h"
+#include "gdbsupport/osabi.h"
struct target_desc;
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. */