/* Intel 386 target-dependent stuff.
- Copyright (C) 1988-2019 Free Software Foundation, Inc.
+ Copyright (C) 1988-2020 Free Software Foundation, Inc.
This file is part of GDB.
#include "remote.h"
#include "i386-tdep.h"
#include "i387-tdep.h"
-#include "common/x86-xstate.h"
+#include "gdbsupport/x86-xstate.h"
#include "x86-tdep.h"
#include "record.h"
/* Check for `mov imm32, r32'. Note that there is an alternative
encoding for `mov m32, %eax'.
- ??? Should we handle SIB adressing here?
+ ??? Should we handle SIB addressing here?
??? Should we handle 16-bit operand-sizes here? */
/* `movl m32, %eax' */
/* Check for some special instructions that might be migrated by
GCC into the prologue and skip them. At this point in the
prologue, code should only touch the scratch registers %eax,
- %ecx and %edx, so while the number of posibilities is sheer,
+ %ecx and %edx, so while the number of possibilities is sheer,
it is limited.
Make sure we only skip these instructions if we later see the
call_dest = call_dest & 0xffffffffU;
s = lookup_minimal_symbol_by_pc (call_dest);
if (s.minsym != NULL
- && MSYMBOL_LINKAGE_NAME (s.minsym) != NULL
- && strcmp (MSYMBOL_LINKAGE_NAME (s.minsym), "__main") == 0)
+ && s.minsym->linkage_name () != NULL
+ && strcmp (s.minsym->linkage_name (), "__main") == 0)
pc += 5;
}
}
|| code == TYPE_CODE_UNION
|| code == TYPE_CODE_ARRAY)
&& !i386_reg_struct_return_p (gdbarch, type))
- /* Complex double and long double uses the struct return covention. */
+ /* Complex double and long double uses the struct return convention. */
|| (code == TYPE_CODE_COMPLEX && TYPE_LENGTH (type) == 16)
|| (code == TYPE_CODE_COMPLEX && TYPE_LENGTH (type) == 24)
/* 128-bit decimal float uses the struct return convention. */
read_memory_unsigned_integer (pc + 2, 4, byte_order);
struct minimal_symbol *indsym =
indirect ? lookup_minimal_symbol_by_pc (indirect).minsym : 0;
- const char *symname = indsym ? MSYMBOL_LINKAGE_NAME (indsym) : 0;
+ const char *symname = indsym ? indsym->linkage_name () : 0;
if (symname)
{
/* Implementation of 'gdbarch_stap_adjust_register', as defined in
gdbarch.h. */
-static void
+static std::string
i386_stap_adjust_register (struct gdbarch *gdbarch, struct stap_parse_info *p,
- std::string ®name, int regnum)
+ const std::string ®name, int regnum)
{
static const std::unordered_set<std::string> reg_assoc
= { "ax", "bx", "cx", "dx",
"si", "di", "bp", "sp" };
- if (register_size (gdbarch, regnum) >= TYPE_LENGTH (p->arg_type))
- {
- /* If we're dealing with a register whose size is greater or
- equal than the size specified by the "[-]N@" prefix, then we
- don't need to do anything. */
- return;
- }
+ /* If we are dealing with a register whose size is less than the size
+ specified by the "[-]N@" prefix, and it is one of the registers that
+ we know has an extended variant available, then use the extended
+ version of the register instead. */
+ if (register_size (gdbarch, regnum) < TYPE_LENGTH (p->arg_type)
+ && reg_assoc.find (regname) != reg_assoc.end ())
+ return "e" + regname;
- if (reg_assoc.find (regname) != reg_assoc.end ())
- {
- /* Use the extended version of the register. */
- regname = "e" + regname;
- }
+ /* Otherwise, just use the requested register. */
+ return regname;
}
\f
length LEN in bits. If non-NULL, NAME is the name of its type.
If no suitable type is found, return NULL. */
-const struct floatformat **
+static const struct floatformat **
i386_floatformat_for_type (struct gdbarch *gdbarch,
const char *name, int len)
{
size = (size > -1 ? size + 1 : size);
uiout->text (", size = ");
- uiout->field_fmt ("size", "%s", plongest (size));
+ uiout->field_string ("size", plongest (size));
uiout->text (", metadata = ");
uiout->field_core_addr ("metadata", gdbarch, bt_entry[3]);