The software described in this documentation is either in Extended Support or Sustaining Support. See https://www.oracle.com/us/support/library/enterprise-linux-support-policies-069172.pdf for more information.
Oracle recommends that you upgrade the software described by this documentation as soon as possible.
The implementation of pointers in the D language gives you the
ability to create and manipulate the memory addresses of data
objects in the operating system kernel, and to store the
contents of those data objects in variables and associative
arrays. The syntax of D pointers is the same as the syntax of
pointers in ANSI-C. For example, the following statement
declares a D global variable named p
that is
a pointer to an integer.
int *p;
This declaration means that p
itself is a
64-bit integer whose value is the address in memory of another
integer.
If you want to create a pointer to a data object inside the
kernel, you can compute its address by using the
&
reference operator. For example, the
kernel source code declares an unsigned long
max_pfn
variable. You can access the value of such an
external variable in the D language by
prefixing it with the `
(backquote) scope
operator:
value = `max_pfn;
If more than one kernel module declares a variable with the same
name, prefix the scoped external variable with the name of the
module. For example, foo`bar
would refer to
the address of the bar()
function provided by
the module foo
.
You can extract the address of an external variable by applying
the &
operator and store it as a pointer:
p = &`max_pfn;
You can use the *
dereference operator to
refer to the object that a pointer addresses:
value = *p;
You cannot apply the &
operator to DTrace
objects such as associative arrays, built-in functions, and
variables. If you create composite structures, it is possible to
construct expressions that retrieve the kernel addresses of
DTrace objects. However, DTrace does not guarantee to preserve
the addresses of such objects across probe firings.
You cannot use the *
dereference operator on
the left-hand side of an assignment expression. You may only
assign values directly to D variables by name or by applying the
array index operator []
to a scalar array or
an associative array.
You cannot use pointers to perform indirect function calls. You may only call DTrace functions directly by name.