| 1 || CODE || This segment has executable code to be copied from the data section to memory (segment data may be compressed)

+

| 1 || CODE || This segment has executable code to be copied from the data section to memory (segment data may be compressed if specified by the LAR)

|-

|-

−

| 2 || DATA || This segment has non-executable data to be copied from the data section into memory (segment data may be compressed)

+

| 2 || DATA || This segment has non-executable data to be copied from the data section into memory (segment data may be compressed if specified by the LAR)

|-

|-

| 3 || BSS || This segment defines a section of memory to be zeroed. Nothing is copied into memory.

| 3 || BSS || This segment defines a section of memory to be zeroed. Nothing is copied into memory.

Revision as of 22:51, 12 April 2008

SELF stands for Simple Executable Loader Format. It is a very simple take on the standard [ELF] executable format. It is proposed that SELF be the the standard format for payload code stored in a LAR file and loaded and executed by coreboot-v3. The bayou chooser will also load and run payloads in the SELF format.

Contents

Description

Each SELF file is defined as a group of different segments. Each segment either loads data into memory, zeroes a section of memory, or provides information to coreboot or the payload. The segments can be one of the following types:

ID

Segment

Description

1

CODE

This segment has executable code to be copied from the data section to memory (segment data may be compressed if specified by the LAR)

2

DATA

This segment has non-executable data to be copied from the data section into memory (segment data may be compressed if specified by the LAR)

3

BSS

This segment defines a section of memory to be zeroed. Nothing is copied into memory.

4

NAME

This segment contains a descriptive string in the data section that is used by the payload loader to identify the current payload. Nothing is copied into memory (segment data must not be compressed)

5

NOTES

This segment contains the contents of the .notes section in the data segment. This is for use by the payload loader. Nothing is copied into memory (segment data must not be compressed)

6

ENTRY

This segment defines the entry point for execution. This type signifies the end of the list of segments. It is mandatory and can only be used once.

Format

A SELF file is comprised of two parts: the segment table and the data section. Each is described below.

Segment Table

The segment table is located at the start of the ELF file, with one entry per segement. Each segment is identified by its type (as listed above). The structure of the header entry is as follows:

All fields are present in each segment entry, though not every field will be valid for every segment type. The following table lists which members are used and what they mean:

Type

offset

load_addr

len

mem_len

CODE

Offset of the segment in the SELF file

address where the code should be copied in memory

length of the data in the segment data section

length of the data in memory

DATA

Offset of the segment in the SELF file

address where the code should be copied in memory

length of the data in the segment data section

length of the data in memory

BSS

N/A

Start address of the block in memory to be zeroed

N/A

Length of the block in memory to be zeroed

NAME

Offset of the segment in the SELF file

N/A

length of the data in the segment data section

N/A

NOTES

Offset of the segment in the SELF file

N/A

length of the data in the segment data section

N/A

ENTRY

N/A

Address where execution should start

N/A

N/A

Segment Section

The data section immediately follows the final entry in the segment table. Each block of segment data is written sequentially in this section. CODE and DATA sections may be compressed, NAME and NOTES sections must be uncompressed.

Typical Use

There are two usage models for the SELF. The first is the payload loader that wishes to determine the name of the payload for a graphical chooser. The following is the psuedo code for accomplishing this: