Linker and Libraries Guide

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 segment 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 7-37 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 from one system to another. 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 it is specified explicitly. The following table lists both the exact flag interpretation and the allowable flag interpretation.

Table 7-38 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.