17c478bd9Sstevel@tonic-gate /* 27c478bd9Sstevel@tonic-gate * CDDL HEADER START 37c478bd9Sstevel@tonic-gate * 47c478bd9Sstevel@tonic-gate * The contents of this file are subject to the terms of the 5cce40297SJonathan Adams * Common Development and Distribution License (the "License"). 6cce40297SJonathan Adams * You may not use this file except in compliance with the License. 77c478bd9Sstevel@tonic-gate * 87c478bd9Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 97c478bd9Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing. 107c478bd9Sstevel@tonic-gate * See the License for the specific language governing permissions 117c478bd9Sstevel@tonic-gate * and limitations under the License. 127c478bd9Sstevel@tonic-gate * 137c478bd9Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each 147c478bd9Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 157c478bd9Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the 167c478bd9Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying 177c478bd9Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner] 187c478bd9Sstevel@tonic-gate * 197c478bd9Sstevel@tonic-gate * CDDL HEADER END 207c478bd9Sstevel@tonic-gate */ 217c478bd9Sstevel@tonic-gate /* 22cce40297SJonathan Adams * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 237c478bd9Sstevel@tonic-gate * Use is subject to license terms. 247c478bd9Sstevel@tonic-gate */ 2528e4da25SMatthew Ahrens /* 26dcbf3bd6SGeorge Wilson * Copyright (c) 2013, 2015 by Delphix. All rights reserved. 27a8ea0c9dSJohn Levon * Copyright 2018 Joyent, Inc. 2828e4da25SMatthew Ahrens */ 297c478bd9Sstevel@tonic-gate 307c478bd9Sstevel@tonic-gate #ifndef _MDB_CTF_H 317c478bd9Sstevel@tonic-gate #define _MDB_CTF_H 327c478bd9Sstevel@tonic-gate 337c478bd9Sstevel@tonic-gate #include <mdb/mdb_target.h> 347c478bd9Sstevel@tonic-gate #include <libctf.h> 357c478bd9Sstevel@tonic-gate 367c478bd9Sstevel@tonic-gate #ifdef _MDB 377c478bd9Sstevel@tonic-gate #include <sys/machelf.h> 38*c71ad176SRobert Mustacchi #include <mdb/mdb_modapi.h> 397c478bd9Sstevel@tonic-gate #endif 407c478bd9Sstevel@tonic-gate 417c478bd9Sstevel@tonic-gate /* 427c478bd9Sstevel@tonic-gate * The following directive tells the mapfile generator that prototypes and 437c478bd9Sstevel@tonic-gate * declarations ending with an "Internal" comment should be excluded from the 447c478bd9Sstevel@tonic-gate * mapfile. 457c478bd9Sstevel@tonic-gate * 467c478bd9Sstevel@tonic-gate * MAPFILE: exclude "Internal" 477c478bd9Sstevel@tonic-gate */ 487c478bd9Sstevel@tonic-gate 497c478bd9Sstevel@tonic-gate #ifdef __cplusplus 507c478bd9Sstevel@tonic-gate extern "C" { 517c478bd9Sstevel@tonic-gate #endif 527c478bd9Sstevel@tonic-gate 537c478bd9Sstevel@tonic-gate typedef struct mdb_ctf_id { 547c478bd9Sstevel@tonic-gate void *_opaque[2]; 557c478bd9Sstevel@tonic-gate } mdb_ctf_id_t; 567c478bd9Sstevel@tonic-gate 577c478bd9Sstevel@tonic-gate typedef struct mdb_ctf_funcinfo { 587c478bd9Sstevel@tonic-gate mdb_ctf_id_t mtf_return; /* function return type */ 597c478bd9Sstevel@tonic-gate uint_t mtf_argc; /* number of arguments */ 607c478bd9Sstevel@tonic-gate uint_t mtf_flags; /* function attributes (see libctf.h) */ 617c478bd9Sstevel@tonic-gate uint_t mtf_symidx; /* for ctf_func_args */ 627c478bd9Sstevel@tonic-gate } mdb_ctf_funcinfo_t; 637c478bd9Sstevel@tonic-gate 647c478bd9Sstevel@tonic-gate typedef struct mdb_ctf_arinfo { 657c478bd9Sstevel@tonic-gate mdb_ctf_id_t mta_contents; /* type of array conents */ 667c478bd9Sstevel@tonic-gate mdb_ctf_id_t mta_index; /* type of array index */ 677c478bd9Sstevel@tonic-gate uint_t mta_nelems; /* number of elements */ 687c478bd9Sstevel@tonic-gate } mdb_ctf_arinfo_t; 697c478bd9Sstevel@tonic-gate 70cce40297SJonathan Adams typedef int mdb_ctf_visit_f(const char *, mdb_ctf_id_t, mdb_ctf_id_t, ulong_t, 71cce40297SJonathan Adams int, void *); 727c478bd9Sstevel@tonic-gate typedef int mdb_ctf_member_f(const char *, mdb_ctf_id_t, ulong_t, void *); 737c478bd9Sstevel@tonic-gate typedef int mdb_ctf_enum_f(const char *, int, void *); 747c478bd9Sstevel@tonic-gate typedef int mdb_ctf_type_f(mdb_ctf_id_t, void *); 757c478bd9Sstevel@tonic-gate 767c478bd9Sstevel@tonic-gate extern int mdb_ctf_enabled_by_object(const char *); 777c478bd9Sstevel@tonic-gate 787c478bd9Sstevel@tonic-gate extern int mdb_ctf_lookup_by_name(const char *, mdb_ctf_id_t *); 797c478bd9Sstevel@tonic-gate extern int mdb_ctf_lookup_by_addr(uintptr_t, mdb_ctf_id_t *); 807c478bd9Sstevel@tonic-gate 817c478bd9Sstevel@tonic-gate extern int mdb_ctf_module_lookup(const char *, mdb_ctf_id_t *); 827c478bd9Sstevel@tonic-gate 837c478bd9Sstevel@tonic-gate extern int mdb_ctf_func_info(const GElf_Sym *, const mdb_syminfo_t *, 847c478bd9Sstevel@tonic-gate mdb_ctf_funcinfo_t *); 857c478bd9Sstevel@tonic-gate extern int mdb_ctf_func_args(const mdb_ctf_funcinfo_t *, uint_t, 867c478bd9Sstevel@tonic-gate mdb_ctf_id_t *); 877c478bd9Sstevel@tonic-gate 887c478bd9Sstevel@tonic-gate extern void mdb_ctf_type_invalidate(mdb_ctf_id_t *); 897c478bd9Sstevel@tonic-gate extern int mdb_ctf_type_valid(mdb_ctf_id_t); 907c478bd9Sstevel@tonic-gate extern int mdb_ctf_type_cmp(mdb_ctf_id_t, mdb_ctf_id_t); 917c478bd9Sstevel@tonic-gate 927c478bd9Sstevel@tonic-gate extern int mdb_ctf_type_resolve(mdb_ctf_id_t, mdb_ctf_id_t *); 937c478bd9Sstevel@tonic-gate extern char *mdb_ctf_type_name(mdb_ctf_id_t, char *, size_t); 947c478bd9Sstevel@tonic-gate extern ssize_t mdb_ctf_type_size(mdb_ctf_id_t); 957c478bd9Sstevel@tonic-gate extern int mdb_ctf_type_kind(mdb_ctf_id_t); 967c478bd9Sstevel@tonic-gate extern int mdb_ctf_type_reference(const mdb_ctf_id_t, mdb_ctf_id_t *); 977c478bd9Sstevel@tonic-gate extern int mdb_ctf_type_encoding(mdb_ctf_id_t, ctf_encoding_t *); 987c478bd9Sstevel@tonic-gate extern int mdb_ctf_type_visit(mdb_ctf_id_t, mdb_ctf_visit_f *, void *); 997c478bd9Sstevel@tonic-gate 1007c478bd9Sstevel@tonic-gate extern int mdb_ctf_array_info(mdb_ctf_id_t, mdb_ctf_arinfo_t *); 1017c478bd9Sstevel@tonic-gate extern const char *mdb_ctf_enum_name(mdb_ctf_id_t, int); 1027c478bd9Sstevel@tonic-gate 1037c478bd9Sstevel@tonic-gate extern int mdb_ctf_member_iter(mdb_ctf_id_t, mdb_ctf_member_f *, void *); 1047c478bd9Sstevel@tonic-gate extern int mdb_ctf_enum_iter(mdb_ctf_id_t, mdb_ctf_enum_f *, void *); 1057c478bd9Sstevel@tonic-gate extern int mdb_ctf_type_iter(const char *, mdb_ctf_type_f *, void *); 1060a47c91cSRobert Mustacchi extern int mdb_ctf_type_delete(const mdb_ctf_id_t *); 1070a47c91cSRobert Mustacchi 1080a47c91cSRobert Mustacchi /* 1090a47c91cSRobert Mustacchi * Special values for mdb_ctf_type_iter. 1100a47c91cSRobert Mustacchi */ 1110a47c91cSRobert Mustacchi #define MDB_CTF_SYNTHETIC_ITER (const char *)(-1L) 1120a47c91cSRobert Mustacchi 1130a47c91cSRobert Mustacchi #define SYNTHETIC_ILP32 1 1140a47c91cSRobert Mustacchi #define SYNTHETIC_LP64 2 1150a47c91cSRobert Mustacchi extern int mdb_ctf_synthetics_create_base(int); 1160a47c91cSRobert Mustacchi extern int mdb_ctf_synthetics_reset(void); 1170a47c91cSRobert Mustacchi 1180a47c91cSRobert Mustacchi /* 1190a47c91cSRobert Mustacchi * Synthetic creation routines 1200a47c91cSRobert Mustacchi */ 1210a47c91cSRobert Mustacchi extern int mdb_ctf_add_typedef(const char *, const mdb_ctf_id_t *, 1220a47c91cSRobert Mustacchi mdb_ctf_id_t *); 1230a47c91cSRobert Mustacchi extern int mdb_ctf_add_struct(const char *, mdb_ctf_id_t *); 1240a47c91cSRobert Mustacchi extern int mdb_ctf_add_union(const char *, mdb_ctf_id_t *); 1250a47c91cSRobert Mustacchi extern int mdb_ctf_add_member(const mdb_ctf_id_t *, const char *, 1260a47c91cSRobert Mustacchi const mdb_ctf_id_t *, mdb_ctf_id_t *); 1270a47c91cSRobert Mustacchi extern int mdb_ctf_add_array(const mdb_ctf_arinfo_t *, mdb_ctf_id_t *); 1280a47c91cSRobert Mustacchi extern int mdb_ctf_add_pointer(const mdb_ctf_id_t *, mdb_ctf_id_t *); 1297c478bd9Sstevel@tonic-gate 1307c478bd9Sstevel@tonic-gate /* utility stuff */ 1317c478bd9Sstevel@tonic-gate extern ctf_id_t mdb_ctf_type_id(mdb_ctf_id_t); 1327c478bd9Sstevel@tonic-gate extern ctf_file_t *mdb_ctf_type_file(mdb_ctf_id_t); 1337c478bd9Sstevel@tonic-gate 1347c478bd9Sstevel@tonic-gate 1357c478bd9Sstevel@tonic-gate extern int mdb_ctf_member_info(mdb_ctf_id_t, const char *, 1367c478bd9Sstevel@tonic-gate ulong_t *, mdb_ctf_id_t *); 1377c478bd9Sstevel@tonic-gate extern int mdb_ctf_offsetof(mdb_ctf_id_t, const char *, ulong_t *); 1387c478bd9Sstevel@tonic-gate extern int mdb_ctf_num_members(mdb_ctf_id_t); 13928e4da25SMatthew Ahrens extern int mdb_ctf_offsetof_by_name(const char *, const char *); 140dcbf3bd6SGeorge Wilson extern ssize_t mdb_ctf_sizeof_by_name(const char *); 1417c478bd9Sstevel@tonic-gate 1427c478bd9Sstevel@tonic-gate extern ssize_t mdb_ctf_offset_to_name(mdb_ctf_id_t, ulong_t, char *, size_t, 1437c478bd9Sstevel@tonic-gate int, mdb_ctf_id_t *, ulong_t *); 1447c478bd9Sstevel@tonic-gate 14528e4da25SMatthew Ahrens #define MDB_CTF_VREAD_QUIET 0x100 146a8ea0c9dSJohn Levon #define MDB_CTF_VREAD_IGNORE_ABSENT 0x200 1477c478bd9Sstevel@tonic-gate 14828e4da25SMatthew Ahrens extern int mdb_ctf_vread(void *, const char *, const char *, 14928e4da25SMatthew Ahrens uintptr_t, uint_t); 1507c478bd9Sstevel@tonic-gate extern int mdb_ctf_readsym(void *, const char *, const char *, uint_t); 1517c478bd9Sstevel@tonic-gate 1527c478bd9Sstevel@tonic-gate #ifdef _MDB 1537c478bd9Sstevel@tonic-gate 1547c478bd9Sstevel@tonic-gate extern ctf_file_t *mdb_ctf_open(const char *, int *); /* Internal */ 1557c478bd9Sstevel@tonic-gate extern ctf_file_t *mdb_ctf_bufopen(const void *, size_t, /* Internal */ 1567c478bd9Sstevel@tonic-gate const void *, Shdr *, const void *, Shdr *, int *); 1572becb8cdSRobert Mustacchi extern int mdb_ctf_write(const char *, ctf_file_t *fp); /* Internal */ 1587c478bd9Sstevel@tonic-gate extern void mdb_ctf_close(ctf_file_t *fp); /* Internal */ 1590a47c91cSRobert Mustacchi extern int mdb_ctf_synthetics_init(void); /* Internal */ 1600a47c91cSRobert Mustacchi extern void mdb_ctf_synthetics_fini(void); /* Internal */ 1610a47c91cSRobert Mustacchi extern int mdb_ctf_synthetics_from_file(const char *); /* Internal */ 1622becb8cdSRobert Mustacchi extern int mdb_ctf_synthetics_to_file(const char *); /* Internal */ 163*c71ad176SRobert Mustacchi extern int cmd_typelist(uintptr_t, uint_t, int, /* Internal */ 164*c71ad176SRobert Mustacchi const mdb_arg_t *); 1657c478bd9Sstevel@tonic-gate 1667c478bd9Sstevel@tonic-gate #endif 1677c478bd9Sstevel@tonic-gate 1687c478bd9Sstevel@tonic-gate #ifdef __cplusplus 1697c478bd9Sstevel@tonic-gate } 1707c478bd9Sstevel@tonic-gate #endif 1717c478bd9Sstevel@tonic-gate 1727c478bd9Sstevel@tonic-gate #endif /* _MDB_CTF_H */ 173