gdb/i386-darwin-tdep.c - gdb

Global variables defined

Functions defined

Source code

  1. /* Darwin support for GDB, the GNU debugger.
  2.    Copyright (C) 1997-2015 Free Software Foundation, Inc.

  3.    Contributed by Apple Computer, Inc.

  4.    This file is part of GDB.

  5.    This program is free software; you can redistribute it and/or modify
  6.    it under the terms of the GNU General Public License as published by
  7.    the Free Software Foundation; either version 3 of the License, or
  8.    (at your option) any later version.

  9.    This program is distributed in the hope that it will be useful,
  10.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.    GNU General Public License for more details.

  13.    You should have received a copy of the GNU General Public License
  14.    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */

  15. #include "defs.h"
  16. #include "frame.h"
  17. #include "inferior.h"
  18. #include "gdbcore.h"
  19. #include "target.h"
  20. #include "floatformat.h"
  21. #include "symtab.h"
  22. #include "regcache.h"
  23. #include "libbfd.h"
  24. #include "objfiles.h"

  25. #include "i387-tdep.h"
  26. #include "i386-tdep.h"
  27. #include "osabi.h"
  28. #include "ui-out.h"
  29. #include "i386-darwin-tdep.h"
  30. #include "solib.h"
  31. #include "solib-darwin.h"
  32. #include "dwarf2-frame.h"

  33. /* Offsets into the struct i386_thread_state where we'll find the saved regs.
  34.    From <mach/i386/thread_status.h> and i386-tdep.h.  */
  35. int i386_darwin_thread_state_reg_offset[] =
  36. {
  37.    0 * 4,   /* EAX */
  38.    2 * 4,   /* ECX */
  39.    3 * 4,   /* EDX */
  40.    1 * 4,   /* EBX */
  41.    7 * 4,   /* ESP */
  42.    6 * 4,   /* EBP */
  43.    5 * 4,   /* ESI */
  44.    4 * 4,   /* EDI */
  45.   10 * 4,   /* EIP */
  46.    9 * 4,   /* EFLAGS */
  47.   11 * 4,   /* CS */
  48.    8 * 4,   /* SS */
  49.   12 * 4,   /* DS */
  50.   13 * 4,   /* ES */
  51.   14 * 4,   /* FS */
  52.   15 * 4    /* GS */
  53. };

  54. const int i386_darwin_thread_state_num_regs =
  55.   ARRAY_SIZE (i386_darwin_thread_state_reg_offset);

  56. /* Assuming THIS_FRAME is a Darwin sigtramp routine, return the
  57.    address of the associated sigcontext structure.  */

  58. static CORE_ADDR
  59. i386_darwin_sigcontext_addr (struct frame_info *this_frame)
  60. {
  61.   struct gdbarch *gdbarch = get_frame_arch (this_frame);
  62.   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
  63.   CORE_ADDR bp;
  64.   CORE_ADDR si;
  65.   gdb_byte buf[4];

  66.   get_frame_register (this_frame, I386_EBP_REGNUM, buf);
  67.   bp = extract_unsigned_integer (buf, 4, byte_order);

  68.   /* A pointer to the ucontext is passed as the fourth argument
  69.      to the signal handler.  */
  70.   read_memory (bp + 24, buf, 4);
  71.   si = extract_unsigned_integer (buf, 4, byte_order);

  72.   /* The pointer to mcontext is at offset 28.  */
  73.   read_memory (si + 28, buf, 4);

  74.   /* First register (eax) is at offset 12.  */
  75.   return extract_unsigned_integer (buf, 4, byte_order) + 12;
  76. }

  77. /* Return true if the PC of THIS_FRAME is in a signal trampoline which
  78.    may have DWARF-2 CFI.

  79.    On Darwin, signal trampolines have DWARF-2 CFI but it has only one FDE
  80.    that covers only the indirect call to the user handler.
  81.    Without this function, the frame is recognized as a normal frame which is
  82.    not expected.  */

  83. int
  84. darwin_dwarf_signal_frame_p (struct gdbarch *gdbarch,
  85.                              struct frame_info *this_frame)
  86. {
  87.   return i386_sigtramp_p (this_frame);
  88. }

  89. /* Check wether TYPE is a 128-bit vector (__m128, __m128d or __m128i).  */

  90. static int
  91. i386_m128_p (struct type *type)
  92. {
  93.   return (TYPE_CODE (type) == TYPE_CODE_ARRAY && TYPE_VECTOR (type)
  94.           && TYPE_LENGTH (type) == 16);
  95. }

  96. /* Return the alignment for TYPE when passed as an argument.  */

  97. static int
  98. i386_darwin_arg_type_alignment (struct type *type)
  99. {
  100.   type = check_typedef (type);
  101.   /* According to Mac OS X ABI document (passing arguments):
  102.      6.  The caller places 64-bit vectors (__m64) on the parameter area,
  103.          aligned to 8-byte boundaries.
  104.      7.  [...]  The caller aligns 128-bit vectors in the parameter area to
  105.          16-byte boundaries.  */
  106.   if (TYPE_CODE (type) == TYPE_CODE_ARRAY && TYPE_VECTOR (type))
  107.     return TYPE_LENGTH (type);
  108.   /* 4.  The caller places all the fields of structures (or unions) with no
  109.          vector elements in the parameter area.  These structures are 4-byte
  110.          aligned.
  111.      5.  The caller places structures with vector elements on the stack,
  112.          16-byte aligned.  */
  113.   if (TYPE_CODE (type) == TYPE_CODE_STRUCT
  114.       || TYPE_CODE (type) == TYPE_CODE_UNION)
  115.     {
  116.       int i;
  117.       int res = 4;
  118.       for (i = 0; i < TYPE_NFIELDS (type); i++)
  119.         res = max (res,
  120.                    i386_darwin_arg_type_alignment (TYPE_FIELD_TYPE (type, i)));
  121.       return res;
  122.     }
  123.   /* 2.  The caller aligns nonvector arguments to 4-byte boundaries.  */
  124.   return 4;
  125. }

  126. static CORE_ADDR
  127. i386_darwin_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
  128.                              struct regcache *regcache, CORE_ADDR bp_addr,
  129.                              int nargs, struct value **args, CORE_ADDR sp,
  130.                              int struct_return, CORE_ADDR struct_addr)
  131. {
  132.   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
  133.   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
  134.   gdb_byte buf[4];
  135.   int i;
  136.   int write_pass;

  137.   /* Determine the total space required for arguments and struct
  138.      return address in a first pass, then push arguments in a second pass.  */

  139.   for (write_pass = 0; write_pass < 2; write_pass++)
  140.     {
  141.       int args_space = 0;
  142.       int num_m128 = 0;

  143.       if (struct_return)
  144.         {
  145.           if (write_pass)
  146.             {
  147.               /* Push value address.  */
  148.               store_unsigned_integer (buf, 4, byte_order, struct_addr);
  149.               write_memory (sp, buf, 4);
  150.             }
  151.           args_space += 4;
  152.         }

  153.       for (i = 0; i < nargs; i++)
  154.         {
  155.           struct type *arg_type = value_enclosing_type (args[i]);

  156.           if (i386_m128_p (arg_type) && num_m128 < 4)
  157.             {
  158.               if (write_pass)
  159.                 {
  160.                   const gdb_byte *val = value_contents_all (args[i]);
  161.                   regcache_raw_write
  162.                     (regcache, I387_MM0_REGNUM(tdep) + num_m128, val);
  163.                 }
  164.               num_m128++;
  165.             }
  166.           else
  167.             {
  168.               args_space = align_up (args_space,
  169.                                      i386_darwin_arg_type_alignment (arg_type));
  170.               if (write_pass)
  171.                 write_memory (sp + args_space,
  172.                               value_contents_all (args[i]),
  173.                               TYPE_LENGTH (arg_type));

  174.               /* The System V ABI says that:

  175.                  "An argument's size is increased, if necessary, to make it a
  176.                  multiple of [32-bit] words.  This may require tail padding,
  177.                  depending on the size of the argument."

  178.                  This makes sure the stack stays word-aligned.  */
  179.               args_space += align_up (TYPE_LENGTH (arg_type), 4);
  180.             }
  181.         }

  182.       /* Darwin i386 ABI:
  183.          1.  The caller ensures that the stack is 16-byte aligned at the point
  184.              of the function call.  */
  185.       if (!write_pass)
  186.         sp = align_down (sp - args_space, 16);
  187.     }

  188.   /* Store return address.  */
  189.   sp -= 4;
  190.   store_unsigned_integer (buf, 4, byte_order, bp_addr);
  191.   write_memory (sp, buf, 4);

  192.   /* Finally, update the stack pointer...  */
  193.   store_unsigned_integer (buf, 4, byte_order, sp);
  194.   regcache_cooked_write (regcache, I386_ESP_REGNUM, buf);

  195.   /* ...and fake a frame pointer.  */
  196.   regcache_cooked_write (regcache, I386_EBP_REGNUM, buf);

  197.   /* MarkK wrote: This "+ 8" is all over the place:
  198.      (i386_frame_this_id, i386_sigtramp_frame_this_id,
  199.      i386_dummy_id).  It's there, since all frame unwinders for
  200.      a given target have to agree (within a certain margin) on the
  201.      definition of the stack address of a frame.  Otherwise frame id
  202.      comparison might not work correctly.  Since DWARF2/GCC uses the
  203.      stack address *before* the function call as a frame's CFA.  On
  204.      the i386, when %ebp is used as a frame pointer, the offset
  205.      between the contents %ebp and the CFA as defined by GCC.  */
  206.   return sp + 8;
  207. }

  208. static void
  209. i386_darwin_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
  210. {
  211.   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);

  212.   /* We support the SSE registers.  */
  213.   tdep->num_xmm_regs = I386_NUM_XREGS - 1;
  214.   set_gdbarch_num_regs (gdbarch, I386_SSE_NUM_REGS);

  215.   dwarf2_frame_set_signal_frame_p (gdbarch, darwin_dwarf_signal_frame_p);
  216.   set_gdbarch_push_dummy_call (gdbarch, i386_darwin_push_dummy_call);

  217.   tdep->struct_return = reg_struct_return;

  218.   tdep->sigtramp_p = i386_sigtramp_p;
  219.   tdep->sigcontext_addr = i386_darwin_sigcontext_addr;
  220.   tdep->sc_reg_offset = i386_darwin_thread_state_reg_offset;
  221.   tdep->sc_num_regs = i386_darwin_thread_state_num_regs;

  222.   tdep->jb_pc_offset = 48;

  223.   /* Although the i387 extended floating-point has only 80 significant
  224.      bits, a `long double' actually takes up 128, probably to enforce
  225.      alignment.  */
  226.   set_gdbarch_long_double_bit (gdbarch, 128);

  227.   set_solib_ops (gdbarch, &darwin_so_ops);
  228. }

  229. static enum gdb_osabi
  230. i386_mach_o_osabi_sniffer (bfd *abfd)
  231. {
  232.   if (!bfd_check_format (abfd, bfd_object))
  233.     return GDB_OSABI_UNKNOWN;

  234.   if (bfd_get_arch (abfd) == bfd_arch_i386)
  235.     return GDB_OSABI_DARWIN;

  236.   return GDB_OSABI_UNKNOWN;
  237. }

  238. /* -Wmissing-prototypes */
  239. extern initialize_file_ftype _initialize_i386_darwin_tdep;

  240. void
  241. _initialize_i386_darwin_tdep (void)
  242. {
  243.   gdbarch_register_osabi_sniffer (bfd_arch_unknown, bfd_target_mach_o_flavour,
  244.                                   i386_mach_o_osabi_sniffer);

  245.   gdbarch_register_osabi (bfd_arch_i386, bfd_mach_i386_i386,
  246.                           GDB_OSABI_DARWIN, i386_darwin_init_abi);
  247. }