usr/src/cmd/mdb/common/mdb/mdb_target_impl.h
author Robert Mustacchi <rm@joyent.com>
Wed, 03 Apr 2013 15:25:37 -0700
changeset 14146 42d090a37218
parent 2712 f74a135872bc
permissions -rw-r--r--
3089 want ::typedef 3690 mdb on x86 should be able to print alternate register names 3688 Want mdb -e 3094 libctf should support removing a dynamic type 3095 libctf does not validate arrays correctly 3096 libctf does not validate function types correctly 3689 Want an mdb test suite driver Reviewed by: Richard Lowe <[email protected]> Reviewed by: Eric Schrock <[email protected]> Approved by: Gordon Ross <[email protected]>
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     1
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     2
 * CDDL HEADER START
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     3
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
2712
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 0
diff changeset
     5
 * Common Development and Distribution License (the "License").
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 0
diff changeset
     6
 * You may not use this file except in compliance with the License.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     7
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     8
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     9
 * or http://www.opensolaris.org/os/licensing.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    10
 * See the License for the specific language governing permissions
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    11
 * and limitations under the License.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    12
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    13
 * When distributing Covered Code, include this CDDL HEADER in each
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    14
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    15
 * If applicable, add the following below this CDDL HEADER, with the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    16
 * fields enclosed by brackets "[]" replaced with your own identifying
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    17
 * information: Portions Copyright [yyyy] [name of copyright owner]
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    18
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    19
 * CDDL HEADER END
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    20
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    21
/*
2712
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 0
diff changeset
    22
 * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    23
 * Use is subject to license terms.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    24
 */
14146
42d090a37218 3089 want ::typedef
Robert Mustacchi <rm@joyent.com>
parents: 2712
diff changeset
    25
/*
42d090a37218 3089 want ::typedef
Robert Mustacchi <rm@joyent.com>
parents: 2712
diff changeset
    26
 * Copyright (c) 2012, Joyent, Inc.  All rights reserved.
42d090a37218 3089 want ::typedef
Robert Mustacchi <rm@joyent.com>
parents: 2712
diff changeset
    27
 */
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    28
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    29
#ifndef	_MDB_TARGET_IMPL_H
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    30
#define	_MDB_TARGET_IMPL_H
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    31
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    32
#include <mdb/mdb_target.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    33
#include <mdb/mdb_module.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    34
#include <mdb/mdb_list.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    35
#include <mdb/mdb_gelf.h>
2712
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 0
diff changeset
    36
#include <sys/auxv.h>
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    37
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    38
#ifdef	__cplusplus
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    39
extern "C" {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    40
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    41
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    42
#ifdef _MDB
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    43
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    44
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    45
 * Target Operations
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    46
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    47
 * This ops vector implements the set of primitives which can be used by the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    48
 * debugger to interact with the target, and encompasses most of the calls
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    49
 * found in <mdb/mdb_target.h>.  The remainder of the target interface is
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    50
 * implemented by common code that invokes these primitives or manipulates
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    51
 * the common target structures directly.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    52
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    53
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    54
typedef struct mdb_tgt_ops {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    55
	int (*t_setflags)(mdb_tgt_t *, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    56
	int (*t_setcontext)(mdb_tgt_t *, void *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    57
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    58
	void (*t_activate)(mdb_tgt_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    59
	void (*t_deactivate)(mdb_tgt_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    60
	void (*t_periodic)(mdb_tgt_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    61
	void (*t_destroy)(mdb_tgt_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    62
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    63
	const char *(*t_name)(mdb_tgt_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    64
	const char *(*t_isa)(mdb_tgt_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    65
	const char *(*t_platform)(mdb_tgt_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    66
	int (*t_uname)(mdb_tgt_t *, struct utsname *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    67
	int (*t_dmodel)(mdb_tgt_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    68
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    69
	ssize_t (*t_aread)(mdb_tgt_t *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    70
	    mdb_tgt_as_t, void *, size_t, mdb_tgt_addr_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    71
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    72
	ssize_t (*t_awrite)(mdb_tgt_t *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    73
	    mdb_tgt_as_t, const void *, size_t, mdb_tgt_addr_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    74
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    75
	ssize_t (*t_vread)(mdb_tgt_t *, void *, size_t, uintptr_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    76
	ssize_t (*t_vwrite)(mdb_tgt_t *, const void *, size_t, uintptr_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    77
	ssize_t (*t_pread)(mdb_tgt_t *, void *, size_t, physaddr_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    78
	ssize_t (*t_pwrite)(mdb_tgt_t *, const void *, size_t, physaddr_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    79
	ssize_t (*t_fread)(mdb_tgt_t *, void *, size_t, uintptr_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    80
	ssize_t (*t_fwrite)(mdb_tgt_t *, const void *, size_t, uintptr_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    81
	ssize_t (*t_ioread)(mdb_tgt_t *, void *, size_t, uintptr_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    82
	ssize_t (*t_iowrite)(mdb_tgt_t *, const void *, size_t, uintptr_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    83
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    84
	int (*t_vtop)(mdb_tgt_t *, mdb_tgt_as_t, uintptr_t, physaddr_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    85
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    86
	int (*t_lookup_by_name)(mdb_tgt_t *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    87
	    const char *, const char *, GElf_Sym *, mdb_syminfo_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    88
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    89
	int (*t_lookup_by_addr)(mdb_tgt_t *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    90
	    uintptr_t, uint_t, char *, size_t, GElf_Sym *, mdb_syminfo_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    91
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    92
	int (*t_symbol_iter)(mdb_tgt_t *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    93
	    const char *, uint_t, uint_t, mdb_tgt_sym_f *, void *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    94
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    95
	int (*t_mapping_iter)(mdb_tgt_t *, mdb_tgt_map_f *, void *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    96
	int (*t_object_iter)(mdb_tgt_t *, mdb_tgt_map_f *, void *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    97
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    98
	const mdb_map_t *(*t_addr_to_map)(mdb_tgt_t *, uintptr_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    99
	const mdb_map_t *(*t_name_to_map)(mdb_tgt_t *, const char *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   100
	struct ctf_file *(*t_addr_to_ctf)(mdb_tgt_t *, uintptr_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   101
	struct ctf_file *(*t_name_to_ctf)(mdb_tgt_t *, const char *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   102
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   103
	int (*t_status)(mdb_tgt_t *, mdb_tgt_status_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   104
	int (*t_run)(mdb_tgt_t *, int, const struct mdb_arg *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   105
	int (*t_step)(mdb_tgt_t *, mdb_tgt_status_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   106
	int (*t_step_out)(mdb_tgt_t *, uintptr_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   107
	int (*t_step_branch)(mdb_tgt_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   108
	int (*t_next)(mdb_tgt_t *, uintptr_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   109
	int (*t_cont)(mdb_tgt_t *, mdb_tgt_status_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   110
	int (*t_signal)(mdb_tgt_t *, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   111
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   112
	int (*t_add_vbrkpt)(mdb_tgt_t *, uintptr_t,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   113
	    int, mdb_tgt_se_f *, void *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   114
	int (*t_add_sbrkpt)(mdb_tgt_t *, const char *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   115
	    int, mdb_tgt_se_f *, void *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   116
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   117
	int (*t_add_pwapt)(mdb_tgt_t *, physaddr_t, size_t, uint_t,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   118
	    int, mdb_tgt_se_f *, void *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   119
	int (*t_add_vwapt)(mdb_tgt_t *, uintptr_t, size_t, uint_t,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   120
	    int, mdb_tgt_se_f *, void *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   121
	int (*t_add_iowapt)(mdb_tgt_t *, uintptr_t, size_t, uint_t,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   122
	    int, mdb_tgt_se_f *, void *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   123
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   124
	int (*t_add_sysenter)(mdb_tgt_t *, int, int, mdb_tgt_se_f *, void *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   125
	int (*t_add_sysexit)(mdb_tgt_t *, int, int, mdb_tgt_se_f *, void *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   126
	int (*t_add_signal)(mdb_tgt_t *, int, int, mdb_tgt_se_f *, void *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   127
	int (*t_add_fault)(mdb_tgt_t *, int, int, mdb_tgt_se_f *, void *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   128
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   129
	int (*t_getareg)(mdb_tgt_t *, mdb_tgt_tid_t, const char *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   130
	    mdb_tgt_reg_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   131
	int (*t_putareg)(mdb_tgt_t *, mdb_tgt_tid_t, const char *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   132
	    mdb_tgt_reg_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   133
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   134
	int (*t_stack_iter)(mdb_tgt_t *, const mdb_tgt_gregset_t *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   135
	    mdb_tgt_stack_f *, void *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   136
2712
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 0
diff changeset
   137
	int (*t_auxv)(mdb_tgt_t *, const auxv_t **auxvp);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   138
} mdb_tgt_ops_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   139
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   140
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   141
 * Software Event Specifiers
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   142
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   143
 * The common target layer provides support for the management of software
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   144
 * event specifiers, used to describe conditions under which a live executing
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   145
 * target program instance will stop and transfer control back to the debugger.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   146
 * Software event management design is discussed in more detail in mdb_target.c.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   147
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   148
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   149
struct mdb_sespec;			/* Software event specifier */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   150
struct mdb_vespec;			/* Virtual event specifier */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   151
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   152
typedef struct mdb_se_ops {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   153
	int (*se_ctor)(mdb_tgt_t *, struct mdb_sespec *, void *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   154
	void (*se_dtor)(mdb_tgt_t *, struct mdb_sespec *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   155
	char *(*se_info)(mdb_tgt_t *, struct mdb_sespec *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   156
	    struct mdb_vespec *, mdb_tgt_spec_desc_t *, char *, size_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   157
	int (*se_secmp)(mdb_tgt_t *, struct mdb_sespec *, void *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   158
	int (*se_vecmp)(mdb_tgt_t *, struct mdb_vespec *, void *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   159
	int (*se_arm)(mdb_tgt_t *, struct mdb_sespec *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   160
	int (*se_disarm)(mdb_tgt_t *, struct mdb_sespec *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   161
	int (*se_cont)(mdb_tgt_t *, struct mdb_sespec *, mdb_tgt_status_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   162
	int (*se_match)(mdb_tgt_t *, struct mdb_sespec *, mdb_tgt_status_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   163
} mdb_se_ops_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   164
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   165
#define	T_SE_END	((void *)-1L)	/* Sentinel for end of t_matched list */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   166
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   167
typedef struct mdb_sespec {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   168
	mdb_list_t se_selist;		/* Sespec list forward/back pointers */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   169
	mdb_list_t se_velist;		/* List of layered virtual specifiers */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   170
	struct mdb_sespec *se_matched;	/* Pointer to next se on matched list */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   171
	const mdb_se_ops_t *se_ops;	/* Pointer to ops vector */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   172
	void *se_data;			/* Private storage for ops vector */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   173
	uint_t se_refs;			/* Reference count */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   174
	int se_state;			/* Event specifier state */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   175
	int se_errno;			/* Last error code (if error state) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   176
} mdb_sespec_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   177
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   178
typedef struct mdb_vespec {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   179
	mdb_list_t ve_list;		/* Vespec list forward/back pointers */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   180
	int ve_id;			/* Virtual event specifier ID (VID) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   181
	int ve_flags;			/* Flags (see mdb_target.h) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   182
	uint_t ve_refs;			/* Reference count */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   183
	uint_t ve_hits;			/* Count of number of times matched */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   184
	uint_t ve_limit;		/* Limit on number of times matched */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   185
	mdb_sespec_t *ve_se;		/* Backpointer to sespec */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   186
	mdb_tgt_se_f *ve_callback;	/* Callback for event owner */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   187
	void *ve_data;			/* Private storage for callback */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   188
	void *ve_args;			/* Arguments for sespec constructor */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   189
	void (*ve_dtor)(struct mdb_vespec *); /* Destructor for ve_args */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   190
} mdb_vespec_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   191
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   192
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   193
 * Xdata Descriptors
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   194
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   195
 * Each external data item (xdata) exported by the target has a corresponding
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   196
 * descriptor associated with the target.  The descriptor provides the name
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   197
 * and description of the data, as well as the routine which is used to
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   198
 * retrieve the actual data or its size.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   199
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   200
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   201
typedef struct mdb_xdata {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   202
	mdb_list_t xd_list;		/* Xdata list forward/back pointers */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   203
	const char *xd_name;		/* Buffer name */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   204
	const char *xd_desc;		/* Buffer description */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   205
	ssize_t (*xd_copy)(mdb_tgt_t *, void *, size_t); /* Copy routine */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   206
} mdb_xdata_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   207
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   208
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   209
 * Target Structure
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   210
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   211
 * The target itself contains a few common data members, and then a pointer to
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   212
 * the underlying ops vector and its private storage pointer.  MDB can manage
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   213
 * multiple targets simultaneously, and the list of all constructed targets is
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   214
 * pointed to by the mdb_t structure.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   215
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   216
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   217
struct mdb_tgt {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   218
	mdb_list_t t_tgtlist;		/* Target list forward/back pointers */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   219
	mdb_list_t t_active;		/* List of active event specifiers */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   220
	mdb_list_t t_idle;		/* List of inactive event specifiers */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   221
	mdb_list_t t_xdlist;		/* List of xdata descriptors */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   222
	mdb_module_t *t_module;		/* Backpointer to containing module */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   223
	void *t_pshandle;		/* Proc service handle (if not tgt) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   224
	const mdb_tgt_ops_t *t_ops;	/* Pointer to target ops vector */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   225
	void *t_data;			/* Private storage for implementation */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   226
	mdb_tgt_status_t t_status;	/* Cached target status */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   227
	mdb_sespec_t *t_matched;	/* List of matched event specifiers */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   228
	uint_t t_flags;			/* Mode flags (see <mdb_target.h>) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   229
	uint_t t_vecnt;			/* Total number of vespecs */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   230
	int t_vepos;			/* Sequence # for next vespec id > 0 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   231
	int t_veneg;			/* Sequence # for next vespec id < 0 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   232
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   233
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   234
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   235
 * Special functions which targets can use to fill ops vector slots:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   236
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   237
extern long mdb_tgt_notsup();		/* Return -1, errno EMDB_TGTNOTSUP */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   238
extern long mdb_tgt_hwnotsup();		/* return -1, errno EMDB_TGTHWNOTSUP */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   239
extern void *mdb_tgt_null();		/* Return NULL, errno EMDB_TGTNOTSUP */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   240
extern long mdb_tgt_nop();		/* Return 0 for success */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   241
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   242
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   243
 * Utility structures for target implementations:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   244
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   245
#define	MDB_TGT_R_PRIV		0x001	/* Privileged register */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   246
#define	MDB_TGT_R_EXPORT	0x002	/* Export register as a variable */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   247
#define	MDB_TGT_R_ALIAS		0x004	/* Alias for another register name */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   248
#define	MDB_TGT_R_XREG		0x008	/* Extended register */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   249
#define	MDB_TGT_R_FPS		0x010	/* Single-precision floating-point */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   250
#define	MDB_TGT_R_FPD		0x020	/* Double-precision floating-point */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   251
#define	MDB_TGT_R_FPQ		0x040	/* Quad-precision floating-point */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   252
#define	MDB_TGT_R_FPU		0x080	/* FPU control/status register */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   253
#define	MDB_TGT_R_RDONLY	0x100	/* Register is read-only */
14146
42d090a37218 3089 want ::typedef
Robert Mustacchi <rm@joyent.com>
parents: 2712
diff changeset
   254
#define	MDB_TGT_R_32		0x200	/* 32-bit version of register */
42d090a37218 3089 want ::typedef
Robert Mustacchi <rm@joyent.com>
parents: 2712
diff changeset
   255
#define	MDB_TGT_R_16		0x400	/* 16-bit version of register */
42d090a37218 3089 want ::typedef
Robert Mustacchi <rm@joyent.com>
parents: 2712
diff changeset
   256
#define	MDB_TGT_R_8H		0x800	/* upper half of a 16-bit reg */
42d090a37218 3089 want ::typedef
Robert Mustacchi <rm@joyent.com>
parents: 2712
diff changeset
   257
#define	MDB_TGT_R_8L		0x1000	/* lower half of a 16-bit reg */
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   258
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   259
#define	MDB_TGT_R_IS_FP(f)	((f) & 0xf0) /* Test MDB_TGT_R_FP* bits */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   260
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   261
#define	MDB_TGT_R_NVAL(n, f)	((((ulong_t)(n)) << 16UL) | (f))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   262
#define	MDB_TGT_R_NUM(v)	(((v) >> 16) & 0xffff)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   263
#define	MDB_TGT_R_FLAGS(v)	((v) & 0xffff)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   264
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   265
typedef struct mdb_tgt_regdesc {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   266
	const char *rd_name;		/* Register string name */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   267
	ushort_t rd_num;		/* Register index number */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   268
	ushort_t rd_flags;		/* Register flags (see above) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   269
} mdb_tgt_regdesc_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   270
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   271
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   272
 * Utility functions for target implementations to use in order to simplify
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   273
 * the implementation of various routines and to insert and delete xdata
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   274
 * specifiers and software event specifiers.  Refer to the associated comments
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   275
 * in mdb_target.c for more information about each function.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   276
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   277
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   278
extern int mdb_tgt_xdata_insert(mdb_tgt_t *, const char *, const char *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   279
	ssize_t (*)(mdb_tgt_t *, void *, size_t));
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   280
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   281
extern int mdb_tgt_xdata_delete(mdb_tgt_t *, const char *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   282
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   283
extern int mdb_tgt_sym_match(const GElf_Sym *, uint_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   284
extern void mdb_tgt_elf_export(mdb_gelf_file_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   285
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   286
extern int mdb_tgt_sespec_activate_one(mdb_tgt_t *t, mdb_sespec_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   287
extern int mdb_tgt_sespec_activate_all(mdb_tgt_t *t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   288
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   289
extern void mdb_tgt_sespec_idle_one(mdb_tgt_t *t, mdb_sespec_t *, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   290
extern void mdb_tgt_sespec_idle_all(mdb_tgt_t *t, int, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   291
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   292
extern void mdb_tgt_sespec_arm_one(mdb_tgt_t *t, mdb_sespec_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   293
extern void mdb_tgt_sespec_arm_all(mdb_tgt_t *t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   294
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   295
extern void mdb_tgt_sespec_idle_one(mdb_tgt_t *t, mdb_sespec_t *, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   296
extern void mdb_tgt_sespec_idle_all(mdb_tgt_t *t, int, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   297
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   298
extern void mdb_tgt_sespec_prune_one(mdb_tgt_t *t, mdb_sespec_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   299
extern void mdb_tgt_sespec_prune_all(mdb_tgt_t *t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   300
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   301
extern mdb_sespec_t *mdb_tgt_sespec_insert(mdb_tgt_t *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   302
    const mdb_se_ops_t *, mdb_list_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   303
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   304
extern mdb_sespec_t *mdb_tgt_sespec_lookup_active(mdb_tgt_t *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   305
    const mdb_se_ops_t *, void *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   306
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   307
extern mdb_sespec_t *mdb_tgt_sespec_lookup_idle(mdb_tgt_t *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   308
    const mdb_se_ops_t *, void *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   309
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   310
extern void mdb_tgt_sespec_hold(mdb_tgt_t *, mdb_sespec_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   311
extern void mdb_tgt_sespec_rele(mdb_tgt_t *, mdb_sespec_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   312
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   313
extern void mdb_tgt_sespec_prune_one(mdb_tgt_t *t, mdb_sespec_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   314
extern void mdb_tgt_sespec_prune_all(mdb_tgt_t *t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   315
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   316
extern mdb_sespec_t *mdb_tgt_sespec_insert(mdb_tgt_t *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   317
    const mdb_se_ops_t *, mdb_list_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   318
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   319
extern mdb_sespec_t *mdb_tgt_sespec_lookup_active(mdb_tgt_t *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   320
    const mdb_se_ops_t *, void *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   321
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   322
extern mdb_sespec_t *mdb_tgt_sespec_lookup_idle(mdb_tgt_t *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   323
    const mdb_se_ops_t *, void *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   324
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   325
extern void mdb_tgt_sespec_hold(mdb_tgt_t *, mdb_sespec_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   326
extern void mdb_tgt_sespec_rele(mdb_tgt_t *, mdb_sespec_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   327
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   328
extern int mdb_tgt_vespec_insert(mdb_tgt_t *, const mdb_se_ops_t *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   329
    int, mdb_tgt_se_f *, void *, void *, void (*)(mdb_vespec_t *));
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   330
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   331
extern mdb_vespec_t *mdb_tgt_vespec_lookup(mdb_tgt_t *, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   332
2712
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 0
diff changeset
   333
extern int mdb_tgt_auxv(mdb_tgt_t *, const auxv_t **);
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 0
diff changeset
   334
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   335
extern void mdb_tgt_vespec_hold(mdb_tgt_t *, mdb_vespec_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   336
extern void mdb_tgt_vespec_rele(mdb_tgt_t *, mdb_vespec_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   337
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   338
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   339
 * Utility function that target implementations can use to register dcmds,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   340
 * walkers, and to create named variables for registers
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   341
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   342
extern int mdb_tgt_register_dcmds(mdb_tgt_t *, const mdb_dcmd_t *, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   343
extern int mdb_tgt_register_walkers(mdb_tgt_t *, const mdb_walker_t *, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   344
extern void mdb_tgt_register_regvars(mdb_tgt_t *, const mdb_tgt_regdesc_t *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   345
    const mdb_nv_disc_t *, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   346
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   347
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   348
 * Utility functions that target implementations can use to fill in the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   349
 * mdb_se_ops_t structure and vespec destructor.  Each software event specifier
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   350
 * must minimally supply its own constructor, info function, and match function.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   351
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   352
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   353
extern void no_ve_dtor(mdb_vespec_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   354
extern void no_se_dtor(mdb_tgt_t *, mdb_sespec_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   355
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   356
extern int no_se_secmp(mdb_tgt_t *, mdb_sespec_t *, void *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   357
extern int no_se_vecmp(mdb_tgt_t *, mdb_vespec_t *, void *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   358
extern int no_se_arm(mdb_tgt_t *, mdb_sespec_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   359
extern int no_se_disarm(mdb_tgt_t *, mdb_sespec_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   360
extern int no_se_cont(mdb_tgt_t *, mdb_sespec_t *, mdb_tgt_status_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   361
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   362
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   363
 * In the initial version of MDB, the data model property is not part of the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   364
 * public API.  However, I am providing this as a hidden part of the ABI as
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   365
 * one way we can handle the situation.  If this turns out to be the right
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   366
 * decision, we can document it later without having to rev the API version.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   367
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   368
#define	MDB_TGT_MODEL_UNKNOWN	0	/* Unknown data model */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   369
#define	MDB_TGT_MODEL_ILP32	1	/* Target data model is ILP32 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   370
#define	MDB_TGT_MODEL_LP64	2	/* Target data model is LP64 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   371
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   372
#ifdef _LP64
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   373
#define	MDB_TGT_MODEL_NATIVE	MDB_TGT_MODEL_LP64
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   374
#else
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   375
#define	MDB_TGT_MODEL_NATIVE	MDB_TGT_MODEL_ILP32
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   376
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   377
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   378
extern int mdb_prop_datamodel;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   379
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   380
#endif /* _MDB */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   381
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   382
#ifdef	__cplusplus
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   383
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   384
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   385
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   386
#endif	/* _MDB_TARGET_IMPL_H */