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
pointsEntry 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
- 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
- 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
- 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
- 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'.