  | 
HP OpenVMS RTL Library (LIB$) Manual
HP OpenVMS RTL Library (LIB$) Manual
LIB$GET_VM_PAGE
The Get Virtual Memory Page routine allocates a specified number of 
contiguous pages on VAX systems or pagelets on Alpha and I64 systems of 
memory in the program region and returns the virtual address of the 
first allocated page on VAX or pagelet on Alpha or I64.
  Note 
No support for arguments passed by 64-bit address reference or for use 
of 64-bit descriptors, if applicable, is planned for this routine. 
     | 
  
Format
LIB$GET_VM_PAGE number-of-pages ,base-address
RETURNS
  
    | OpenVMS usage:  | 
    cond_value | 
  
  
    | type:  | 
    longword (unsigned) | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by value | 
  
Arguments
number-of-pages
  
    | OpenVMS usage:  | 
    longword_signed | 
  
  
    | type:  | 
    longword integer (signed) | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by reference | 
  
Number of pages on VAX systems or pagelets on Alpha and I64 systems. 
The number-of-pages argument is the address of a 
longword integer that specifies the number of contiguous pages on VAX 
systems or pagelets on Alpha and I64 systems to be allocated. The value 
of number-of-pages must be greater than 0.
base-address
  
    | OpenVMS usage:  | 
    address | 
  
  
    | type:  | 
    longword (unsigned) | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by reference | 
  
Block address. The base-address argument is the 
address of a longword that is set to the address of the first byte of 
the newly allocated block of pages on VAX systems or pagelets on Alpha 
and I64 systems.
Description
LIB$GET_VM_PAGE allocates blocks of contiguous (512 byte) pages on VAX 
systems and pagelets on Alpha and I64 systems in the program region. 
LIB$GET_VM_PAGE manages a processwide pool of free pages. If there are 
not enough contiguous free pages or pagelets to satisfy an allocation 
request, additional pages are created by calling the system service 
$EXPREG. All memory allocated by LIB$GET_VM_PAGE is pagelet aligned; 
that is, the low-order nine bits of the base address are zero.
All memory allocated by LIB$GET_VM_PAGE has user-mode read/write 
access, even if the call to LIB$GET_VM_PAGE is made from a more 
privileged access mode.
The contents of memory allocated by LIB$GET_VM_PAGE are unpredictable. 
Your program must assign values to all locations that it uses.
 LIB$GET_VM_PAGE is designed for request sizes ranging from one page or 
 pagelet to a few hundred pages or pagelets. For very large request 
 sizes (over 1000 pages or pagelets in a single request), you should 
 call the system service $EXPREG.
LIB$GET_VM_PAGE is fully reentrant, so it can be called by routines 
executing at AST level or in an Ada multitasking environment.
Condition Values Returned
  
    | 
      SS$_NORMAL
     | 
    
      Routine successfully completed.
     | 
  
  
    | 
      LIB$_BADBLOSIZ
     | 
    
      The value of the
      number-of-pages argument is less than or equal to 0.
     | 
  
  
    | 
      LIB$_INSVIRMEM
     | 
    
      Insufficient virtual memory. The request required more dynamic memory 
      than was available from the operating system. No partial allocation is 
      made in this case.
     | 
  
LIB$GET_VM_PAGE_64 (Alpha and I64 Only)
The Get Virtual Memory Page routine allocates a specified number of 
contiguous Alpha or I64 pagelets of memory in the program region and 
returns the virtual address of the first allocated pagelet.
Format
LIB$GET_VM_PAGE_64 number-of-pages ,base-address
RETURNS
  
    | OpenVMS usage:  | 
    cond_value | 
  
  
    | type:  | 
    longword (unsigned) | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by value | 
  
Arguments
number-of-pages
  
    | OpenVMS usage:  | 
    quadword_signed | 
  
  
    | type:  | 
    quadword integer (signed) | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by reference | 
  
Number of Alpha or I64 pagelets. The number-of-pages 
argument is the address of a quadword integer that specifies the number 
of contiguous Alpha or I64 pagelets to be allocated. The value of 
number-of-pages must be greater than 0.
base-address
  
    | OpenVMS usage:  | 
    address | 
  
  
    | type:  | 
    quadword (unsigned) | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by reference | 
  
Block address. The base-address argument is the 
address of a quadword that is set to the address of the first byte of 
the newly allocated block of Alpha or I64 pagelets.
Description
LIB$GET_VM_PAGE_64 allocates blocks of contiguous Alpha or I64 pagelets 
in the program region. LIB$GET_VM_PAGE_64 manages a processwide pool of 
free pagelets. If there are not enough contiguous free pagelets to 
satisfy an allocation request, additional pagelets are created by 
calling the system service $EXPREG_64. All memory allocated by 
LIB$GET_VM_PAGE_64 is aligned to physical page size.
All memory allocated by LIB$GET_VM_PAGE_64 has user-mode read/write 
access, even if the call to LIB$GET_VM_PAGE_64 is made from a more 
privileged access mode.
The contents of memory allocated by LIB$GET_VM_PAGE_64 are 
unpredictable. Your program must assign values to all locations that it 
uses.
LIB$GET_VM_PAGE_64 is fully reentrant, so it can be called by routines 
executing at AST level or in an Ada multitasking environment.
Condition Values Returned
  
    | 
      SS$_NORMAL
     | 
    
      Routine successfully completed.
     | 
  
  
    | 
      LIB$_BADBLOSIZ
     | 
    
      The value of the argument
      number-of-pages is less than or equal to 0.
     | 
  
  
    | 
      LIB$_INSVIRMEM
     | 
    
      Insufficient virtual memory. The request required more dynamic memory 
      than was available from the operating system. No partial allocation is 
      made in this case.
     | 
  
LIB$I64_CREATE_INVO_CONTEXT (I64 Only)
The Create Invocation Context routine allocates an invocation context 
block from heap storage and initializes it.
Format
 LIB$I64_CREATE_INVO_CONTEXT [malloc] [,free] [,ident]
RETURNS
  
    | OpenVMS usage:  | 
    cond_value | 
  
  
    | type:  | 
    longword (unsigned) | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by value | 
  
Arguments
malloc
  
    | OpenVMS usage:  | 
    function_value | 
  
  
    | type:  | 
    procedure | 
  
  
    | access:  | 
    read | 
  
  
    | mechanism: | 
    by value | 
  
A procedure reference for a user callback routine that allocates 
memory. This is an optional argument. The default is to use an 
implementation of the C RTL routine malloc. If 
specified, this routine is used to allocate the invocation context 
block field LIBICB$PH_UO_MALLOC for use during the stack walk.
free
  
    | OpenVMS usage:  | 
    function_value | 
  
  
    | type:  | 
    procedure | 
  
  
    | access:  | 
    read | 
  
  
    | mechanism: | 
    by value | 
  
A procedure reference for a user callback routine that deallocates 
memory. This value is placed in the invocation context block field 
LIBICB$PH_UO_FREE. This is an optional argument; however, it must be 
specified if malloc is specified. The default is to 
use an implementation of the C RTL routine free.
ident
  
    | OpenVMS usage:  | 
    user_value | 
  
  
    | type:  | 
    quadword | 
  
  
    | access:  | 
    read | 
  
  
    | mechanism: | 
    by value | 
  
Specifies a user ident value to be placed in the 
invocation context block LIBICB$IH_UO_IDENT field. In turn, this value 
is passed to the malloc and free 
routines. This is an optional argument; the default value is zero.
Description
LIB$I64_CREATE_INVO_CONTEXT simplifies creating and properly 
initializing an invocation context block. The routine allocates an 
invocation context block from heap storage and initializes it. Users of 
this routine should call LIB$I64_FREE_INVO_CONTEXT when the invocation 
context block is no longer required.
This routine sets the cache unwind flag LIBICB$V_UO_FLAG_CACHE_UNWIND 
in the invocation context block to speed up the stack walk. Do not use 
this routine in conjunction with LIB$I64_INIT_INVO_CONTEXT, as the same 
initialization is performed by both routines.
Condition Values Returned
  
    | 
      0
     | 
    
      Indicates failure.
     | 
  
  
    | 
      any non-zero value
     | 
    
      Represents the address of the allocated invocation context block.
     | 
  
LIB$I64_FREE_INVO_CONTEXT (I64 Only)
The Free Invocation Context Block routine deallocates an invocation 
context block that was previously allocated.
Format
 LIB$I64_FREE_INVO_CONTEXT invo_context
RETURNS
  
    | OpenVMS usage:  | 
    cond_value | 
  
  
    | type:  | 
    longword (unsigned) | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by value | 
  
Argument
invo_context
  
    | OpenVMS usage:  | 
    invo_context_blk | 
  
  
    | type:  | 
    structure | 
  
  
    | access:  | 
    modify only | 
  
  
    | mechanism: | 
    by reference | 
  
Address of an invocation context block.
Description
LIB$I64_FREE_INVO_CONTEXT deallocates an invocation context block that 
was previously allocated using LIB$I64_CREATE_INVO_CONTEXT. This 
routine calls LIB$I64_PREV_INVO_END as a convenience.
Condition Values Returned
None.
LIB$I64_GET_CURR_INVO_CONTEXT (I64 Only)
The Get Current Invocation Context routine gets the invocation context 
of a current procedure.
Format
 LIB$I64_GET_CURR_INVO_CONTEXT invo_context
RETURNS
  
    | OpenVMS usage:  | 
    cond_value | 
  
  
    | type:  | 
    longword (unsigned) | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by value | 
  
Argument
invo_context
  
    | OpenVMS usage:  | 
    invo_context_blk | 
  
  
    | type:  | 
    structure | 
  
  
    | access:  | 
    modify only | 
  
  
    | mechanism: | 
    by reference | 
  
Address of an invocation context block into which the procedure context 
of the caller will be written.
Description
LIB$I64_GET_CURR_INVO_CONTEXT gets the invocation context of a current 
procedure. The invocation context block must be properly initialized as 
described in the HP OpenVMS Calling Standard manual before calling this routine.
Condition Values Returned
  
    | 
      0
     | 
    
      Facilitates use in the implementation of the C language unwind
      
      setjmp
      
               or
      
      longjmp
      
               function. Check the LIBICB$L_ALERT_CODE field of the invocation context 
               block for further status indication.
     | 
  
LIB$I64_GET_CURR_INVO_HANDLE (I64 Only)
The Get Current Invocation Handle routine gets the invocation handle 
for the current procedure.
Format
 LIB$I64_GET_CURR_INVO_HANDLE invo_handle
RETURNS
  
    | OpenVMS usage:  | 
    cond_value | 
  
  
    | type:  | 
    longword (unsigned) | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by value | 
  
Argument
invo_handle
  
    | OpenVMS usage:  | 
    invo_handle | 
  
  
    | type:  | 
    quadword | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by reference | 
  
Address of a quadword into which the invocation handle of the caller 
will be written.
Description
LIB$I64_GET_CURR_INVO_HANDLE gets the invocation handle for the current 
procedure.
Condition Values Returned
  
    | 
      0
     | 
    
      The initial context represents the bottom of the call stack.
     | 
  
  
    | 
      1
     | 
    
      Indicates success.
     | 
  
  
    | 
      3
     | 
    
      The current operation completed without error, but a stack corruption 
      was detected at the next level down.
     | 
  
LIB$I64_GET_FR (I64 Only)
The Get Floating-Point Register routine copies the value of the 
floating-point register.
Format
 LIB$I64_GET_FR invo_context, index, fr_copy
RETURNS
  
    | OpenVMS usage:  | 
    cond_value | 
  
  
    | type:  | 
    longword (unsigned) | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by value | 
  
Argument
invo_context
  
    | OpenVMS usage:  | 
    invo_context_blk | 
  
  
    | type:  | 
    structure | 
  
  
    | access:  | 
    read | 
  
  
    | mechanism: | 
    by reference | 
  
Address of a valid invocation context block.
index
  
    | OpenVMS usage:  | 
    index | 
  
  
    | type:  | 
    longword | 
  
  
    | access:  | 
    read | 
  
  
    | mechanism: | 
    by value | 
  
Floating point register index.
fr_copy
  
    | OpenVMS usage:  | 
    floating-point value | 
  
  
    | type:  | 
    octaword | 
  
  
    | access:  | 
    write | 
  
  
    | mechanism: | 
    by value | 
  
Address of an octaword to receive the contents of the specified 
floating-point register.
Description
Given an invocation context block and floating-point register 
index such that 0 <= index < 
128, LIB$I64_GET_FR copies the register value to 
fr_copy. For example, an index value 
of 4 fetches the value, which represents the contents of F4 for the 
context.
LIB$I64_GET_FR returns failure status if the index represents a scratch 
register whose contents have not been realized.
Condition Values Returned
  
    | 
      0
     | 
    
      Indicates failure.
     | 
  
  
    | 
      1
     | 
    
      Indicates success.
     | 
  
LIB$I64_GET_GR (I64 Only)
The Get Invocation Context Block Value routine fetches the invocation 
context block IREG[4] value.
Format
 LIB$I64_GET_GR invo_context, index, gr_copy
RETURNS
  
    | OpenVMS usage:  | 
    longword_unsigned | 
  
  
    | type:  | 
    longword (unsigned) | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by value | 
  
Argument
invo_context
  
    | OpenVMS usage:  | 
    invo_context_blk | 
  
  
    | type:  | 
    structure | 
  
  
    | access:  | 
    read | 
  
  
    | mechanism: | 
    by reference | 
  
Address of a valid invocation context block.
index
  
    | OpenVMS usage:  | 
    index | 
  
  
    | type:  | 
    longword | 
  
  
    | access:  | 
    read | 
  
  
    | mechanism: | 
    by value | 
  
Index into the IREG array of the invocation context block.
gr_copy
  
    | OpenVMS usage:  | 
    floating-point value | 
  
  
    | type:  | 
    octaword | 
  
  
    | access:  | 
    write | 
  
  
    | mechanism: | 
    by value | 
  
Address of an octaword to receive the value from the invocation context 
block.
Description
Given an invocation context block and general register 
index such that 0 <= index < 
128, LIB$I64_GET_GR copies the register value to 
gr_copy, for example, index 4 fetches 
the invocation context block IREG[4] value, which represents the 
contents of R4 for the context.
If the register represented by index has its 
corresponding NaT bit set, the read succeeds and the return status is 
set to 3. If the register represented by index lies 
beyond the allocated general registers, the read fails and 
gr_copy is unchanged. That is, the highest allowed 
index is 32 + ICB.CFM.SOF - 1.
LIB$I64_GET_GR fails if the index represents a scratch register whose 
contents have not been realized.
Condition Values Returned
  
    | 
      0
     | 
    
      Indicates failure.
     | 
  
  
    | 
      1
     | 
    
      Indicates success, and that the NaT bit was clear.
     | 
  
  
    | 
      3
     | 
    
      Indicates success, and that the NaT bit was set.
     | 
  
LIB$I64_GET_INVO_CONTEXT (I64 Only)
The Get Invocation Context routine gets the invocation context of any 
active procedure.
Format
 LIB$I64_GET_INVO_CONTEXT invo_handle, invo_context
RETURNS
  
    | OpenVMS usage:  | 
    cond_value | 
  
  
    | type:  | 
    longword (unsigned) | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by value | 
  
Arguments
invo_handle
  
    | OpenVMS usage:  | 
    invo_handle | 
  
  
    | type:  | 
    quadword  | 
  
  
    | access:  | 
    modify only | 
  
  
    | mechanism: | 
    by reference | 
  
Address of an invocation context block into which the procedure context 
of the frame specified by invo_handle will be written.
invo_context
  
    | OpenVMS usage:  | 
    invo_context_blk | 
  
  
    | type:  | 
    structure | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by reference | 
  
Address of an invocation context block into which the procedure context 
of the frame specified by invo_handle will be written.
Description
LIB$I64_GET_INVO_CONTEXT gets the invocation context of any active 
procedure.
  Note 
The invocation context block must be properly 
initialized as described in the HP OpenVMS Calling Standard manual before calling 
this routine. 
     | 
  
Condition Value Returned
  
    | 
      0
     | 
    
      Facilitates use in the implementation of the C language unwind
      
      setjmp
      
               or
      
      longjmp
      
               function. Check the LIBICB$L_ALERT_CODE field of the invocation context 
               block for further status indication.
     |