/* @(#)04 1.12.2.1 src/bos/kernel/kdb/kdb_kextdef.h, kdb, bos72X, x2021_20A5 3/31/21 07:28:31 */ /* * COMPONENT_NAME: (KDB) Kernel Debugger * * FUNCTIONS: kdb_is_avail() * * ORIGINS: 131 * * Copyright (C) Bull S.A. 1997, 1999 * LEVEL 1, 5 Years Bull Confidential Information */ #ifndef _KDB_KEXTDEF_H #define _KDB_KEXTDEF_H #ifdef __cplusplus extern "C" { #endif /* * cast used in db_printf format to match brkpoint() proto */ #ifdef __64BIT__ typedef char * __fmt_t; #else /* __64BIT__ */ typedef long __fmt_t; #endif /* __64BIT__ */ /* * exported I/F prototypes */ #if defined(__64BIT__) || defined(_KEXT_PROTO) || !defined(_KERNEL) int db_register(char *, char *, char *, char *, char *, int (*)(uchar_t *, int *, int)); int db_unregister(int (*)(uchar_t *, int *, int)); void db_printf(__fmt_t, ...); uint_t db_read_mem(void *, void *, uint_t); uchar_t db_read_byte(void *); ushort_t db_read_halfword(void *); uint_t db_read_word(void *); int db_expr(int, uchar_t *, int *, int, int *); int db_expr_ad(int, uchar_t *, int *, int, void **); #endif /* __64BIT__ || _KEXT_PROTO || !_KERNEL */ u_longlong_t db_read_doubleword(void *); u_longlong_t db_read_device_doubleword(void *); int db_expr_ul(int, uchar_t *, int *, int, ulong_t *); ulong_t db_get_dec(void); ulong_t db_get_hex(void); uint_t db_get_hex_32(void); u_longlong_t db_get_hex_64(void); int db_usage_lookup(uchar_t *, int *, int); int db_str_lookup(uchar_t *, int *, int, uchar_t *); int db_eol(uchar_t *, int *, int); void db_newline(int); void db_deblank(uchar_t *, int *, int); void db_blanc(int); int db_more(int *, char *); int db_more_on(void); int db_more_off(void); int db_symboladdr(void **, char *); void db_dumpsymbol(char *, void *, int, int); void db_kx2srval_set(int); vmhandle_t db_get_aspace_id(struct buf *); long db_check_register(char *, char **, char *, long (*)(char *,long, long, long, void *, long)); long db_check_unregister(long (*)(char *,long, long, long, void *, long)); #if defined(__64BIT__) && defined(_KERNEL) int __kdb(void); #define kdb_is_avail() (__kdb()) #endif /* __64BIT__ && _KERNEL */ #if !defined(__64BIT__) && defined(_KERNEL) /* ================================================= * Kernel extension I/F to check if kdb is available * kdb_is_avail() * ================================================= */ /* * This test returns true if kdb is ready to be used. */ int brkpoint(long, ...); #define TWEQ_R1_R1 0x7C810808 #define kdb_is_avail() (*((int *)*((int *)brkpoint)) != TWEQ_R1_R1) /* * Kernel extension I/F to manage new command, usage: * * #define db_register(...) if (kdb_is_avail()) brkpoint(DB_REGISTER, ...) * #define db_unregister(...) if (kdb_is_avail()) brkpoint(DB_UNREGISTER, ...) */ #define DB_REGISTER 0x16011997 #define DB_UNREGISTER 0x02041997 /* * KDB extended I/F used by kernext display modules, usage: * * #define db_printf(__fmt_t, ...) brkpoint(long, ...) * #define db_read_mem(vad, lad, siz) brkpoint(DB_READ_MEM, vad, lad, siz) * #define db_read_byte(vad) brkpoint(DB_READ_BYTE, vad) * #define db_read_halfword(vad) brkpoint(DB_READ_HALFWORD, vad) * #define db_read_word(vad) brkpoint(DB_READ_WORD, vad) * #define db_expr(...) brkpoint(DB_EXPR, ...) * #define db_expr_ad(...) brkpoint(DB_EXPR_AD, ...) */ #define DB_READ_MEM 0x15031999 #define DB_READ_BYTE 0x16031999 #define DB_READ_HALFWORD 0x17031999 #define DB_READ_WORD 0x18031999 #define DB_EXPR 0x17011997 #define DB_EXPR_AD 0x11021998 #endif /* !__64BIT__ */ /* Values for the option flag for kdb_dumpsymbol, kdb_dumpsymbol_64, * __kdb_dumpsymbol_64. One of the options OFFS, OFFS_NN, or NOOFFS * should be used for all calls. The NAME_AND_ADDR flag may be ORed * with the other flags to output the hex address to any symbolic name * output. */ #define OFFS 1 /* Print symbol name + offset */ #define OFFS_NN 2 /* Print symbol name + offset (if non-zero) */ #define NOOFFS 4 /* Print symbol name if value == symbol address */ /* else print the address. */ #define NAME_AND_ADDR 8 /* Include hex address following symbolic name */ /* * typedef for 64-bit register support */ typedef unsigned long long kdb_long_t; /* unsigned 64-bit type */ typedef unsigned long long kdb_eaddr_t; /* effective address type */ typedef unsigned long long kdb_paddr_t; /* physical address type */ typedef unsigned long long kdb_reg_t; /* 64-bit register type */ typedef unsigned long long kdb_sid_t; /* effective - virtual sid type */ typedef unsigned long long kdb_esid_t; typedef unsigned long long kdb_vpn_t; /* virtual page number type */ typedef unsigned long long kdb_rpn_t; /* real page number type */ typedef unsigned long long kdb_sym_t; /* symbol value type */ #define KDB_MIN_KERNEL_ADDRESS (99999) /* XXX to be changed */ #define kdb_is_k_addr(value) \ ((value) && (kdb_long_t)(value) >= KDB_MIN_KERNEL_ADDRESS) #define kdb_is_k_entry(value) \ ((value) && (kdb_long_t)(value) < KDB_MIN_KERNEL_ADDRESS) #ifdef __cplusplus } #endif #endif /* _KDB_KEXTDEF_H */