1#-------------------------------------------------------------------------------
2# elftools: elf/constants.py
3#
4# Constants and flags, placed into classes for namespacing
5#
6# Eli Bendersky (eliben@gmail.com)
7# This code is in the public domain
8#-------------------------------------------------------------------------------
9
10class E_FLAGS(object):
11    """ Flag values for the e_flags field of the ELF header
12    """
13    EF_ARM_EABIMASK=0xFF000000
14    EF_ARM_EABI_VER1=0x01000000
15    EF_ARM_EABI_VER2=0x02000000
16    EF_ARM_EABI_VER3=0x03000000
17    EF_ARM_EABI_VER4=0x04000000
18    EF_ARM_EABI_VER5=0x05000000
19    EF_ARM_GCCMASK=0x00400FFF
20    EF_ARM_RELEXEC=0x01
21    EF_ARM_HASENTRY=0x02
22    EF_ARM_SYMSARESORTED=0x04
23    EF_ARM_DYNSYMSUSESEGIDX=0x8
24    EF_ARM_MAPSYMSFIRST=0x10
25    EF_ARM_LE8=0x00400000
26    EF_ARM_BE8=0x00800000
27    EF_ARM_ABI_FLOAT_SOFT=0x00000200
28    EF_ARM_ABI_FLOAT_HARD=0x00000400
29
30    EF_MIPS_NOREORDER=1
31    EF_MIPS_PIC=2
32    EF_MIPS_CPIC=4
33    EF_MIPS_XGOT=8
34    EF_MIPS_64BIT_WHIRL=16
35    EF_MIPS_ABI2=32
36    EF_MIPS_ABI_ON32=64
37    EF_MIPS_32BITMODE = 256
38    EF_MIPS_NAN2008=1024
39    EF_MIPS_ARCH=0xf0000000
40    EF_MIPS_ARCH_1=0x00000000
41    EF_MIPS_ARCH_2=0x10000000
42    EF_MIPS_ARCH_3=0x20000000
43    EF_MIPS_ARCH_4=0x30000000
44    EF_MIPS_ARCH_5=0x40000000
45    EF_MIPS_ARCH_32=0x50000000
46    EF_MIPS_ARCH_64=0x60000000
47    EF_MIPS_ARCH_32R2=0x70000000
48    EF_MIPS_ARCH_64R2=0x80000000
49
50
51class E_FLAGS_MASKS(object):
52    """Masks to be used for convenience when working with E_FLAGS
53
54    This is a simplified approach that is also used by GNU binutils
55    readelf
56    """
57    EFM_MIPS_ABI = 0x0000F000
58    EFM_MIPS_ABI_O32 = 0x00001000
59    EFM_MIPS_ABI_O64 = 0x00002000
60    EFM_MIPS_ABI_EABI32 = 0x00003000
61    EFM_MIPS_ABI_EABI64 = 0x00004000
62
63
64class SHN_INDICES(object):
65    """ Special section indices
66    """
67    SHN_UNDEF=0
68    SHN_LORESERVE=0xff00
69    SHN_LOPROC=0xff00
70    SHN_HIPROC=0xff1f
71    SHN_ABS=0xfff1
72    SHN_COMMON=0xfff2
73    SHN_HIRESERVE=0xffff
74    SHN_XINDEX=0xffff
75
76
77class SH_FLAGS(object):
78    """ Flag values for the sh_flags field of section headers
79    """
80    SHF_WRITE=0x1
81    SHF_ALLOC=0x2
82    SHF_EXECINSTR=0x4
83    SHF_MERGE=0x10
84    SHF_STRINGS=0x20
85    SHF_INFO_LINK=0x40
86    SHF_LINK_ORDER=0x80
87    SHF_OS_NONCONFORMING=0x100
88    SHF_GROUP=0x200
89    SHF_TLS=0x400
90    SHF_COMPRESSED=0x800
91    SHF_MASKOS=0x0ff00000
92    SHF_EXCLUDE=0x80000000
93    SHF_MASKPROC=0xf0000000
94
95
96class RH_FLAGS(object):
97    """ Flag values for the DT_MIPS_FLAGS dynamic table entries
98    """
99    RHF_NONE=0x00000000
100    RHF_QUICKSTART=0x00000001
101    RHF_NOTPOT=0x00000002
102    RHF_NO_LIBRARY_REPLACEMENT=0x00000004
103    RHF_NO_MOVE=0x00000008
104    RHF_SGI_ONLY=0x00000010
105    RHF_GUARANTEE_INIT=0x00000020
106    RHF_DELTA_C_PLUS_PLUS=0x00000040
107    RHF_GUARANTEE_START_INIT=0x00000080
108    RHF_PIXIE=0x00000100
109    RHF_DEFAULT_DELAY_LOAD=0x00000200
110    RHF_REQUICKSTART=0x00000400
111    RHF_REQUICKSTARTED=0x00000800
112    RHF_CORD=0x00001000
113    RHF_NO_UNRES_UNDEF=0x00002000
114    RHF_RLD_ORDER_SAFE=0x00004000
115
116
117class P_FLAGS(object):
118    """ Flag values for the p_flags field of program headers
119    """
120    PF_X=0x1
121    PF_W=0x2
122    PF_R=0x4
123    PF_MASKOS=0x00FF0000
124    PF_MASKPROC=0xFF000000
125
126
127# symbol info flags for entries
128# in the .SUNW_syminfo section
129class SUNW_SYMINFO_FLAGS(object):
130    """ Flags for the si_flags field of entries
131        in the .SUNW_syminfo section
132    """
133    SYMINFO_FLG_DIRECT=0x1
134    SYMINFO_FLG_FILTER=0x2
135    SYMINFO_FLG_COPY=0x4
136    SYMINFO_FLG_LAZYLOAD=0x8
137    SYMINFO_FLG_DIRECTBIND=0x10
138    SYMINFO_FLG_NOEXTDIRECT=0x20
139    SYMINFO_FLG_AUXILIARY=0x40
140    SYMINFO_FLG_INTERPOSE=0x80
141    SYMINFO_FLG_CAP=0x100
142    SYMINFO_FLG_DEFERRED=0x200
143
144class VER_FLAGS(object):
145    VER_FLG_BASE=0x1
146    VER_FLG_WEAK=0x2
147    VER_FLG_INFO=0x4
148