.BR dlsym ()
is breadth first through the dependency tree of these shared objects.)
.PP
-Since the value of the symbol could actually be NULL (so that a
-NULL return from
+In unusual cases (see NOTES) the value of the symbol could actually be NULL.
+Therefore, a NULL return from
.BR dlsym ()
-need not indicate an error), the correct way to test for an error
+need not indicate an error.
+The correct way to distinguish an error from a symbol whose value is NULL
is to call
.BR dlerror (3)
to clear any old error conditions, then call
.BR dlvsym ()
function is a GNU extension.
.SH NOTES
+The value of a symbol returned by
+.BR dlsym ()
+will never be NULL if the shared object is the result of normal compilation,
+since a global symbol is never placed at the NULL address.
+There are nevertheless cases where a lookup using
+.BR dlsym ()
+may return NULL as the value of a symbol.
+For example, the symbol value may be the result of
+a GNU indirect function (IFUNC) resolver function that returns
+NULL as the resolved value.
+.\"
.SS History
The
.BR dlsym ()