JavaScript is required to for searching.
Skip Navigation Links
Exit Print View
man pages section 3: Extended Library Functions     Oracle Solaris 10 8/11 Information Library
search filter icon
search icon

Document Information

Preface

Extended Library Functions - Part 1

Extended Library Functions - Part 2

Extended Library Functions - Part 3

Extended Library Functions - Part 4

Extended Library Functions - Part 5

Extended Library Functions - Part 6

sin(3M)

sincos(3M)

sincosf(3M)

sincosl(3M)

sinf(3M)

sinh(3M)

sinhf(3M)

sinhl(3M)

sinl(3M)

smf_degrade_instance(3SCF)

smf_disable_instance(3SCF)

smf_enable_instance(3SCF)

smf_get_state(3SCF)

smf_maintain_instance(3SCF)

smf_refresh_instance(3SCF)

smf_restart_instance(3SCF)

smf_restore_instance(3SCF)

sqrt(3M)

sqrtf(3M)

sqrtl(3M)

SSAAgentIsAlive(3SNMP)

SSAGetTrapPort(3SNMP)

SSAOidCmp(3SNMP)

SSAOidCpy(3SNMP)

SSAOidDup(3SNMP)

SSAOidFree(3SNMP)

SSAOidInit(3SNMP)

SSAOidNew(3SNMP)

SSAOidString(3SNMP)

SSAOidStrToOid(3SNMP)

SSAOidZero(3SNMP)

SSARegSubagent(3SNMP)

SSARegSubtable(3SNMP)

SSARegSubtree(3SNMP)

SSASendTrap(3SNMP)

SSAStringCpy(3SNMP)

SSAStringInit(3SNMP)

SSAStringToChar(3SNMP)

SSAStringZero(3SNMP)

SSASubagentOpen(3SNMP)

stdarg(3EXT)

step(3GEN)

stobclear(3TSOL)

stobl(3TSOL)

stobsl(3TSOL)

strcadd(3GEN)

strccpy(3GEN)

streadd(3GEN)

strecpy(3GEN)

strfind(3GEN)

strrspn(3GEN)

str_to_label(3TSOL)

strtrns(3GEN)

Sun_MP_SendScsiCmd(3MPAPI)

SUNW_C_GetMechSession(3EXT)

SUNW_C_KeyToObject(3EXT)

sysevent_bind_handle(3SYSEVENT)

sysevent_free(3SYSEVENT)

sysevent_get_attr_list(3SYSEVENT)

sysevent_get_class_name(3SYSEVENT)

sysevent_get_pid(3SYSEVENT)

sysevent_get_pub_name(3SYSEVENT)

sysevent_get_seq(3SYSEVENT)

sysevent_get_size(3SYSEVENT)

sysevent_get_subclass_name(3SYSEVENT)

sysevent_get_time(3SYSEVENT)

sysevent_get_vendor_name(3SYSEVENT)

sysevent_post_event(3SYSEVENT)

sysevent_subscribe_event(3SYSEVENT)

sysevent_unbind_handle(3SYSEVENT)

sysevent_unsubscribe_event(3SYSEVENT)

tan(3M)

tanf(3M)

tanh(3M)

tanhf(3M)

tanhl(3M)

tanl(3M)

Task(3PERL)

tgamma(3M)

tgammaf(3M)

tgammal(3M)

tnfctl_buffer_alloc(3TNF)

tnfctl_buffer_dealloc(3TNF)

tnfctl_check_libs(3TNF)

tnfctl_close(3TNF)

tnfctl_continue(3TNF)

tnfctl_exec_open(3TNF)

tnfctl_filter_list_add(3TNF)

tnfctl_filter_list_delete(3TNF)

tnfctl_filter_list_get(3TNF)

tnfctl_filter_state_set(3TNF)

tnfctl_indirect_open(3TNF)

tnfctl_internal_open(3TNF)

tnfctl_kernel_open(3TNF)

tnfctl_pid_open(3TNF)

tnfctl_probe_apply(3TNF)

tnfctl_probe_apply_ids(3TNF)

tnfctl_probe_connect(3TNF)

tnfctl_probe_disable(3TNF)

tnfctl_probe_disconnect_all(3TNF)

tnfctl_probe_enable(3TNF)

tnfctl_probe_state_get(3TNF)

tnfctl_probe_trace(3TNF)

tnfctl_probe_untrace(3TNF)

tnfctl_register_funcs(3TNF)

tnfctl_strerror(3TNF)

tnfctl_trace_attrs_get(3TNF)

tnfctl_trace_state_set(3TNF)

TNF_DEBUG(3TNF)

TNF_DECLARE_RECORD(3TNF)

TNF_DEFINE_RECORD_1(3TNF)

TNF_DEFINE_RECORD_2(3TNF)

TNF_DEFINE_RECORD_3(3TNF)

TNF_DEFINE_RECORD_4(3TNF)

TNF_DEFINE_RECORD_5(3TNF)

TNF_PROBE_0(3TNF)

TNF_PROBE_0_DEBUG(3TNF)

TNF_PROBE_1(3TNF)

TNF_PROBE_1_DEBUG(3TNF)

TNF_PROBE_2(3TNF)

TNF_PROBE_2_DEBUG(3TNF)

TNF_PROBE_3(3TNF)

TNF_PROBE_3_DEBUG(3TNF)

TNF_PROBE(3TNF)

TNF_PROBE_4(3TNF)

TNF_PROBE_4_DEBUG(3TNF)

TNF_PROBE_5(3TNF)

TNF_PROBE_5_DEBUG(3TNF)

tnf_process_disable(3TNF)

tnf_process_enable(3TNF)

tnf_thread_disable(3TNF)

tnf_thread_enable(3TNF)

touchlock(3MAIL)

tracing(3TNF)

trunc(3M)

truncf(3M)

truncl(3M)

tsalarm_get(3EXT)

tsalarm_set(3EXT)

tsol_getrhtype(3TSOL)

tsol_lbuild_create(3TSOL)

tsol_lbuild_destroy(3TSOL)

tsol_lbuild_get(3TSOL)

tsol_lbuild_set(3TSOL)

Ucred(3PERL)

uuid_clear(3UUID)

uuid_compare(3UUID)

uuid_copy(3UUID)

uuid_generate(3UUID)

uuid_generate_random(3UUID)

uuid_generate_time(3UUID)

uuid_is_null(3UUID)

uuid_parse(3UUID)

uuid_time(3UUID)

uuid_unparse(3UUID)

v12n(3EXT)

v12n_capabilities(3EXT)

v12n_chassis_serialno(3EXT)

v12n_ctrl_domain(3EXT)

v12n_domain_name(3EXT)

v12n_domain_roles(3EXT)

v12n_domain_uuid(3EXT)

varargs(3EXT)

vatan2_(3MVEC)

vatan2f_(3MVEC)

vatan_(3MVEC)

vatanf_(3MVEC)

vc_abs_(3MVEC)

vc_exp_(3MVEC)

vc_log_(3MVEC)

vcos_(3MVEC)

vcosf_(3MVEC)

vcospi_(3MVEC)

vcospif_(3MVEC)

vc_pow_(3MVEC)

vexp_(3MVEC)

vexpf_(3MVEC)

vhypot_(3MVEC)

vhypotf_(3MVEC)

vlog_(3MVEC)

vlogf_(3MVEC)

volmgt_acquire(3VOLMGT)

volmgt_check(3VOLMGT)

volmgt_feature_enabled(3VOLMGT)

volmgt_inuse(3VOLMGT)

volmgt_ownspath(3VOLMGT)

volmgt_release(3VOLMGT)

volmgt_root(3VOLMGT)

volmgt_running(3VOLMGT)

volmgt_symdev(3VOLMGT)

volmgt_symname(3VOLMGT)

vpow_(3MVEC)

vpowf_(3MVEC)

vrhypot_(3MVEC)

vrhypotf_(3MVEC)

vrsqrt_(3MVEC)

vrsqrtf_(3MVEC)

vsin_(3MVEC)

vsincos_(3MVEC)

vsincosf_(3MVEC)

vsincospi_(3MVEC)

vsincospif_(3MVEC)

vsinf_(3MVEC)

vsinpi_(3MVEC)

vsinpif_(3MVEC)

vsqrt_(3MVEC)

vsqrtf_(3MVEC)

vz_abs_(3MVEC)

vz_exp_(3MVEC)

vz_log_(3MVEC)

vz_pow_(3MVEC)

write_vtoc(3EXT)

wsreg_add_child_component(3WSREG)

wsreg_add_compatible_version(3WSREG)

wsreg_add_dependent_component(3WSREG)

wsreg_add_display_name(3WSREG)

wsreg_add_required_component(3WSREG)

wsreg_can_access_registry(3WSREG)

wsreg_clone_component(3WSREG)

wsreg_components_equal(3WSREG)

wsreg_create_component(3WSREG)

wsreg_free_component(3WSREG)

wsreg_free_component_array(3WSREG)

wsreg_get(3WSREG)

wsreg_get_all(3WSREG)

wsreg_get_child_components(3WSREG)

wsreg_get_compatible_versions(3WSREG)

wsreg_get_data(3WSREG)

wsreg_get_data_pairs(3WSREG)

wsreg_get_dependent_components(3WSREG)

wsreg_get_display_languages(3WSREG)

wsreg_get_display_name(3WSREG)

wsreg_get_id(3WSREG)

wsreg_get_instance(3WSREG)

wsreg_get_location(3WSREG)

wsreg_get_parent(3WSREG)

wsreg_get_required_components(3WSREG)

wsreg_get_type(3WSREG)

wsreg_get_uninstaller(3WSREG)

wsreg_get_unique_name(3WSREG)

wsreg_get_vendor(3WSREG)

wsreg_get_version(3WSREG)

wsreg_initialize(3WSREG)

wsreg_query_create(3WSREG)

wsreg_query_free(3WSREG)

wsreg_query_get_id(3WSREG)

wsreg_query_get_instance(3WSREG)

wsreg_query_get_location(3WSREG)

wsreg_query_get_unique_name(3WSREG)

wsreg_query_get_version(3WSREG)

wsreg_query_set_id(3WSREG)

wsreg_query_set_instance(3WSREG)

wsreg_query_set_location(3WSREG)

wsreg_query_set_unique_name(3WSREG)

wsreg_query_set_version(3WSREG)

wsreg_register(3WSREG)

wsreg_remove_child_component(3WSREG)

wsreg_remove_compatible_version(3WSREG)

wsreg_remove_dependent_component(3WSREG)

wsreg_remove_display_name(3WSREG)

wsreg_remove_required_component(3WSREG)

wsreg_set_data(3WSREG)

wsreg_set_id(3WSREG)

wsreg_set_instance(3WSREG)

wsreg_set_location(3WSREG)

wsreg_set_parent(3WSREG)

wsreg_set_type(3WSREG)

wsreg_set_uninstaller(3WSREG)

wsreg_set_unique_name(3WSREG)

wsreg_set_vendor(3WSREG)

wsreg_set_version(3WSREG)

wsreg_unregister(3WSREG)

Xbcleartos(3TSOL)

Xbsltos(3TSOL)

XTSOLgetClientAttributes(3XTSOL)

XTSOLgetPropAttributes(3XTSOL)

XTSOLgetPropLabel(3XTSOL)

XTSOLgetPropUID(3XTSOL)

XTSOLgetResAttributes(3XTSOL)

XTSOLgetResLabel(3XTSOL)

XTSOLgetResUID(3XTSOL)

XTSOLgetSSHeight(3XTSOL)

XTSOLgetWorkstationOwner(3XTSOL)

XTSOLIsWindowTrusted(3XTSOL)

XTSOLMakeTPWindow(3XTSOL)

XTSOLsetPolyInstInfo(3XTSOL)

XTSOLsetPropLabel(3XTSOL)

XTSOLsetPropUID(3XTSOL)

XTSOLsetResLabel(3XTSOL)

XTSOLsetResUID(3XTSOL)

XTSOLsetSessionHI(3XTSOL)

XTSOLsetSessionLO(3XTSOL)

XTSOLsetSSHeight(3XTSOL)

XTSOLsetWorkstationOwner(3XTSOL)

y0(3M)

y0f(3M)

y0l(3M)

y1(3M)

y1f(3M)

y1l(3M)

yn(3M)

ynf(3M)

ynl(3M)

TNF_DECLARE_RECORD

, TNF_DEFINE_RECORD_1

, TNF_DEFINE_RECORD_2

, TNF_DEFINE_RECORD_3

, TNF_DEFINE_RECORD_4

, TNF_DEFINE_RECORD_5

- TNF type extension interface for probes

Synopsis

cc [ flag ... ] file ...[ -ltnfprobe ] [ library ... ]
#include <tnf/probe.h>



TNF_DECLARE_RECORD(c_type, tnf_type);
TNF_DEFINE_RECORD_1(c_type, tnf_type, tnf_member_type_1, c_member_name_1);
TNF_DEFINE_RECORD_2(c_type, tnf_type, tnf_member_type_1, c_member_name_1,
     tnf_member_type_2, c_member_name_2);
TNF_DEFINE_RECORD_3(c_type, tnf_type, tnf_member_type_1, c_member_name_1,
     tnf_member_type_2, c_member_name_2, tnf_member_type_3,
     c_member_name_3);
TNF_DEFINE_RECORD_4(c_type, tnf_type, tnf_member_type_1, c_member_name_1,
     tnf_member_type_2, c_member_name_2, tnf_member_type_3,
     c_member_name_3, tnf_member_type_4, c_member_name_4);
TNF_DEFINE_RECORD_5(c_type, tnf_type, tnf_member_type_1, c_member_name_1,
     tnf_member_type_2, c_member_name_2, tnf_member_type_3,
     c_member_name_3,tnf_member_type_4, c_member_name_4,
     tnf_member_type_5, c_member_name_5);

Description

This macro interface is used to extend the TNF (Trace Normal Form) types that can be used in TNF_PROBE(3TNF).

There should be only one TNF_DECLARE_RECORD and one TNF_DEFINE_RECORD per new type being defined. The TNF_DECLARE_RECORD should precede the TNF_DEFINE_RECORD. It can be in a header file that multiple source files share if those source files need to use the tnf_type being defined. The TNF_DEFINE_RECORD should only appear in one of the source files.

The TNF_DEFINE_RECORD macro interface defines a function as well as a couple of data structures. Hence, this interface has to be used in a source file (.c or .cc file) at file scope and not inside a function.

Note that there is no semicolon after the TNF_DEFINE_RECORD interface. Having one will generate a compiler warning.

Compiling with the preprocessor option -DNPROBE (see cc(1B)), or with the preprocessor control statement #define NPROBE ahead of the #include <tnf/probe.h> statement, will stop the TNF type extension code from being compiled into the program.

The c_type argument must be a C struct type. It is the template from which the new tnf_type is being created. Not all elements of the C struct need be provided in the TNF type being defined.

The tnf_type argument is the name being given to the newly created type. Use of this interface uses the name space prefixed by tnf_type. If a new type called “xxx_type” is defined by a library, then the library should not use “xxx_type” as a prefix in any other symbols it defines. The policy on managing the type name space is the same as managing any other name space in a library; that is, prefix any new TNF types by the unique prefix that the rest of the symbols in the library use. This would prevent name space collisions when linking multiple libraries that define new TNF types. For example, if a library libpalloc.so uses the prefix “pal” for all symbols it defines, then it should also use the prefix “pal” for all new TNF types being defined.

The tnf_member_type_n argument is the TNF type of the nth provided member of the C structure.

The tnf_member_name_n argument is the name of the nth provided member of the C structure.

Examples

Example 1 Defining and using a TNF type.

The following example demonstrates how a new TNF type is defined and used in a probe. This code is assumed to be part of a fictitious library called “libpalloc.so” which uses the prefix “pal” for all it's symbols.

#include <tnf/probe.h>
typedef struct pal_header {
        long    size;
        char *  descriptor;
        struct pal_header *next;
} pal_header_t;
TNF_DECLARE_RECORD(pal_header_t, pal_tnf_header);
TNF_DEFINE_RECORD_2(pal_header_t, pal_tnf_header,
                        tnf_long,   size,
                        tnf_string, descriptor)
/*
 * Note: name space prefixed by pal_tnf_header should not 
 *       be used by this client anymore.
 */
void
pal_free(pal_header_t *header_p)
{
        int state;
        TNF_PROBE_2(pal_free_start, "palloc pal_free",
                "sunw%debug entering pal_free",
                tnf_long,       state_var,  state,
                pal_tnf_header, header_var, header_p);
        . . .
}

Attributes

See attributes(5) for descriptions of the following attributes:

ATTRIBUTE TYPE
ATTRIBUTE VALUE
Availability
SUNWtnfd
MT-Level
MT-Safe

See Also

prex(1), tnfdump(1), TNF_PROBE(3TNF), tnf_process_disable(3TNF), attributes(5)

Notes

It is possible to make a tnf_type definition be recursive or mutually recursive e.g. a structure that uses the “next” field to point to itself (a linked list). If such a structure is sent in to a TNF_PROBE(3TNF), then the entire linked list will be logged to the trace file (until the “next” field is NULL). But, if the list is circular, it will result in an infinite loop. To break the recursion, either don't include the “next” field in the tnf_type, or define the type of the “next” member as tnf_opaque.