LCOV - code coverage report
Current view: top level - ballet/elf - fd_elf.h (source / functions) Hit Total Coverage
Test: cov.lcov Lines: 31 31 100.0 %
Date: 2024-11-13 11:58:15 Functions: 2 47 4.3 %

          Line data    Source code
       1             : #ifndef HEADER_fd_src_ballet_elf_fd_elf_h
       2             : #define HEADER_fd_src_ballet_elf_fd_elf_h
       3             : 
       4             : /* Executable and Linking Format (ELF) */
       5             : 
       6             : #include "../../util/fd_util.h"
       7             : #include <string.h>
       8             : 
       9             : /* FD_ELF_EI: File type related */
      10             : 
      11             : #define FD_ELF_EI_MAG0        0
      12             : #define FD_ELF_EI_MAG1        1
      13             : #define FD_ELF_EI_MAG2        2
      14             : #define FD_ELF_EI_MAG3        3
      15             : #define FD_ELF_EI_CLASS       4
      16             : #define FD_ELF_EI_DATA        5
      17             : #define FD_ELF_EI_VERSION     6
      18             : #define FD_ELF_EI_OSABI       7
      19             : #define FD_ELF_EI_ABIVERSION  8
      20             : #define FD_ELF_EI_NIDENT     16
      21             : 
      22             : /* FD_ELF_CLASS: 32-bit/64-bit architecture */
      23             : 
      24             : #define FD_ELF_CLASS_NONE 0
      25             : #define FD_ELF_CLASS_32   1
      26             : #define FD_ELF_CLASS_64   2
      27             : 
      28             : /* FD_ELF_DATA: Endianness */
      29             : 
      30             : #define FD_ELF_DATA_NONE  0
      31             : #define FD_ELF_DATA_LE    1
      32             : #define FD_ELF_DATA_BE    2
      33             : 
      34             : /* FD_ELF_OSABI */
      35             : 
      36             : #define FD_ELF_OSABI_NONE 0
      37             : 
      38             : /* FD_ELF_ET: ELF file type */
      39             : 
      40             : #define FD_ELF_ET_NONE 0
      41             : #define FD_ELF_ET_REL  1 /* relocatable static object */
      42             : #define FD_ELF_ET_EXEC 2 /* executable */
      43             : #define FD_ELF_ET_DYN  3 /* shared object */
      44             : #define FD_ELF_ET_CORE 4 /* core dump */
      45             : 
      46             : /* FD_ELF_EM: Machine type */
      47             : 
      48             : #define FD_ELF_EM_NONE   0
      49             : #define FD_ELF_EM_BPF  247
      50             : #define FD_ELF_EM_SBPF 263
      51             : 
      52             : /* FD_ELF_EF: ELF flags */
      53             : 
      54             : #define FD_ELF_EF_SBPF_V2 32
      55             : 
      56             : /* FD_ELF_PT: Program header type */
      57             : 
      58             : #define FD_ELF_PT_NULL    0
      59        9060 : #define FD_ELF_PT_LOAD    1
      60        4206 : #define FD_ELF_PT_DYNAMIC 2
      61             : 
      62             : /* FD_ELF_SHT: Section header type */
      63             : 
      64             : #define FD_ELF_SHT_NULL      0
      65          18 : #define FD_ELF_SHT_PROGBITS  1
      66           6 : #define FD_ELF_SHT_SYMTAB    2
      67           6 : #define FD_ELF_SHT_STRTAB    3
      68             : #define FD_ELF_SHT_RELA      4
      69             : #define FD_ELF_SHT_HASH      5
      70       48141 : #define FD_ELF_SHT_DYNAMIC   6
      71     1596009 : #define FD_ELF_SHT_NOBITS    8
      72           6 : #define FD_ELF_SHT_REL       9
      73             : #define FD_ELF_SHT_DYNSYM   11
      74             : 
      75             : /* FD_ELF_SHF: Section header flags */
      76             : 
      77       57024 : #define FD_ELF_SHF_WRITE     0x1
      78       57024 : #define FD_ELF_SHF_ALLOC     0x2
      79             : #define FD_ELF_SHF_EXECINSTR 0x4
      80             : 
      81             : /* FD_ELF_DT: Dynamic entry type */
      82             : 
      83             : #define FD_ELF_DT_NULL     0
      84        3378 : #define FD_ELF_DT_SYMTAB   6
      85        3207 : #define FD_ELF_DT_REL     17
      86        3261 : #define FD_ELF_DT_RELSZ   18
      87        3261 : #define FD_ELF_DT_RELENT  19
      88             : 
      89             : /* FD_ELF64_ST_TYPE extracts the symbol type from symbol st_info */
      90             : 
      91      439752 : #define FD_ELF64_ST_TYPE(i) ((i)&0xF)
      92             : 
      93             : /* FD_ELF_STT: Symbol type */
      94             : 
      95             : #define FD_ELF_STT_NOTYPE  0
      96      439752 : #define FD_ELF_STT_FUNC    2
      97             : 
      98             : /* FD_ELF64_R_SYM extracts the symbol index from reloc r_info.
      99             :    FD_ELF64_R_TYPE extracts the relocation type from reloc r_info. */
     100             : 
     101      439887 : #define FD_ELF64_R_SYM(i)  ((uint)((ulong)(i) >> 32))
     102     1968201 : #define FD_ELF64_R_TYPE(i) ((uint)((ulong)(i) & 0xFFFFFFFF))
     103             : 
     104             : /* FD_ELF_R_BPF: BPF relocation types */
     105             : 
     106         135 : #define FD_ELF_R_BPF_64_64        1 /* 64-bit immediate (lddw form) */
     107     1528257 : #define FD_ELF_R_BPF_64_RELATIVE  8
     108      439752 : #define FD_ELF_R_BPF_64_32       10
     109             : 
     110             : FD_PROTOTYPES_BEGIN
     111             : 
     112             : /* fd_elf_read_cstr: Validate cstr and return pointer.  Given memory
     113             :    region buf of size buf_sz, attempt to read cstr at offset off in
     114             :    [0,buf_sz)  If buf_sz is 0, buf may be an invalid pointer.  Returns
     115             :    pointer to first byte of cstr in buf on success, and NULL on failure.
     116             :    Reasons for failure include: off or cstr is out-of-bounds, footprint
     117             :    of cstr (including NUL) greater than max_sz. */
     118             : 
     119             : FD_FN_PURE static inline char const *
     120             : fd_elf_read_cstr( void const * buf,
     121             :                   ulong        buf_sz,
     122             :                   ulong        off,
     123         117 :                   ulong        max_sz ) {
     124             : 
     125         117 :   if( FD_UNLIKELY( off>=buf_sz ) )
     126           3 :     return NULL;
     127             : 
     128         114 :   char const * str    = (char const *)( (ulong)buf + off );
     129         114 :   ulong        str_sz = buf_sz - off;
     130             : 
     131         114 :   ulong n = fd_ulong_min( str_sz, max_sz );
     132         114 :   if( FD_UNLIKELY( fd_cstr_nlen( str, n )==n ) )
     133          15 :     return NULL;
     134             : 
     135          99 :   return str;
     136         114 : }
     137             : 
     138             : FD_PROTOTYPES_END
     139             : 
     140             : /* Re-export sibling headers for convenience */
     141             : 
     142             : #include "fd_elf64.h"
     143             : 
     144             : #endif /* HEADER_fd_src_ballet_elf_fd_elf_h */
     145             : 

Generated by: LCOV version 1.14