/* Darwin support for GDB, the GNU debugger.
- Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2008
- Free Software Foundation, Inc.
+ Copyright (C) 1997-2017 Free Software Foundation, Inc.
Contributed by Apple Computer, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
+ the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
/* The name of the ppc_thread_state structure, and the names of its
members, have been changed for Unix conformance reasons. The easiest
#include "gdbcmd.h"
#include "inferior.h"
-#include <sys/param.h>
#include <sys/sysctl.h>
#include "darwin-nat.h"
#define CHECK_ARGS(what, args) do { \
if ((NULL == args) || ((args[0] != '0') && (args[1] != 'x'))) \
- error("%s must be specified with 0x...", what); \
+ error(_("%s must be specified with 0x..."), what); \
} while (0)
#define PRINT_FIELD(structure, field) \
{
if (ptid_equal (inferior_ptid, null_ptid))
printf_unfiltered (_("No inferior running\n"));
- return current_inferior ()->private->task;
+ return current_inferior ()->priv->task;
}
if (strcmp (args, "gdb") == 0)
return mach_task_self ();
{
struct inferior *inf = current_inferior ();
- if (port == inf->private->task)
+ if (port == inf->priv->task)
printf_unfiltered (_(" inferior-task"));
- else if (port == inf->private->notify_port)
+ else if (port == inf->priv->notify_port)
printf_unfiltered (_(" inferior-notify"));
else
{
int k;
darwin_thread_t *t;
- for (k = 0; k < inf->private->exception_info.count; k++)
- if (port == inf->private->exception_info.ports[k])
+ for (k = 0; k < inf->priv->exception_info.count; k++)
+ if (port == inf->priv->exception_info.ports[k])
{
printf_unfiltered (_(" inferior-excp-port"));
break;
}
- if (inf->private->threads)
+ if (inf->priv->threads)
{
for (k = 0;
VEC_iterate(darwin_thread_t,
- inf->private->threads, k, t);
+ inf->priv->threads, k, t);
k++)
if (port == t->gdb_port)
{
printf_unfiltered (_(" inferior-thread for 0x%x"),
- inf->private->task);
+ inf->priv->task);
break;
}
}
}
-void
+static void
darwin_debug_port_info (task_t task, mach_port_t port)
{
kern_return_t kret;
address = prev_address + prev_size;
- /* Check to see if address space has wrapped around. */
+ /* Check to see if address space has wrapped around. */
if (address == 0)
print = done = 1;
if (print)
{
printf_filtered (_("%s-%s %s/%s %s %s %s"),
- paddr(prev_address),
- paddr(prev_address + prev_size),
+ paddress (target_gdbarch (), prev_address),
+ paddress (target_gdbarch (), prev_address + prev_size),
unparse_protection (prev_info.protection),
unparse_protection (prev_info.max_protection),
unparse_inheritance (prev_info.inheritance),
vm_region_submap_short_info_data_64_t r_info;
kern_return_t kret;
int ret;
- struct cleanup *table_chain;
+ struct ui_out *uiout = current_uiout;
- table_chain = make_cleanup_ui_out_table_begin_end (uiout, 9, -1, "regions");
+ ui_out_emit_table table_emitter (uiout, 9, -1, "regions");
- if (gdbarch_addr_bit (current_gdbarch) <= 32)
+ if (gdbarch_addr_bit (target_gdbarch ()) <= 32)
{
- ui_out_table_header (uiout, 10, ui_left, "start", "Start");
- ui_out_table_header (uiout, 10, ui_left, "end", "End");
+ uiout->table_header (10, ui_left, "start", "Start");
+ uiout->table_header (10, ui_left, "end", "End");
}
else
{
- ui_out_table_header (uiout, 18, ui_left, "start", "Start");
- ui_out_table_header (uiout, 18, ui_left, "end", "End");
+ uiout->table_header (18, ui_left, "start", "Start");
+ uiout->table_header (18, ui_left, "end", "End");
}
- ui_out_table_header (uiout, 3, ui_left, "min-prot", "Min");
- ui_out_table_header (uiout, 3, ui_left, "max-prot", "Max");
- ui_out_table_header (uiout, 5, ui_left, "inheritence", "Inh");
- ui_out_table_header (uiout, 9, ui_left, "share-mode", "Shr");
- ui_out_table_header (uiout, 1, ui_left, "depth", "D");
- ui_out_table_header (uiout, 3, ui_left, "submap", "Sm");
- ui_out_table_header (uiout, 0, ui_noalign, "tag", "Tag");
+ uiout->table_header (3, ui_left, "min-prot", "Min");
+ uiout->table_header (3, ui_left, "max-prot", "Max");
+ uiout->table_header (5, ui_left, "inheritence", "Inh");
+ uiout->table_header (9, ui_left, "share-mode", "Shr");
+ uiout->table_header (1, ui_left, "depth", "D");
+ uiout->table_header (3, ui_left, "submap", "Sm");
+ uiout->table_header (0, ui_noalign, "tag", "Tag");
- ui_out_table_body (uiout);
+ uiout->table_body ();
r_start = 0;
r_depth = 0;
while (1)
{
const char *tag;
- struct cleanup *row_chain;
r_info_size = VM_REGION_SUBMAP_SHORT_INFO_COUNT_64;
r_size = -1;
&r_info_size);
if (kret != KERN_SUCCESS)
break;
- row_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "regions-row");
-
- ui_out_field_core_addr (uiout, "start", r_start);
- ui_out_field_core_addr (uiout, "end", r_start + r_size);
- ui_out_field_string (uiout, "min-prot",
- unparse_protection (r_info.protection));
- ui_out_field_string (uiout, "max-prot",
- unparse_protection (r_info.max_protection));
- ui_out_field_string (uiout, "inheritence",
- unparse_inheritance (r_info.inheritance));
- ui_out_field_string (uiout, "share-mode",
- unparse_share_mode (r_info.share_mode));
- ui_out_field_int (uiout, "depth", r_depth);
- ui_out_field_string (uiout, "submap",
- r_info.is_submap ? _("sm ") : _("obj"));
- tag = unparse_user_tag (r_info.user_tag);
- if (tag)
- ui_out_field_string (uiout, "tag", tag);
- else
- ui_out_field_int (uiout, "tag", r_info.user_tag);
- do_cleanups (row_chain);
-
- if (!ui_out_is_mi_like_p (uiout))
- ui_out_text (uiout, "\n");
+ {
+ ui_out_emit_tuple tuple_emitter (uiout, "regions-row");
+
+ uiout->field_core_addr ("start", target_gdbarch (), r_start);
+ uiout->field_core_addr ("end", target_gdbarch (), r_start + r_size);
+ uiout->field_string ("min-prot",
+ unparse_protection (r_info.protection));
+ uiout->field_string ("max-prot",
+ unparse_protection (r_info.max_protection));
+ uiout->field_string ("inheritence",
+ unparse_inheritance (r_info.inheritance));
+ uiout->field_string ("share-mode",
+ unparse_share_mode (r_info.share_mode));
+ uiout->field_int ("depth", r_depth);
+ uiout->field_string ("submap",
+ r_info.is_submap ? _("sm ") : _("obj"));
+ tag = unparse_user_tag (r_info.user_tag);
+ if (tag)
+ uiout->field_string ("tag", tag);
+ else
+ uiout->field_int ("tag", r_info.user_tag);
+ }
+
+ if (!uiout->is_mi_like_p ())
+ uiout->text ("\n");
if (r_info.is_submap)
r_depth++;
else
r_start += r_size;
}
- do_cleanups (table_chain);
-
}
static void
info_mach_region_command (char *exp, int from_tty)
{
- struct expression *expr;
struct value *val;
mach_vm_address_t address;
struct inferior *inf;
- expr = parse_expression (exp);
- val = evaluate_expression (expr);
- if (TYPE_CODE (value_type (val)) == TYPE_CODE_REF)
+ expression_up expr = parse_expression (exp);
+ val = evaluate_expression (expr.get ());
+ if (TYPE_IS_REFERENCE (value_type (val)))
{
val = value_ind (val);
}
error (_("Inferior not available"));
inf = current_inferior ();
- darwin_debug_region (inf->private->task, address);
+ darwin_debug_region (inf->priv->task, address);
}
static void
{
if (ptid_equal (inferior_ptid, null_ptid))
printf_unfiltered (_("No inferior running\n"));
- disp_exception (¤t_inferior ()->private->exception_info);
+ disp_exception (¤t_inferior ()->priv->exception_info);
return;
}
else if (strcmp (args, "host") == 0)
{
- /* FIXME: This need a the privilegied host port! */
+ /* FIXME: This need a privilegied host port! */
kret = host_get_exception_ports
(darwin_host_self, EXC_MASK_ALL, info.masks,
&info.count, info.ports, info.behaviors, info.flavors);
inf = current_inferior ();
kret = task_get_exception_ports
- (inf->private->task, EXC_MASK_ALL, info.masks,
+ (inf->priv->task, EXC_MASK_ALL, info.masks,
&info.count, info.ports, info.behaviors, info.flavors);
MACH_CHECK_ERROR (kret);
disp_exception (&info);
}
}
-static void
-darwin_list_gdb_ports (const char *msg)
-{
- mach_port_name_array_t names;
- mach_port_type_array_t types;
- unsigned int name_count, type_count;
- kern_return_t result;
- int i;
-
- result = mach_port_names (mach_task_self (),
- &names, &name_count, &types, &type_count);
- MACH_CHECK_ERROR (result);
-
- gdb_assert (name_count == type_count);
-
- printf_unfiltered (_("Ports for %s:"), msg);
- for (i = 0; i < name_count; ++i)
- printf_unfiltered (_(" 0x%04x"), names[i]);
- printf_unfiltered (_("\n"));
-
- vm_deallocate (mach_task_self (), (vm_address_t) names,
- (name_count * sizeof (mach_port_t)));
- vm_deallocate (mach_task_self (), (vm_address_t) types,
- (type_count * sizeof (mach_port_type_t)));
-}
-
void
_initialize_darwin_info_commands (void)
{