6.3 Auxiliary vectors

Ironclad supports passing auxiliary vectors to the started processes. Auxiliary vectors are tags of data passed on the stack to programs detailing additional data. These values are passed behind envp.

Each vector consists of a pair of values: an identifier, and a 64-bit integer.

The vectors passed by the kernel by value are:

AT_NULL (0)

Signifies the end of the vector chain.

AT_PHDR (3)

The address of the program headers of the executable.

AT_PHENT (4)

The size of program header entry.

AT_PHNUM (5)

The number of program headers.

AT_PAGESZ (6)

Minimum MMU page size of the system.

AT_FLAGS (8)

ELF flags for the executable, by spec, for now always equal to zero.

AT_ENTRY (9)

The entrypoint of the executable.

AT_UID (11)

UID of the process executing.

AT_EUID (12)

EID of the process executing.

AT_GID (13)

GID of the process executing.

AT_EGID (14)

EGID of the process executing.

AT_HWCAP (16)

Bitmask of CPU features, this field contains the following architecture specific flags:

riscv64-limine

Reserved for future use.

x86_64-limine

Reserved for future use.

AT_SECURE (23)

The value will be 1 if the executable is to be treated securely, 0 if not. This flag will be set by Ironclad when the program holds the MAC_CAP_SCHED capability.

AT_RANDOM (25)

Address pointing to 16 bytes of random data.