X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Farch-utils.c;h=2129c3b2c388670b6f52e85ba62a1370b9a1dad0;hb=708e4b9f189a86d542519b35e36e3f087b36b524;hp=6bdcc0126d5c6f08f366e5f95460d348e28cd07d;hpb=c2508e905f956c5a5e0d2a7fff58b4c746180237;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/arch-utils.c b/gdb/arch-utils.c index 6bdcc0126d..2129c3b2c3 100644 --- a/gdb/arch-utils.c +++ b/gdb/arch-utils.c @@ -1,6 +1,6 @@ /* Dynamic architecture support for GDB, the GNU debugger. - Copyright (C) 1998-2017 Free Software Foundation, Inc. + Copyright (C) 1998-2019 Free Software Foundation, Inc. This file is part of GDB. @@ -20,7 +20,6 @@ #include "defs.h" #include "arch-utils.h" -#include "buildsym.h" #include "gdbcmd.h" #include "inferior.h" /* enum CALL_DUMMY_LOCATION et al. */ #include "infrun.h" @@ -33,7 +32,7 @@ #include "language.h" #include "symtab.h" -#include "version.h" +#include "gdbsupport/version.h" #include "floatformat.h" @@ -70,7 +69,7 @@ legacy_register_sim_regno (struct gdbarch *gdbarch, int regnum) gdb_assert (regnum >= 0 && regnum < gdbarch_num_regs (gdbarch)); /* NOTE: cagney/2002-05-13: The old code did it this way and it is suspected that some GDB/SIM combinations may rely on this - behavour. The default should be one2one_register_sim_regno + behaviour. The default should be one2one_register_sim_regno (below). */ if (gdbarch_register_name (gdbarch, regnum) != NULL && gdbarch_register_name (gdbarch, regnum)[0] != '\0') @@ -332,7 +331,7 @@ show_endian (struct ui_file *file, int from_tty, struct cmd_list_element *c, } static void -set_endian (char *ignore_args, int from_tty, struct cmd_list_element *c) +set_endian (const char *ignore_args, int from_tty, struct cmd_list_element *c) { struct gdbarch_info info; @@ -374,7 +373,7 @@ set_endian (char *ignore_args, int from_tty, struct cmd_list_element *c) SELECTED may be NULL, in which case we return the architecture associated with TARGET_DESC. If SELECTED specifies a variant - of the architecture associtated with TARGET_DESC, return the + of the architecture associated with TARGET_DESC, return the more specific of the two. If SELECTED is a different architecture, but it is accepted as @@ -490,7 +489,8 @@ show_architecture (struct ui_file *file, int from_tty, argument. */ static void -set_architecture (char *ignore_args, int from_tty, struct cmd_list_element *c) +set_architecture (const char *ignore_args, + int from_tty, struct cmd_list_element *c) { struct gdbarch_info info; @@ -726,7 +726,6 @@ gdbarch_info_init (struct gdbarch_info *info) memset (info, 0, sizeof (struct gdbarch_info)); info->byte_order = BFD_ENDIAN_UNKNOWN; info->byte_order_for_code = info->byte_order; - info->osabi = GDB_OSABI_UNINITIALIZED; } /* Similar to init, but this time fill in the blanks. Information is @@ -768,12 +767,15 @@ gdbarch_info_fill (struct gdbarch_info *info) if (info->byte_order == BFD_ENDIAN_UNKNOWN) info->byte_order = default_byte_order; info->byte_order_for_code = info->byte_order; + /* Wire the default to the last selected byte order. */ + default_byte_order = info->byte_order; /* "(gdb) set osabi ...". Handled by gdbarch_lookup_osabi. */ /* From the manual override, or from file. */ - if (info->osabi == GDB_OSABI_UNINITIALIZED) + if (info->osabi == GDB_OSABI_UNKNOWN) info->osabi = gdbarch_lookup_osabi (info->abfd); /* From the target. */ + if (info->osabi == GDB_OSABI_UNKNOWN && info->target_desc != NULL) info->osabi = tdesc_osabi (info->target_desc); /* From the configured default. */ @@ -781,6 +783,9 @@ gdbarch_info_fill (struct gdbarch_info *info) if (info->osabi == GDB_OSABI_UNKNOWN) info->osabi = GDB_OSABI_DEFAULT; #endif + /* If we still don't know which osabi to pick, pick none. */ + if (info->osabi == GDB_OSABI_UNKNOWN) + info->osabi = GDB_OSABI_NONE; /* Must have at least filled in the architecture. */ gdb_assert (info->bfd_arch_info != NULL); @@ -812,12 +817,12 @@ default_has_shared_address_space (struct gdbarch *gdbarch) int default_fast_tracepoint_valid_at (struct gdbarch *gdbarch, CORE_ADDR addr, - char **msg) + std::string *msg) { /* We don't know if maybe the target has some way to do fast tracepoints that doesn't need gdbarch, so always say yes. */ if (msg) - *msg = NULL; + msg->clear (); return 1; } @@ -874,7 +879,7 @@ int default_insn_is_jump (struct gdbarch *gdbarch, CORE_ADDR addr) void default_skip_permanent_breakpoint (struct regcache *regcache) { - struct gdbarch *gdbarch = get_regcache_arch (regcache); + struct gdbarch *gdbarch = regcache->arch (); CORE_ADDR current_pc = regcache_read_pc (regcache); int bp_len; @@ -898,11 +903,12 @@ default_infcall_munmap (CORE_ADDR addr, CORE_ADDR size) /* -mcmodel=large is used so that no GOT (Global Offset Table) is needed to be created in inferior memory by GDB (normally it is set by ld.so). */ -char * +std::string default_gcc_target_options (struct gdbarch *gdbarch) { - return xstrprintf ("-m%d%s", gdbarch_ptr_bit (gdbarch), - gdbarch_ptr_bit (gdbarch) == 64 ? " -mcmodel=large" : ""); + return string_printf ("-m%d%s", gdbarch_ptr_bit (gdbarch), + (gdbarch_ptr_bit (gdbarch) == 64 + ? " -mcmodel=large" : "")); } /* gdbarch gnu_triplet_regexp method. */ @@ -942,7 +948,7 @@ default_guess_tracepoint_registers (struct gdbarch *gdbarch, regs = (gdb_byte *) alloca (register_size (gdbarch, pc_regno)); store_unsigned_integer (regs, register_size (gdbarch, pc_regno), gdbarch_byte_order (gdbarch), addr); - regcache_raw_supply (regcache, pc_regno, regs); + regcache->raw_supply (pc_regno, regs); } int @@ -964,17 +970,40 @@ gdbarch_skip_prologue_noexcept (gdbarch *gdbarch, CORE_ADDR pc) noexcept { CORE_ADDR new_pc = pc; - TRY + try { new_pc = gdbarch_skip_prologue (gdbarch, pc); } - CATCH (ex, RETURN_MASK_ALL) + catch (const gdb_exception &ex) {} - END_CATCH return new_pc; } +/* See arch-utils.h. */ + +bool +default_in_indirect_branch_thunk (gdbarch *gdbarch, CORE_ADDR pc) +{ + return false; +} + +/* See arch-utils.h. */ + +ULONGEST +default_type_align (struct gdbarch *gdbarch, struct type *type) +{ + return 0; +} + +/* See arch-utils.h. */ + +std::string +default_get_pc_address_flags (frame_info *frame, CORE_ADDR pc) +{ + return ""; +} + void _initialize_gdbarch_utils (void) {