Routine layout

The following table shows the two types of AMODE 64 entry points that Language Environment recognizes as Language Environment-conforming routines.

Table 1. AMODE 64 entry points
Entry point type is… If…
Language Environment-conforming XPLINK The entry point minus 16 is X'00C300C500C500F1'. XPLINK linkage conventions are used. For layout detail see Figure 1.
CELQSTRT CSECT The entry point + 32 is CL8'CEESTART'.

The layout entry for XPLINK routines is shown in Figure 1. The layout entry for XPLINK routines is defined by the Version field at offset X'00' in the PPA1, see Figure 1.

Figure 1. Layout entry of Language Environment-conforming routines – XPLINK
Layout entry of -conforming routines - XPLINK
Eyecatcher
A 7-byte field containing the XPLINK eyecatcher, XL7'00C300C500C500'.
Mark Type
Field marking the type of code. Entry code is C'1'.
Offset to PPA1
A signed fullword representing the offset from the start of the entry marker to the start of the PPA1.
DSA Size/32
A 27-bit field representing the size of the routine's DSA in 32-byte increments.
Entry Flags
A 5-bit field containing flag bits to identify the type of routine. If bit 1 is on, the routine is an XPLEAF routine. XPLEAF routines save caller's registers in their own stack frame, but do not update the stack pointer. Bit 2 indicates whether the routine uses the alloca() service.

The compiler emits an XPLINK stack extension marker in front of the call to Language Environment for the overflow prolog sequence for the +4K DSA scenario. Figure 2 depicts this marker.

Figure 2. XPLINK stack extension marker
XPLINK stack extension marker
Eyecatcher
A 7-byte field containing the XPLINK eyecatcher, XL7'00C300C500C500'.
Mark Type
Field marking the type of code. XPLINK stack extension is C'2'.
Offset to entry marker from XPLINK stack extension marker/8
The signed offset from the start of the XPLINK stack extension marker to the start of the entry point marker in doublewords.

The XPLINK end of data marker is placed after, or at the end of a section of code, where the compiler may have placed constants. Language Environment's asynchronous signal deliverer uses this in its scan backwards to identify that a signal did not arrive inside a function's prolog. Figure 3 depicts this marker.

Figure 3. XPLINK end of data marker
XPLINK end of data marker
Eyecatcher
A 7-byte field containing the XPLINK eyecatcher, XL7'00C300C500C500'.
Mark Type
Field marking the type of code. XPLINK end of data is C'3'.
Offset to entry marker from XPLINK end of data marker/8
The signed offset from the start of XPLINK end of data marker to the start of the entry point marker in doublewords.

Language Environment implements an 8-byte XPLINK stub entry marker for Language Environment and C runtime stubs. Figure 4 depicts this marker.

Figure 4. XPLINK stub entry marker
XPLINK stub entry marker
Eyecatcher
A 7-byte field containing the XPLINK eyecatcher, XL7'00C300C500C500'.
Mark Type
Field marking the type of code. XPLINK Stub is Entry C'4'.