Segment Permissions

A program to be loaded by the system must have at least one loadable segment,
although this restriction is not required by the file format. When the system creates loadable segment memory images, the system gives access permissions, as specified in the p_flags member.
All bits that are included in the PF_MASKPROC mask are reserved for processor-specific semantics.

Table 7–26 ELF Segment Flags

Name

Value

Meaning

PF_X

0x1

Execute

PF_W

0x2

Write

PF_R

0x4

Read

PF_MASKPROC

0xf0000000

Unspecified

If a permission bit is 0, that bit's type of access is denied. Actual memory permissions depend on the memory management unit, which can vary between systems. Although all
flag combinations are valid, the system can grant more access than requested. In no case, however, will a segment have write permission unless this permission is specified explicitly. The following
table lists both the exact flag interpretation and the allowable flag interpretation.

Table 7–27 ELF Segment Permissions

Flags

Value

Exact

Allowable

None

0

All access denied

All access denied

PF_X

1

Execute only

Read, execute

PF_W

2

Write only

Read, write, execute

PF_W + PF_X

3

Write, execute

Read, write, execute

PF_R

4

Read only

Read, execute

PF_R + PF_X

5

Read, execute

Read, execute

PF_R + PF_W

6

Read, write

Read, write, execute

PF_R + PF_W + PF_X

7

Read, write, execute

Read, write, execute

For example, typical text segments have read and execute, but not write
permissions. Data segments normally have read, write, and execute permissions.