When arguments and their descriptors are passed by descriptor-locator, whenever an argument requires a descriptor, the address of a locator/descriptor for it is passed instead.
Except for strings, the locator/descriptor is a pair of pointers. The first pointer is the address of the data; the second pointer is the address of the descriptor. For strings, under CMPAT(LE), the locator/descriptor is still such a pair of pointers. But under the other CMPAT options, the locator/descriptor consists of the address of the string and then the string descriptor itself.
So, for example, suppose the routine sample is declared again as
declare sample entry( fixed bin(31), varying char(*) )
options( byaddr descriptor );Then, if sample is called as in the following statement
call sample( 1, 'test' );
The following two arguments are passed to the routine: