URI: 
       elfent.h - scc - simple c99 compiler
  HTML git clone git://git.simple-cc.org/scc
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
   DIR README
   DIR LICENSE
       ---
       elfent.h (3102B)
       ---
            1 /* See http://www.sco.com/developers/gabi/latest/contents.html */
            2 
            3 /* Symbol table index */
            4 #define STN_UNDEF       0               /* undefined */
            5 
            6 /* Extract symbol info - st_info */
            7 #define ELF_ST_BIND(x)        ((x) >> 4)
            8 #define ELF_ST_TYPE(x)        (((unsigned int) x) & 0xf)
            9 #define ELF_ST_INFO(b,t)      (((b) << 4) + ((t) & 0xf))
           10 
           11 #define ELF32_ST_BIND(x)        ELF_ST_BIND(x)
           12 #define ELF32_ST_TYPE(x)        ELF_ST_TYPE(x)
           13 #define ELF32_ST_INFO(b,t)      ELF_ST_INFO(b, t)
           14 
           15 #define ELF64_ST_BIND(x)        ELF_ST_BIND(x)
           16 #define ELF64_ST_TYPE(x)        ELF_ST_TYPE(x)
           17 #define ELF64_ST_INFO(b,t)      ELF_ST_INFO(b, t)
           18 
           19 /* Symbol Binding - ELF32_ST_BIND - st_info */
           20 #define STB_LOCAL       0               /* Local symbol */
           21 #define STB_GLOBAL      1               /* Global symbol */
           22 #define STB_WEAK        2               /* like global - lower precedence */
           23 #define STB_NUM         3               /* number of symbol bindings */
           24 #define STB_LOPROC      13              /* reserved range for processor */
           25 #define STB_HIPROC      15              /*  specific symbol bindings */
           26 
           27 /* Symbol type - ELF32_ST_TYPE - st_info */
           28 #define STT_NOTYPE      0               /* not specified */
           29 #define STT_OBJECT      1               /* data object */
           30 #define STT_FUNC        2               /* function */
           31 #define STT_SECTION     3               /* section */
           32 #define STT_FILE        4               /* file */
           33 #define STT_COMMON      5               /* common symbol */
           34 #define STT_TLS         6               /* thread local storage */
           35 #define STT_LOPROC      13              /* reserved range for processor */
           36 #define STT_HIPROC      15              /*  specific symbol types */
           37 
           38 /* Extract symbol visibility - st_other */
           39 #define ELF_ST_VISIBILITY(v)            ((v) & 0x3)
           40 #define ELF32_ST_VISIBILITY             ELF_ST_VISIBILITY
           41 #define ELF64_ST_VISIBILITY             ELF_ST_VISIBILITY
           42 
           43 #define STV_DEFAULT     0               /* Visibility set by binding type */
           44 #define STV_INTERNAL    1               /* OS specific version of STV_HIDDEN */
           45 #define STV_HIDDEN      2               /* can only be seen inside own .so */
           46 #define STV_PROTECTED   3               /* HIDDEN inside, DEFAULT outside */
           47 
           48 #define ELFE32SZ        16
           49 #define ELFE64SZ        24
           50 
           51 typedef struct elf32_sym Elf32_Sym;
           52 typedef struct elf64_sym Elf64_Sym;
           53 
           54 /* Symbol Table Entry */
           55 struct elf32_sym {
           56         Elf32_Word      st_name;        /* name - index into string table */
           57         Elf32_Addr      st_value;       /* symbol value */
           58         Elf32_Word      st_size;        /* symbol size */
           59         unsigned char   st_info;        /* type and binding */
           60         unsigned char   st_other;       /* visibility */
           61         Elf32_Half      st_shndx;       /* section header index */
           62 };
           63 
           64 struct elf64_sym {
           65         Elf64_Word      st_name;        /* Symbol name index in str table */
           66         unsigned char   st_info;        /* type / binding attrs */
           67         unsigned char   st_other;       /* visibility */
           68         Elf64_Half      st_shndx;       /* section index of symbol */
           69         Elf64_Addr      st_value;       /* value of symbol */
           70         Elf64_Xword     st_size;        /* size of symbol */
           71 };