loadquery Subroutine

Purpose

Returns error information from the load or exec subroutine; also provides a list of object files loaded for the current process.

Syntax

int loadquery( Flags Buffer,  BufferLength)
int Flags;
void *Buffer;
unsigned int BufferLength;

Description

The loadquery subroutine obtains detailed information about an error reported on the last load or exec subroutine executed by a calling process. The loadquery subroutine may also be used to obtain a list of object file names for all object files that have been loaded for the current process, or the library path that was used at process exec time.

Parameters

Item Description
Buffer Points to a Buffer in which to store the information.
BufferLength Specifies the number of bytes available in the Buffer parameter.
Flags Specifies the action of the loadquery subroutine as follows:
L_GETINFO
Returns a list of all object files loaded for the current process, and stores the list in the Buffer parameter. The object file information is contained in a sequence of LD_INFO structures as defined in the sys/ldr.h file. Each structure contains the module location in virtual memory and the path name that was used to load it into memory. The file descriptor field in the LD_INFO structure is not filled in by this function.
L_GETMESSAGE
Returns detailed error information describing the failure of a previously invoked load or exec function, and stores the error message information in Buffer. Upon successful return from this function the beginning of the Buffer contains an array of character pointers. Each character pointer points to a string in the buffer containing a loader error message. The character array ends with a null character pointer. Each error message string consists of an ASCII message number followed by zero or more characters of error-specific message data. Valid message numbers are listed in the sys/ldr.h file.

You can format the error messages returned by the L_GETMESSAGE function and write them to standard error using the standard system command /usr/sbin/execerror as follows:

char *buffer[1024];
buffer[0] = "execerror";
buffer[1] = "name of program that failed to load";
loadquery(L_GETMESSAGES, &buffer[2],\
  sizeof buffer-2*sizeof(char*));
execvp("/usr/sbin/execerror",buffer);

This sample code causes the application to terminate after the messages are written to standard error.

L_GETLIBPATH
Returns the library path that was used at process exec time. The library path is a null terminated character string.
L_GETXINFO
Returns a list of all object files loaded for the current process and stores the list in the Buffer parameter. The object file information is contained in a sequence of LD_XINFO structures as defined in the sys/ldr.h file. Each structure contains the module location in virtual memory and the path name that was used to load it into memory. The file descriptor field in the LD_XINFO structure is not filled in by this function.

Return Values

Upon successful completion, loadquery returns the requested information in the caller's buffer specified by the Buffer and BufferLength parameters.

Error Codes

The loadquery subroutine returns with a return code of -1 and the errno global variable is set to one of the following when an error condition is detected:

Item Description
ENOMEM Indicates that the caller's buffer specified by the Buffer and BufferLength parameters is too small to return the information requested. When this occurs, the information in the buffer is undefined.
EINVAL Indicates the function specified in the Flags parameter is not valid.
EFAULT Indicates the address specified in the Buffer parameter is not valid.