Developer's Topics
Chapter 8, ELF object files

Segment permissions

Segment permissions

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

Table 8-14 Segment flag bits, p_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 type of access is denied. Actual memory permissions depend on the memory management unit, which may vary from one system to another. Although all flag combinations are valid, the system may grant more access than requested. However, a segment will never have write permission unless it is specified explicitly. The following table shows both the exact flag interpretation and the allowable flag interpretation.

Table 8-15 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.