Add `set print array-indexes' tests for C/C++ arrays
[binutils-gdb.git] / gdb / amd64-windows-tdep.c
index 320388b5a8794e505aeccd3cc9c5b769acfcf894..eca94f2ea7c6b0ff04f39a762ff663a3ead941ee 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2009-2020 Free Software Foundation, Inc.
+/* Copyright (C) 2009-2022 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -144,7 +144,7 @@ amd64_windows_passed_by_xmm_register (struct type *type)
 {
   return ((type->code () == TYPE_CODE_FLT
           || type->code () == TYPE_CODE_DECFLOAT)
-          && (TYPE_LENGTH (type) == 4 || TYPE_LENGTH (type) == 8));
+         && (TYPE_LENGTH (type) == 4 || TYPE_LENGTH (type) == 8));
 }
 
 /* Return non-zero iff an argument of the given TYPE should be passed
@@ -179,7 +179,7 @@ amd64_windows_adjust_args_passed_by_pointer (struct value **args,
     if (amd64_windows_passed_by_pointer (value_type (args[i])))
       {
        struct type *type = value_type (args[i]);
-       const gdb_byte *valbuf = value_contents (args[i]);
+       const gdb_byte *valbuf = value_contents (args[i]).data ();
        const int len = TYPE_LENGTH (type);
 
        /* Store a copy of that argument on the stack, aligned to
@@ -205,7 +205,7 @@ amd64_windows_store_arg_in_reg (struct regcache *regcache,
                                struct value *arg, int regno)
 {
   struct type *type = value_type (arg);
-  const gdb_byte *valbuf = value_contents (arg);
+  const gdb_byte *valbuf = value_contents (arg).data ();
   gdb_byte buf[8];
 
   gdb_assert (TYPE_LENGTH (type) <= 8);
@@ -268,7 +268,7 @@ amd64_windows_push_arguments (struct regcache *regcache, int nargs,
          else if (amd64_windows_passed_by_xmm_register (type))
            {
              amd64_windows_store_arg_in_reg
-               (regcache, args[i], AMD64_XMM0_REGNUM + reg_idx);
+               (regcache, args[i], AMD64_XMM0_REGNUM + reg_idx);
              /* In case of varargs, these parameters must also be
                 passed via the integer registers.  */
              amd64_windows_store_arg_in_reg
@@ -295,7 +295,7 @@ amd64_windows_push_arguments (struct regcache *regcache, int nargs,
   for (i = 0; i < num_stack_args; i++)
     {
       struct type *type = value_type (stack_args[i]);
-      const gdb_byte *valbuf = value_contents (stack_args[i]);
+      const gdb_byte *valbuf = value_contents (stack_args[i]).data ();
 
       write_memory (sp + element * 8, valbuf, TYPE_LENGTH (type));
       element += ((TYPE_LENGTH (type) + 7) / 8);
@@ -324,7 +324,7 @@ amd64_windows_push_dummy_call
   if (return_method == return_method_struct)
     {
       /* The "hidden" argument is passed throught the first argument
-         register.  */
+        register.  */
       const int arg_regnum = amd64_windows_dummy_call_integer_regs[0];
 
       store_unsigned_integer (buf, 8, byte_order, struct_addr);
@@ -367,11 +367,11 @@ amd64_windows_return_value (struct gdbarch *gdbarch, struct value *function,
       case TYPE_CODE_FLT:
        /* floats, and doubles are returned via XMM0.  */
        if (len == 4 || len == 8)
-          regnum = AMD64_XMM0_REGNUM;
-        break;
+         regnum = AMD64_XMM0_REGNUM;
+       break;
       case TYPE_CODE_ARRAY:
        /* __m128, __m128i and __m128d are returned via XMM0.  */
-       if (TYPE_VECTOR (type) && len == 16)
+       if (type->is_vector () && len == 16)
          {
            enum type_code code = TYPE_TARGET_TYPE (type)->code ();
            if (code == TYPE_CODE_INT || code == TYPE_CODE_FLT)
@@ -382,20 +382,20 @@ amd64_windows_return_value (struct gdbarch *gdbarch, struct value *function,
          }
        /* fall through */
       default:
-        /* All other values that are 1, 2, 4 or 8 bytes long are returned
-           via RAX.  */
-        if (len == 1 || len == 2 || len == 4 || len == 8)
-          regnum = AMD64_RAX_REGNUM;
+       /* All other values that are 1, 2, 4 or 8 bytes long are returned
+          via RAX.  */
+       if (len == 1 || len == 2 || len == 4 || len == 8)
+         regnum = AMD64_RAX_REGNUM;
        else if (len == 16 && type->code () == TYPE_CODE_INT)
          regnum = AMD64_XMM0_REGNUM;
-        break;
+       break;
     }
 
   if (regnum < 0)
     {
       /* RAX contains the address where the return value has been stored.  */
       if (readbuf)
-        {
+       {
          ULONGEST addr;
 
          regcache_raw_read_unsigned (regcache, AMD64_RAX_REGNUM, &addr);
@@ -429,17 +429,17 @@ amd64_skip_main_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
       gdb_byte buf[4];
 
       if (target_read_memory (pc + 1, buf, sizeof buf) == 0)
-       {
-         struct bound_minimal_symbol s;
-         CORE_ADDR call_dest;
+       {
+         struct bound_minimal_symbol s;
+         CORE_ADDR call_dest;
 
          call_dest = pc + 5 + extract_signed_integer (buf, 4, byte_order);
-         s = lookup_minimal_symbol_by_pc (call_dest);
-         if (s.minsym != NULL
-             && s.minsym->linkage_name () != NULL
-             && strcmp (s.minsym->linkage_name (), "__main") == 0)
-           pc += 5;
-       }
+         s = lookup_minimal_symbol_by_pc (call_dest);
+         if (s.minsym != NULL
+             && s.minsym->linkage_name () != NULL
+             && strcmp (s.minsym->linkage_name (), "__main") == 0)
+           pc += 5;
+       }
     }
 
   return pc;
@@ -756,14 +756,10 @@ amd64_windows_frame_decode_insns (struct frame_info *this_frame,
                              (gdb_byte *) &ex_ui, sizeof (ex_ui)) != 0)
        return;
 
-      if (frame_debug)
-       fprintf_unfiltered
-         (gdb_stdlog,
-          "amd64_windows_frame_decodes_insn: "
-          "%s: ver: %02x, plgsz: %02x, cnt: %02x, frame: %02x\n",
-          paddress (gdbarch, unwind_info),
-          ex_ui.Version_Flags, ex_ui.SizeOfPrologue,
-          ex_ui.CountOfCodes, ex_ui.FrameRegisterOffset);
+      frame_debug_printf ("%s: ver: %02x, plgsz: %02x, cnt: %02x, frame: %02x",
+                         paddress (gdbarch, unwind_info),
+                         ex_ui.Version_Flags, ex_ui.SizeOfPrologue,
+                         ex_ui.CountOfCodes, ex_ui.FrameRegisterOffset);
 
       /* Check version.  */
       if (PEX64_UWI_VERSION (ex_ui.Version_Flags) != 1
@@ -801,10 +797,9 @@ amd64_windows_frame_decode_insns (struct frame_info *this_frame,
          get_frame_register (this_frame, frreg, buf);
          save_addr = extract_unsigned_integer (buf, 8, byte_order);
 
-         if (frame_debug)
-           fprintf_unfiltered (gdb_stdlog, "   frame_reg=%s, val=%s\n",
-                               gdbarch_register_name (gdbarch, frreg),
-                               paddress (gdbarch, save_addr));
+         frame_debug_printf ("   frame_reg=%s, val=%s",
+                             gdbarch_register_name (gdbarch, frreg),
+                             paddress (gdbarch, save_addr));
        }
 
       /* Read opcodes.  */
@@ -835,10 +830,8 @@ amd64_windows_frame_decode_insns (struct frame_info *this_frame,
             prologue has been fully executed.  */
          if (cache->pc >= start + p[0] || cache->pc < start)
            {
-             if (frame_debug)
-               fprintf_unfiltered
-                 (gdb_stdlog, "   op #%u: off=0x%02x, insn=0x%02x\n",
-                  (unsigned) (p - insns), p[0], p[1]);
+             frame_debug_printf ("   op #%u: off=0x%02x, insn=0x%02x",
+                                 (unsigned) (p - insns), p[0], p[1]);
 
              /* If there is no frame registers defined, the current value of
                 rsp is used instead.  */
@@ -912,11 +905,11 @@ amd64_windows_frame_decode_insns (struct frame_info *this_frame,
                }
 
              /* Display address where the register was saved.  */
-             if (frame_debug && reg >= 0)
-               fprintf_unfiltered
-                 (gdb_stdlog, "     [reg %s at %s]\n",
-                  gdbarch_register_name (gdbarch, reg),
-                  paddress (gdbarch, cache->prev_reg_addr[reg]));
+             if (reg >= 0)
+               frame_debug_printf ("     [reg %s at %s]",
+                                   gdbarch_register_name (gdbarch, reg),
+                                   paddress (gdbarch,
+                                             cache->prev_reg_addr[reg]));
            }
 
          /* Adjust with the length of the opcode.  */
@@ -978,14 +971,11 @@ amd64_windows_frame_decode_insns (struct frame_info *this_frame,
          unwind_info =
            extract_unsigned_integer (d.rva_UnwindData, 4, byte_order);
 
-         if (frame_debug)
-           fprintf_unfiltered
-             (gdb_stdlog,
-              "amd64_windows_frame_decodes_insn (next in chain):"
-              " unwind_data=%s, start_rva=%s, end_rva=%s\n",
-              paddress (gdbarch, unwind_info),
-              paddress (gdbarch, cache->start_rva),
-              paddress (gdbarch, cache->end_rva));
+         frame_debug_printf ("next in chain: unwind_data=%s, start_rva=%s, "
+                             "end_rva=%s",
+                             paddress (gdbarch, unwind_info),
+                             paddress (gdbarch, cache->start_rva),
+                             paddress (gdbarch, cache->end_rva));
        }
 
       /* Allow the user to break this loop.  */
@@ -996,10 +986,9 @@ amd64_windows_frame_decode_insns (struct frame_info *this_frame,
     cache->prev_rip_addr = cur_sp;
   cache->prev_sp = cur_sp + 8;
 
-  if (frame_debug)
-    fprintf_unfiltered (gdb_stdlog, "   prev_sp: %s, prev_pc @%s\n",
-                       paddress (gdbarch, cache->prev_sp),
-                       paddress (gdbarch, cache->prev_rip_addr));
+  frame_debug_printf ("   prev_sp: %s, prev_pc @%s",
+                     paddress (gdbarch, cache->prev_sp),
+                     paddress (gdbarch, cache->prev_rip_addr));
 }
 
 /* Find SEH unwind info for PC, returning 0 on success.
@@ -1073,11 +1062,9 @@ amd64_windows_find_unwind_info (struct gdbarch *gdbarch, CORE_ADDR pc,
        break;
     }
 
-  if (frame_debug)
-    fprintf_unfiltered
-      (gdb_stdlog,
-       "amd64_windows_find_unwind_data:  image_base=%s, unwind_data=%s\n",
-       paddress (gdbarch, base), paddress (gdbarch, *unwind_info));
+  frame_debug_printf ("image_base=%s, unwind_data=%s",
+                     paddress (gdbarch, base),
+                     paddress (gdbarch, *unwind_info));
 
   return 0;
 }
@@ -1139,11 +1126,9 @@ amd64_windows_frame_prev_register (struct frame_info *this_frame,
     amd64_windows_frame_cache (this_frame, this_cache);
   CORE_ADDR prev;
 
-  if (frame_debug)
-    fprintf_unfiltered (gdb_stdlog,
-                       "amd64_windows_frame_prev_register %s for sp=%s\n",
-                       gdbarch_register_name (gdbarch, regnum),
-                       paddress (gdbarch, cache->prev_sp));
+  frame_debug_printf ("%s for sp=%s",
+                     gdbarch_register_name (gdbarch, regnum),
+                     paddress (gdbarch, cache->prev_sp));
 
   if (regnum >= AMD64_XMM0_REGNUM && regnum <= AMD64_XMM0_REGNUM + 15)
       prev = cache->prev_xmm_addr[regnum - AMD64_XMM0_REGNUM];
@@ -1160,8 +1145,8 @@ amd64_windows_frame_prev_register (struct frame_info *this_frame,
   else
     prev = 0;
 
-  if (prev && frame_debug)
-    fprintf_unfiltered (gdb_stdlog, "  -> at %s\n", paddress (gdbarch, prev));
+  if (prev != 0)
+    frame_debug_printf ("  -> at %s", paddress (gdbarch, prev));
 
   if (prev)
     {
@@ -1193,6 +1178,7 @@ amd64_windows_frame_this_id (struct frame_info *this_frame, void **this_cache,
 
 static const struct frame_unwind amd64_windows_frame_unwind =
 {
+  "amd64 windows",
   NORMAL_FRAME,
   default_frame_unwind_stop_reason,
   &amd64_windows_frame_this_id,
@@ -1291,7 +1277,7 @@ amd64_windows_auto_wide_charset (void)
 static void
 amd64_windows_init_abi_common (gdbarch_info info, struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  i386_gdbarch_tdep *tdep = (i386_gdbarch_tdep *) gdbarch_tdep (gdbarch);
 
   /* The dwarf2 unwinder (appended very early by i386_gdbarch_init) is
      preferred over the SEH one.  The reasons are:
@@ -1389,9 +1375,9 @@ void
 _initialize_amd64_windows_tdep ()
 {
   gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x86_64, GDB_OSABI_WINDOWS,
-                          amd64_windows_init_abi);
+                         amd64_windows_init_abi);
   gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x86_64, GDB_OSABI_CYGWIN,
-                          amd64_cygwin_init_abi);
+                         amd64_cygwin_init_abi);
 
   gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_coff_flavour,
                                  amd64_windows_osabi_sniffer);