LCOV - code coverage report
Current view: top level - src/elf - dynamic.rs (source / functions) Coverage Total Hit
Test: lief.lcov Lines: 40.8 % 539 220
Test Date: 2025-02-23:00:00:00 Functions: 76.3 % 59 45

            Line data    Source code
       1              : use std::marker::PhantomData;
       2              : 
       3              : use lief_ffi as ffi;
       4              : use bitflags::bitflags;
       5              : 
       6              : use crate::common::FromFFI;
       7              : use crate::declare_iterator;
       8              : 
       9              : 
      10              : #[allow(non_camel_case_types)]
      11         1490 : #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
      12              : pub enum Tag {
      13              :     DT_NULL_,
      14              :     NEEDED,
      15              :     PLTRELSZ,
      16              :     PLTGOT,
      17              :     HASH,
      18              :     STRTAB,
      19              :     SYMTAB,
      20              :     RELA,
      21              :     RELASZ,
      22              :     RELAENT,
      23              :     STRSZ,
      24              :     SYMENT,
      25              :     INIT,
      26              :     FINI,
      27              :     SONAME,
      28              :     RPATH,
      29              :     SYMBOLIC,
      30              :     REL,
      31              :     RELSZ,
      32              :     RELENT,
      33              :     PLTREL,
      34              :     DEBUG_TAG,
      35              :     TEXTREL,
      36              :     JMPREL,
      37              :     BIND_NOW,
      38              :     INIT_ARRAY,
      39              :     FINI_ARRAY,
      40              :     INIT_ARRAYSZ,
      41              :     FINI_ARRAYSZ,
      42              :     RUNPATH,
      43              :     FLAGS,
      44              :     PREINIT_ARRAY,
      45              :     PREINIT_ARRAYSZ,
      46              :     SYMTAB_SHNDX,
      47              :     RELRSZ,
      48              :     RELR,
      49              :     RELRENT,
      50              :     GNU_HASH,
      51              :     RELACOUNT,
      52              :     RELCOUNT,
      53              :     FLAGS_1,
      54              :     VERSYM,
      55              :     VERDEF,
      56              :     VERDEFNUM,
      57              :     VERNEED,
      58              :     VERNEEDNUM,
      59              :     ANDROID_REL_OFFSET,
      60              :     ANDROID_REL_SIZE,
      61              :     ANDROID_REL,
      62              :     ANDROID_RELSZ,
      63              :     ANDROID_RELA,
      64              :     ANDROID_RELASZ,
      65              :     ANDROID_RELR,
      66              :     ANDROID_RELRSZ,
      67              :     ANDROID_RELRENT,
      68              :     ANDROID_RELRCOUNT,
      69              :     MIPS_RLD_VERSION,
      70              :     MIPS_TIME_STAMP,
      71              :     MIPS_ICHECKSUM,
      72              :     MIPS_IVERSION,
      73              :     MIPS_FLAGS,
      74              :     MIPS_BASE_ADDRESS,
      75              :     MIPS_MSYM,
      76              :     MIPS_CONFLICT,
      77              :     MIPS_LIBLIST,
      78              :     MIPS_LOCAL_GOTNO,
      79              :     MIPS_CONFLICTNO,
      80              :     MIPS_LIBLISTNO,
      81              :     MIPS_SYMTABNO,
      82              :     MIPS_UNREFEXTNO,
      83              :     MIPS_GOTSYM,
      84              :     MIPS_HIPAGENO,
      85              :     MIPS_RLD_MAP,
      86              :     MIPS_DELTA_CLASS,
      87              :     MIPS_DELTA_CLASS_NO,
      88              :     MIPS_DELTA_INSTANCE,
      89              :     MIPS_DELTA_INSTANCE_NO,
      90              :     MIPS_DELTA_RELOC,
      91              :     MIPS_DELTA_RELOC_NO,
      92              :     MIPS_DELTA_SYM,
      93              :     MIPS_DELTA_SYM_NO,
      94              :     MIPS_DELTA_CLASSSYM,
      95              :     MIPS_DELTA_CLASSSYM_NO,
      96              :     MIPS_CXX_FLAGS,
      97              :     MIPS_PIXIE_INIT,
      98              :     MIPS_SYMBOL_LIB,
      99              :     MIPS_LOCALPAGE_GOTIDX,
     100              :     MIPS_LOCAL_GOTIDX,
     101              :     MIPS_HIDDEN_GOTIDX,
     102              :     MIPS_PROTECTED_GOTIDX,
     103              :     MIPS_OPTIONS,
     104              :     MIPS_INTERFACE,
     105              :     MIPS_DYNSTR_ALIGN,
     106              :     MIPS_INTERFACE_SIZE,
     107              :     MIPS_RLD_TEXT_RESOLVE_ADDR,
     108              :     MIPS_PERF_SUFFIX,
     109              :     MIPS_COMPACT_SIZE,
     110              :     MIPS_GP_VALUE,
     111              :     MIPS_AUX_DYNAMIC,
     112              :     MIPS_PLTGOT,
     113              :     MIPS_RWPLT,
     114              :     MIPS_RLD_MAP_REL,
     115              :     MIPS_XHASH,
     116              :     AARCH64_BTI_PLT,
     117              :     AARCH64_PAC_PLT,
     118              :     AARCH64_VARIANT_PCS,
     119              :     AARCH64_MEMTAG_MODE,
     120              :     AARCH64_MEMTAG_HEAP,
     121              :     AARCH64_MEMTAG_STACK,
     122              :     AARCH64_MEMTAG_GLOBALS,
     123              :     AARCH64_MEMTAG_GLOBALSSZ,
     124              :     HEXAGON_SYMSZ,
     125              :     HEXAGON_VER,
     126              :     HEXAGON_PLT,
     127              :     PPC_GOT,
     128              :     PPC_OPT,
     129              :     PPC64_GLINK,
     130              :     PPC64_OPT,
     131              :     RISCV_VARIANT_CC,
     132              :     X86_64_PLT,
     133              :     X86_64_PLTSZ,
     134              :     X86_64_PLTENT,
     135              :     IA_64_PLT_RESERVE,
     136              :     IA_64_VMS_SUBTYPE,
     137              :     IA_64_VMS_IMGIOCNT,
     138              :     IA_64_VMS_LNKFLAGS,
     139              :     IA_64_VMS_VIR_MEM_BLK_SIZ,
     140              :     IA_64_VMS_IDENT,
     141              :     IA_64_VMS_NEEDED_IDENT,
     142              :     IA_64_VMS_IMG_RELA_CNT,
     143              :     IA_64_VMS_SEG_RELA_CNT,
     144              :     IA_64_VMS_FIXUP_RELA_CNT,
     145              :     IA_64_VMS_FIXUP_NEEDED,
     146              :     IA_64_VMS_SYMVEC_CNT,
     147              :     IA_64_VMS_XLATED,
     148              :     IA_64_VMS_STACKSIZE,
     149              :     IA_64_VMS_UNWINDSZ,
     150              :     IA_64_VMS_UNWIND_CODSEG,
     151              :     IA_64_VMS_UNWIND_INFOSEG,
     152              :     IA_64_VMS_LINKTIME,
     153              :     IA_64_VMS_SEG_NO,
     154              :     IA_64_VMS_SYMVEC_OFFSET,
     155              :     IA_64_VMS_SYMVEC_SEG,
     156              :     IA_64_VMS_UNWIND_OFFSET,
     157              :     IA_64_VMS_UNWIND_SEG,
     158              :     IA_64_VMS_STRTAB_OFFSET,
     159              :     IA_64_VMS_SYSVER_OFFSET,
     160              :     IA_64_VMS_IMG_RELA_OFF,
     161              :     IA_64_VMS_SEG_RELA_OFF,
     162              :     IA_64_VMS_FIXUP_RELA_OFF,
     163              :     IA_64_VMS_PLTGOT_OFFSET,
     164              :     IA_64_VMS_PLTGOT_SEG,
     165              :     IA_64_VMS_FPMODE,
     166              :     UNKNOWN(u64),
     167              : }
     168              : 
     169              : impl From<u64> for Tag {
     170         1490 :     fn from(value: u64) -> Self {
     171         1490 :         match value {
     172           50 :             0x00000000 => Tag::DT_NULL_,
     173          180 :             0x00000001 => Tag::NEEDED,
     174           50 :             0x00000002 => Tag::PLTRELSZ,
     175           50 :             0x00000003 => Tag::PLTGOT,
     176           20 :             0x00000004 => Tag::HASH,
     177           50 :             0x00000005 => Tag::STRTAB,
     178           50 :             0x00000006 => Tag::SYMTAB,
     179           40 :             0x00000007 => Tag::RELA,
     180           40 :             0x00000008 => Tag::RELASZ,
     181           40 :             0x00000009 => Tag::RELAENT,
     182           50 :             0x0000000a => Tag::STRSZ,
     183           50 :             0x0000000b => Tag::SYMENT,
     184           50 :             0x0000000c => Tag::INIT,
     185           50 :             0x0000000d => Tag::FINI,
     186           10 :             0x0000000e => Tag::SONAME,
     187           10 :             0x0000000f => Tag::RPATH,
     188           10 :             0x00000010 => Tag::SYMBOLIC,
     189           10 :             0x00000011 => Tag::REL,
     190           10 :             0x00000012 => Tag::RELSZ,
     191           10 :             0x00000013 => Tag::RELENT,
     192           50 :             0x00000014 => Tag::PLTREL,
     193           40 :             0x00000015 => Tag::DEBUG_TAG,
     194            0 :             0x00000016 => Tag::TEXTREL,
     195           50 :             0x00000017 => Tag::JMPREL,
     196            0 :             0x00000018 => Tag::BIND_NOW,
     197           40 :             0x00000019 => Tag::INIT_ARRAY,
     198           30 :             0x0000001a => Tag::FINI_ARRAY,
     199           40 :             0x0000001b => Tag::INIT_ARRAYSZ,
     200           30 :             0x0000001c => Tag::FINI_ARRAYSZ,
     201           10 :             0x0000001d => Tag::RUNPATH,
     202           10 :             0x0000001e => Tag::FLAGS,
     203            0 :             0x00000020 => Tag::PREINIT_ARRAY,
     204            0 :             0x00000021 => Tag::PREINIT_ARRAYSZ,
     205            0 :             0x00000022 => Tag::SYMTAB_SHNDX,
     206            0 :             0x00000023 => Tag::RELRSZ,
     207            0 :             0x00000024 => Tag::RELR,
     208            0 :             0x00000025 => Tag::RELRENT,
     209           40 :             0x6ffffef5 => Tag::GNU_HASH,
     210           20 :             0x6ffffff9 => Tag::RELACOUNT,
     211            0 :             0x6ffffffa => Tag::RELCOUNT,
     212           10 :             0x6ffffffb => Tag::FLAGS_1,
     213           50 :             0x6ffffff0 => Tag::VERSYM,
     214           10 :             0x6ffffffc => Tag::VERDEF,
     215           10 :             0x6ffffffd => Tag::VERDEFNUM,
     216           50 :             0x6ffffffe => Tag::VERNEED,
     217           50 :             0x6fffffff => Tag::VERNEEDNUM,
     218            0 :             0x6000000d => Tag::ANDROID_REL_OFFSET,
     219            0 :             0x6000000e => Tag::ANDROID_REL_SIZE,
     220            0 :             0x6000000f => Tag::ANDROID_REL,
     221            0 :             0x60000010 => Tag::ANDROID_RELSZ,
     222            0 :             0x60000011 => Tag::ANDROID_RELA,
     223            0 :             0x60000012 => Tag::ANDROID_RELASZ,
     224            0 :             0x6fffe000 => Tag::ANDROID_RELR,
     225            0 :             0x6fffe001 => Tag::ANDROID_RELRSZ,
     226            0 :             0x6fffe003 => Tag::ANDROID_RELRENT,
     227            0 :             0x6fffe005 => Tag::ANDROID_RELRCOUNT,
     228           10 :             0x170000001 => Tag::MIPS_RLD_VERSION,
     229            0 :             0x170000002 => Tag::MIPS_TIME_STAMP,
     230            0 :             0x170000003 => Tag::MIPS_ICHECKSUM,
     231            0 :             0x170000004 => Tag::MIPS_IVERSION,
     232           10 :             0x170000005 => Tag::MIPS_FLAGS,
     233           10 :             0x170000006 => Tag::MIPS_BASE_ADDRESS,
     234            0 :             0x170000007 => Tag::MIPS_MSYM,
     235            0 :             0x170000008 => Tag::MIPS_CONFLICT,
     236            0 :             0x170000009 => Tag::MIPS_LIBLIST,
     237           10 :             0x17000000a => Tag::MIPS_LOCAL_GOTNO,
     238            0 :             0x17000000b => Tag::MIPS_CONFLICTNO,
     239            0 :             0x170000010 => Tag::MIPS_LIBLISTNO,
     240           10 :             0x170000011 => Tag::MIPS_SYMTABNO,
     241           10 :             0x170000012 => Tag::MIPS_UNREFEXTNO,
     242           10 :             0x170000013 => Tag::MIPS_GOTSYM,
     243            0 :             0x170000014 => Tag::MIPS_HIPAGENO,
     244           10 :             0x170000016 => Tag::MIPS_RLD_MAP,
     245            0 :             0x170000017 => Tag::MIPS_DELTA_CLASS,
     246            0 :             0x170000018 => Tag::MIPS_DELTA_CLASS_NO,
     247            0 :             0x170000019 => Tag::MIPS_DELTA_INSTANCE,
     248            0 :             0x17000001a => Tag::MIPS_DELTA_INSTANCE_NO,
     249            0 :             0x17000001b => Tag::MIPS_DELTA_RELOC,
     250            0 :             0x17000001c => Tag::MIPS_DELTA_RELOC_NO,
     251            0 :             0x17000001d => Tag::MIPS_DELTA_SYM,
     252            0 :             0x17000001e => Tag::MIPS_DELTA_SYM_NO,
     253            0 :             0x170000020 => Tag::MIPS_DELTA_CLASSSYM,
     254            0 :             0x170000021 => Tag::MIPS_DELTA_CLASSSYM_NO,
     255            0 :             0x170000022 => Tag::MIPS_CXX_FLAGS,
     256            0 :             0x170000023 => Tag::MIPS_PIXIE_INIT,
     257            0 :             0x170000024 => Tag::MIPS_SYMBOL_LIB,
     258            0 :             0x170000025 => Tag::MIPS_LOCALPAGE_GOTIDX,
     259            0 :             0x170000026 => Tag::MIPS_LOCAL_GOTIDX,
     260            0 :             0x170000027 => Tag::MIPS_HIDDEN_GOTIDX,
     261            0 :             0x170000028 => Tag::MIPS_PROTECTED_GOTIDX,
     262            0 :             0x170000029 => Tag::MIPS_OPTIONS,
     263            0 :             0x17000002a => Tag::MIPS_INTERFACE,
     264            0 :             0x17000002b => Tag::MIPS_DYNSTR_ALIGN,
     265            0 :             0x17000002c => Tag::MIPS_INTERFACE_SIZE,
     266            0 :             0x17000002d => Tag::MIPS_RLD_TEXT_RESOLVE_ADDR,
     267            0 :             0x17000002e => Tag::MIPS_PERF_SUFFIX,
     268            0 :             0x17000002f => Tag::MIPS_COMPACT_SIZE,
     269            0 :             0x170000030 => Tag::MIPS_GP_VALUE,
     270            0 :             0x170000031 => Tag::MIPS_AUX_DYNAMIC,
     271           10 :             0x170000032 => Tag::MIPS_PLTGOT,
     272            0 :             0x170000034 => Tag::MIPS_RWPLT,
     273           10 :             0x170000035 => Tag::MIPS_RLD_MAP_REL,
     274            0 :             0x170000036 => Tag::MIPS_XHASH,
     275            0 :             0x270000001 => Tag::AARCH64_BTI_PLT,
     276            0 :             0x270000003 => Tag::AARCH64_PAC_PLT,
     277            0 :             0x270000005 => Tag::AARCH64_VARIANT_PCS,
     278            0 :             0x270000009 => Tag::AARCH64_MEMTAG_MODE,
     279            0 :             0x27000000b => Tag::AARCH64_MEMTAG_HEAP,
     280            0 :             0x27000000c => Tag::AARCH64_MEMTAG_STACK,
     281            0 :             0x27000000d => Tag::AARCH64_MEMTAG_GLOBALS,
     282            0 :             0x27000000f => Tag::AARCH64_MEMTAG_GLOBALSSZ,
     283            0 :             0x370000000 => Tag::HEXAGON_SYMSZ,
     284            0 :             0x370000001 => Tag::HEXAGON_VER,
     285            0 :             0x370000002 => Tag::HEXAGON_PLT,
     286            0 :             0x470000000 => Tag::PPC_GOT,
     287            0 :             0x470000001 => Tag::PPC_OPT,
     288            0 :             0x570000000 => Tag::PPC64_GLINK,
     289            0 :             0x570000003 => Tag::PPC64_OPT,
     290            0 :             0x670000003 => Tag::RISCV_VARIANT_CC,
     291            0 :             0x770000000 => Tag::X86_64_PLT,
     292            0 :             0x770000001 => Tag::X86_64_PLTSZ,
     293            0 :             0x770000003 => Tag::X86_64_PLTENT,
     294            0 :             0x870000000 => Tag::IA_64_PLT_RESERVE,
     295            0 :             0x860000000 => Tag::IA_64_VMS_SUBTYPE,
     296            0 :             0x860000002 => Tag::IA_64_VMS_IMGIOCNT,
     297            0 :             0x860000008 => Tag::IA_64_VMS_LNKFLAGS,
     298            0 :             0x86000000a => Tag::IA_64_VMS_VIR_MEM_BLK_SIZ,
     299            0 :             0x86000000c => Tag::IA_64_VMS_IDENT,
     300            0 :             0x860000010 => Tag::IA_64_VMS_NEEDED_IDENT,
     301            0 :             0x860000012 => Tag::IA_64_VMS_IMG_RELA_CNT,
     302            0 :             0x860000014 => Tag::IA_64_VMS_SEG_RELA_CNT,
     303            0 :             0x860000016 => Tag::IA_64_VMS_FIXUP_RELA_CNT,
     304            0 :             0x860000018 => Tag::IA_64_VMS_FIXUP_NEEDED,
     305            0 :             0x86000001a => Tag::IA_64_VMS_SYMVEC_CNT,
     306            0 :             0x86000001e => Tag::IA_64_VMS_XLATED,
     307            0 :             0x860000020 => Tag::IA_64_VMS_STACKSIZE,
     308            0 :             0x860000022 => Tag::IA_64_VMS_UNWINDSZ,
     309            0 :             0x860000024 => Tag::IA_64_VMS_UNWIND_CODSEG,
     310            0 :             0x860000026 => Tag::IA_64_VMS_UNWIND_INFOSEG,
     311            0 :             0x860000028 => Tag::IA_64_VMS_LINKTIME,
     312            0 :             0x86000002a => Tag::IA_64_VMS_SEG_NO,
     313            0 :             0x86000002c => Tag::IA_64_VMS_SYMVEC_OFFSET,
     314            0 :             0x86000002e => Tag::IA_64_VMS_SYMVEC_SEG,
     315            0 :             0x860000030 => Tag::IA_64_VMS_UNWIND_OFFSET,
     316            0 :             0x860000032 => Tag::IA_64_VMS_UNWIND_SEG,
     317            0 :             0x860000034 => Tag::IA_64_VMS_STRTAB_OFFSET,
     318            0 :             0x860000036 => Tag::IA_64_VMS_SYSVER_OFFSET,
     319            0 :             0x860000038 => Tag::IA_64_VMS_IMG_RELA_OFF,
     320            0 :             0x86000003a => Tag::IA_64_VMS_SEG_RELA_OFF,
     321            0 :             0x86000003c => Tag::IA_64_VMS_FIXUP_RELA_OFF,
     322            0 :             0x86000003e => Tag::IA_64_VMS_PLTGOT_OFFSET,
     323            0 :             0x860000040 => Tag::IA_64_VMS_PLTGOT_SEG,
     324            0 :             0x860000042 => Tag::IA_64_VMS_FPMODE,
     325           20 :             _ => Tag::UNKNOWN(value),
     326              : 
     327              :         }
     328         1490 :     }
     329              : }
     330              : 
     331              : impl From<Tag> for u64 {
     332          240 :     fn from(value: Tag) -> u64 {
     333          240 :         match value {
     334            0 :             Tag::DT_NULL_ => 0x00000000,
     335            0 :             Tag::NEEDED => 0x00000001,
     336            0 :             Tag::PLTRELSZ => 0x00000002,
     337            0 :             Tag::PLTGOT => 0x00000003,
     338            0 :             Tag::HASH => 0x00000004,
     339            0 :             Tag::STRTAB => 0x00000005,
     340            0 :             Tag::SYMTAB => 0x00000006,
     341            0 :             Tag::RELA => 0x00000007,
     342            0 :             Tag::RELASZ => 0x00000008,
     343            0 :             Tag::RELAENT => 0x00000009,
     344            0 :             Tag::STRSZ => 0x0000000a,
     345            0 :             Tag::SYMENT => 0x0000000b,
     346            0 :             Tag::INIT => 0x0000000c,
     347            0 :             Tag::FINI => 0x0000000d,
     348            0 :             Tag::SONAME => 0x0000000e,
     349            0 :             Tag::RPATH => 0x0000000f,
     350            0 :             Tag::SYMBOLIC => 0x00000010,
     351            0 :             Tag::REL => 0x00000011,
     352            0 :             Tag::RELSZ => 0x00000012,
     353            0 :             Tag::RELENT => 0x00000013,
     354            0 :             Tag::PLTREL => 0x00000014,
     355            0 :             Tag::DEBUG_TAG => 0x00000015,
     356            0 :             Tag::TEXTREL => 0x00000016,
     357            0 :             Tag::JMPREL => 0x00000017,
     358            0 :             Tag::BIND_NOW => 0x00000018,
     359           80 :             Tag::INIT_ARRAY => 0x00000019,
     360           80 :             Tag::FINI_ARRAY => 0x0000001a,
     361            0 :             Tag::INIT_ARRAYSZ => 0x0000001b,
     362            0 :             Tag::FINI_ARRAYSZ => 0x0000001c,
     363            0 :             Tag::RUNPATH => 0x0000001d,
     364            0 :             Tag::FLAGS => 0x0000001e,
     365           80 :             Tag::PREINIT_ARRAY => 0x00000020,
     366            0 :             Tag::PREINIT_ARRAYSZ => 0x00000021,
     367            0 :             Tag::SYMTAB_SHNDX => 0x00000022,
     368            0 :             Tag::RELRSZ => 0x00000023,
     369            0 :             Tag::RELR => 0x00000024,
     370            0 :             Tag::RELRENT => 0x00000025,
     371            0 :             Tag::GNU_HASH => 0x6ffffef5,
     372            0 :             Tag::RELACOUNT => 0x6ffffff9,
     373            0 :             Tag::RELCOUNT => 0x6ffffffa,
     374            0 :             Tag::FLAGS_1 => 0x6ffffffb,
     375            0 :             Tag::VERSYM => 0x6ffffff0,
     376            0 :             Tag::VERDEF => 0x6ffffffc,
     377            0 :             Tag::VERDEFNUM => 0x6ffffffd,
     378            0 :             Tag::VERNEED => 0x6ffffffe,
     379            0 :             Tag::VERNEEDNUM => 0x6fffffff,
     380            0 :             Tag::ANDROID_REL_OFFSET => 0x6000000d,
     381            0 :             Tag::ANDROID_REL_SIZE => 0x6000000e,
     382            0 :             Tag::ANDROID_REL => 0x6000000f,
     383            0 :             Tag::ANDROID_RELSZ => 0x60000010,
     384            0 :             Tag::ANDROID_RELA => 0x60000011,
     385            0 :             Tag::ANDROID_RELASZ => 0x60000012,
     386            0 :             Tag::ANDROID_RELR => 0x6fffe000,
     387            0 :             Tag::ANDROID_RELRSZ => 0x6fffe001,
     388            0 :             Tag::ANDROID_RELRENT => 0x6fffe003,
     389            0 :             Tag::ANDROID_RELRCOUNT => 0x6fffe005,
     390            0 :             Tag::MIPS_RLD_VERSION => 0x170000001,
     391            0 :             Tag::MIPS_TIME_STAMP => 0x170000002,
     392            0 :             Tag::MIPS_ICHECKSUM => 0x170000003,
     393            0 :             Tag::MIPS_IVERSION => 0x170000004,
     394            0 :             Tag::MIPS_FLAGS => 0x170000005,
     395            0 :             Tag::MIPS_BASE_ADDRESS => 0x170000006,
     396            0 :             Tag::MIPS_MSYM => 0x170000007,
     397            0 :             Tag::MIPS_CONFLICT => 0x170000008,
     398            0 :             Tag::MIPS_LIBLIST => 0x170000009,
     399            0 :             Tag::MIPS_LOCAL_GOTNO => 0x17000000a,
     400            0 :             Tag::MIPS_CONFLICTNO => 0x17000000b,
     401            0 :             Tag::MIPS_LIBLISTNO => 0x170000010,
     402            0 :             Tag::MIPS_SYMTABNO => 0x170000011,
     403            0 :             Tag::MIPS_UNREFEXTNO => 0x170000012,
     404            0 :             Tag::MIPS_GOTSYM => 0x170000013,
     405            0 :             Tag::MIPS_HIPAGENO => 0x170000014,
     406            0 :             Tag::MIPS_RLD_MAP => 0x170000016,
     407            0 :             Tag::MIPS_DELTA_CLASS => 0x170000017,
     408            0 :             Tag::MIPS_DELTA_CLASS_NO => 0x170000018,
     409            0 :             Tag::MIPS_DELTA_INSTANCE => 0x170000019,
     410            0 :             Tag::MIPS_DELTA_INSTANCE_NO => 0x17000001a,
     411            0 :             Tag::MIPS_DELTA_RELOC => 0x17000001b,
     412            0 :             Tag::MIPS_DELTA_RELOC_NO => 0x17000001c,
     413            0 :             Tag::MIPS_DELTA_SYM => 0x17000001d,
     414            0 :             Tag::MIPS_DELTA_SYM_NO => 0x17000001e,
     415            0 :             Tag::MIPS_DELTA_CLASSSYM => 0x170000020,
     416            0 :             Tag::MIPS_DELTA_CLASSSYM_NO => 0x170000021,
     417            0 :             Tag::MIPS_CXX_FLAGS => 0x170000022,
     418            0 :             Tag::MIPS_PIXIE_INIT => 0x170000023,
     419            0 :             Tag::MIPS_SYMBOL_LIB => 0x170000024,
     420            0 :             Tag::MIPS_LOCALPAGE_GOTIDX => 0x170000025,
     421            0 :             Tag::MIPS_LOCAL_GOTIDX => 0x170000026,
     422            0 :             Tag::MIPS_HIDDEN_GOTIDX => 0x170000027,
     423            0 :             Tag::MIPS_PROTECTED_GOTIDX => 0x170000028,
     424            0 :             Tag::MIPS_OPTIONS => 0x170000029,
     425            0 :             Tag::MIPS_INTERFACE => 0x17000002a,
     426            0 :             Tag::MIPS_DYNSTR_ALIGN => 0x17000002b,
     427            0 :             Tag::MIPS_INTERFACE_SIZE => 0x17000002c,
     428            0 :             Tag::MIPS_RLD_TEXT_RESOLVE_ADDR => 0x17000002d,
     429            0 :             Tag::MIPS_PERF_SUFFIX => 0x17000002e,
     430            0 :             Tag::MIPS_COMPACT_SIZE => 0x17000002f,
     431            0 :             Tag::MIPS_GP_VALUE => 0x170000030,
     432            0 :             Tag::MIPS_AUX_DYNAMIC => 0x170000031,
     433            0 :             Tag::MIPS_PLTGOT => 0x170000032,
     434            0 :             Tag::MIPS_RWPLT => 0x170000034,
     435            0 :             Tag::MIPS_RLD_MAP_REL => 0x170000035,
     436            0 :             Tag::MIPS_XHASH => 0x170000036,
     437            0 :             Tag::AARCH64_BTI_PLT => 0x270000001,
     438            0 :             Tag::AARCH64_PAC_PLT => 0x270000003,
     439            0 :             Tag::AARCH64_VARIANT_PCS => 0x270000005,
     440            0 :             Tag::AARCH64_MEMTAG_MODE => 0x270000009,
     441            0 :             Tag::AARCH64_MEMTAG_HEAP => 0x27000000b,
     442            0 :             Tag::AARCH64_MEMTAG_STACK => 0x27000000c,
     443            0 :             Tag::AARCH64_MEMTAG_GLOBALS => 0x27000000d,
     444            0 :             Tag::AARCH64_MEMTAG_GLOBALSSZ => 0x27000000f,
     445            0 :             Tag::HEXAGON_SYMSZ => 0x370000000,
     446            0 :             Tag::HEXAGON_VER => 0x370000001,
     447            0 :             Tag::HEXAGON_PLT => 0x370000002,
     448            0 :             Tag::PPC_GOT => 0x470000000,
     449            0 :             Tag::PPC_OPT => 0x470000001,
     450            0 :             Tag::PPC64_GLINK => 0x570000000,
     451            0 :             Tag::PPC64_OPT => 0x570000003,
     452            0 :             Tag::RISCV_VARIANT_CC => 0x670000003,
     453            0 :             Tag::X86_64_PLT => 0x770000000,
     454            0 :             Tag::X86_64_PLTSZ => 0x770000001,
     455            0 :             Tag::X86_64_PLTENT => 0x770000003,
     456            0 :             Tag::IA_64_PLT_RESERVE => 0x870000000,
     457            0 :             Tag::IA_64_VMS_SUBTYPE => 0x860000000,
     458            0 :             Tag::IA_64_VMS_IMGIOCNT => 0x860000002,
     459            0 :             Tag::IA_64_VMS_LNKFLAGS => 0x860000008,
     460            0 :             Tag::IA_64_VMS_VIR_MEM_BLK_SIZ => 0x86000000a,
     461            0 :             Tag::IA_64_VMS_IDENT => 0x86000000c,
     462            0 :             Tag::IA_64_VMS_NEEDED_IDENT => 0x860000010,
     463            0 :             Tag::IA_64_VMS_IMG_RELA_CNT => 0x860000012,
     464            0 :             Tag::IA_64_VMS_SEG_RELA_CNT => 0x860000014,
     465            0 :             Tag::IA_64_VMS_FIXUP_RELA_CNT => 0x860000016,
     466            0 :             Tag::IA_64_VMS_FIXUP_NEEDED => 0x860000018,
     467            0 :             Tag::IA_64_VMS_SYMVEC_CNT => 0x86000001a,
     468            0 :             Tag::IA_64_VMS_XLATED => 0x86000001e,
     469            0 :             Tag::IA_64_VMS_STACKSIZE => 0x860000020,
     470            0 :             Tag::IA_64_VMS_UNWINDSZ => 0x860000022,
     471            0 :             Tag::IA_64_VMS_UNWIND_CODSEG => 0x860000024,
     472            0 :             Tag::IA_64_VMS_UNWIND_INFOSEG => 0x860000026,
     473            0 :             Tag::IA_64_VMS_LINKTIME => 0x860000028,
     474            0 :             Tag::IA_64_VMS_SEG_NO => 0x86000002a,
     475            0 :             Tag::IA_64_VMS_SYMVEC_OFFSET => 0x86000002c,
     476            0 :             Tag::IA_64_VMS_SYMVEC_SEG => 0x86000002e,
     477            0 :             Tag::IA_64_VMS_UNWIND_OFFSET => 0x860000030,
     478            0 :             Tag::IA_64_VMS_UNWIND_SEG => 0x860000032,
     479            0 :             Tag::IA_64_VMS_STRTAB_OFFSET => 0x860000034,
     480            0 :             Tag::IA_64_VMS_SYSVER_OFFSET => 0x860000036,
     481            0 :             Tag::IA_64_VMS_IMG_RELA_OFF => 0x860000038,
     482            0 :             Tag::IA_64_VMS_SEG_RELA_OFF => 0x86000003a,
     483            0 :             Tag::IA_64_VMS_FIXUP_RELA_OFF => 0x86000003c,
     484            0 :             Tag::IA_64_VMS_PLTGOT_OFFSET => 0x86000003e,
     485            0 :             Tag::IA_64_VMS_PLTGOT_SEG => 0x860000040,
     486            0 :             Tag::IA_64_VMS_FPMODE => 0x860000042,
     487            0 :             Tag::UNKNOWN(value) => value,
     488              :         }
     489          240 :     }
     490              : }
     491              : 
     492         1490 : #[derive(Debug)]
     493              : /// Enum that represents the different variants of a dynamic entry
     494              : pub enum Entries<'a> {
     495              :     /// Entry for `DT_NEEDED`
     496              :     Library(Library<'a>),
     497              : 
     498              :     /// Entry for `DT_INIT_ARRAY, DT_FINI_ARRAY`, ...
     499              :     Array(Array<'a>),
     500              : 
     501              :     /// Entry for `DT_RPATH`
     502              :     Rpath(Rpath<'a>),
     503              : 
     504              :     /// Entry for `DT_RUNPATH`
     505              :     RunPath(RunPath<'a>),
     506              : 
     507              :     /// Entry for `DT_SONAME`
     508              :     SharedObject(SharedObject<'a>),
     509              : 
     510              :     /// Entry for `DT_FLAGS` and `DT_FLAGS_1`
     511              :     Flags(Flags<'a>),
     512              : 
     513              :     /// Generic value
     514              :     Generic(Generic<'a>),
     515              : }
     516              : 
     517              : /// Trait shared by all the [`Entries`]
     518              : pub trait DynamicEntry {
     519              :     #[doc(hidden)]
     520              :     fn as_base(&self) -> &ffi::ELF_DynamicEntry;
     521              : 
     522              :     /// Dynamic TAG associated with the entry
     523          149 :     fn tag(&self) -> Tag {
     524          149 :         Tag::from(self.as_base().tag())
     525          149 :     }
     526              : 
     527              :     /// Raw value which should be interpreted according to the [`DynamicEntry::tag`]
     528          144 :     fn value(&self) -> u64 {
     529          144 :         self.as_base().value()
     530          144 :     }
     531              : }
     532              : 
     533              : impl DynamicEntry for Entries<'_> {
     534            0 :     fn as_base(&self) -> &ffi::ELF_DynamicEntry {
     535            0 :         match &self {
     536            0 :             Entries::Library(entry) => {
     537            0 :                 entry.as_base()
     538              :             }
     539              : 
     540            0 :             Entries::Array(entry) => {
     541            0 :                 entry.as_base()
     542              :             }
     543              : 
     544            0 :             Entries::Rpath(entry) => {
     545            0 :                 entry.as_base()
     546              :             }
     547              : 
     548            0 :             Entries::RunPath(entry) => {
     549            0 :                 entry.as_base()
     550              :             }
     551              : 
     552            0 :             Entries::SharedObject(entry) => {
     553            0 :                 entry.as_base()
     554              :             }
     555              : 
     556            0 :             Entries::Flags(entry) => {
     557            0 :                 entry.as_base()
     558              :             }
     559              : 
     560            0 :             Entries::Generic(entry) => {
     561            0 :                 entry.as_base()
     562              :             }
     563              :         }
     564            0 :     }
     565              : }
     566              : 
     567              : impl FromFFI<ffi::ELF_DynamicEntry> for Entries<'_> {
     568         1490 :     fn from_ffi(ffi_entry: cxx::UniquePtr<ffi::ELF_DynamicEntry>) -> Self {
     569         1490 :         unsafe {
     570         1490 :             let cmd_ref = ffi_entry.as_ref().unwrap();
     571         1490 : 
     572         1490 :             if ffi::ELF_DynamicEntryLibrary::classof(cmd_ref) {
     573          180 :                 let raw = {
     574          180 :                     type From = cxx::UniquePtr<ffi::ELF_DynamicEntry>;
     575          180 :                     type To   = cxx::UniquePtr<ffi::ELF_DynamicEntryLibrary>;
     576          180 :                     std::mem::transmute::<From, To>(ffi_entry)
     577          180 :                 };
     578          180 :                 Entries::Library(Library::from_ffi(raw))
     579              :             }
     580         1310 :             else if ffi::ELF_DynamicEntryArray::classof(cmd_ref) {
     581           70 :                 let raw = {
     582           70 :                     type From = cxx::UniquePtr<ffi::ELF_DynamicEntry>;
     583           70 :                     type To   = cxx::UniquePtr<ffi::ELF_DynamicEntryArray>;
     584           70 :                     std::mem::transmute::<From, To>(ffi_entry)
     585           70 :                 };
     586           70 :                 Entries::Array(Array::from_ffi(raw))
     587              :             }
     588         1240 :             else if ffi::ELF_DynamicEntryRpath::classof(cmd_ref) {
     589           10 :                 let raw = {
     590           10 :                     type From = cxx::UniquePtr<ffi::ELF_DynamicEntry>;
     591           10 :                     type To   = cxx::UniquePtr<ffi::ELF_DynamicEntryRpath>;
     592           10 :                     std::mem::transmute::<From, To>(ffi_entry)
     593           10 :                 };
     594           10 :                 Entries::Rpath(Rpath::from_ffi(raw))
     595              :             }
     596         1230 :             else if ffi::ELF_DynamicEntryRunPath::classof(cmd_ref) {
     597           10 :                 let raw = {
     598           10 :                     type From = cxx::UniquePtr<ffi::ELF_DynamicEntry>;
     599           10 :                     type To   = cxx::UniquePtr<ffi::ELF_DynamicEntryRunPath>;
     600           10 :                     std::mem::transmute::<From, To>(ffi_entry)
     601           10 :                 };
     602           10 :                 Entries::RunPath(RunPath::from_ffi(raw))
     603              :             }
     604         1220 :             else if ffi::ELF_DynamicSharedObject::classof(cmd_ref) {
     605           10 :                 let raw = {
     606           10 :                     type From = cxx::UniquePtr<ffi::ELF_DynamicEntry>;
     607           10 :                     type To   = cxx::UniquePtr<ffi::ELF_DynamicSharedObject>;
     608           10 :                     std::mem::transmute::<From, To>(ffi_entry)
     609           10 :                 };
     610           10 :                 Entries::SharedObject(SharedObject::from_ffi(raw))
     611              :             }
     612         1210 :             else if ffi::ELF_DynamicEntryFlags::classof(cmd_ref) {
     613           20 :                 let raw = {
     614           20 :                     type From = cxx::UniquePtr<ffi::ELF_DynamicEntry>;
     615           20 :                     type To   = cxx::UniquePtr<ffi::ELF_DynamicEntryFlags>;
     616           20 :                     std::mem::transmute::<From, To>(ffi_entry)
     617           20 :                 };
     618           20 :                 Entries::Flags(Flags::from_ffi(raw))
     619              :             }
     620              :             else {
     621         1190 :                 Entries::Generic(Generic::from_ffi(ffi_entry))
     622              :             }
     623              :         }
     624         1490 :     }
     625              : }
     626              : 
     627              : 
     628              : /// Generic structure for the dynamic entries whose [`DynamicEntry::value`] can be interpreted
     629              : /// as is.
     630              : pub struct Generic<'a> {
     631              :     ptr: cxx::UniquePtr<ffi::ELF_DynamicEntry>,
     632              :     _owner: PhantomData<&'a ffi::ELF_Binary>
     633              : }
     634              : 
     635              : impl FromFFI<ffi::ELF_DynamicEntry> for Generic<'_> {
     636         1190 :     fn from_ffi(ptr: cxx::UniquePtr<ffi::ELF_DynamicEntry>) -> Self {
     637         1190 :         Self {
     638         1190 :             ptr,
     639         1190 :             _owner: PhantomData
     640         1190 :         }
     641         1190 :     }
     642              : 
     643              : }
     644              : 
     645              : impl DynamicEntry for Generic<'_> {
     646         2380 :     fn as_base(&self) -> &ffi::ELF_DynamicEntry {
     647         2380 :         self.ptr.as_ref().unwrap()
     648         2380 :     }
     649              : }
     650              : 
     651              : impl std::fmt::Debug for Generic<'_> {
     652         1190 :     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
     653         1190 :         f.debug_struct("Generic").finish()
     654         1190 :     }
     655              : }
     656              : 
     657              : /// Structure that represents a dynamic entry associated with a library name (e.g. `DT_NEEDED`)
     658              : pub struct Library<'a> {
     659              :     ptr: cxx::UniquePtr<ffi::ELF_DynamicEntryLibrary>,
     660              :     _owner: PhantomData<&'a ffi::ELF_Binary>
     661              : }
     662              : 
     663              : impl Library<'_> {
     664          180 :     pub fn name(&self) -> String {
     665          180 :         self.ptr.name().to_string()
     666          180 :     }
     667              : }
     668              : 
     669              : impl FromFFI<ffi::ELF_DynamicEntryLibrary> for Library<'_> {
     670          200 :     fn from_ffi(ptr: cxx::UniquePtr<ffi::ELF_DynamicEntryLibrary>) -> Self {
     671          200 :         Self {
     672          200 :             ptr,
     673          200 :             _owner: PhantomData
     674          200 :         }
     675          200 :     }
     676              : }
     677              : 
     678              : 
     679              : impl DynamicEntry for Library<'_> {
     680          360 :     fn as_base(&self) -> &ffi::ELF_DynamicEntry {
     681          360 :         self.ptr.as_ref().unwrap().as_ref()
     682          360 :     }
     683              : }
     684              : 
     685              : impl std::fmt::Debug for Library<'_> {
     686          180 :     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
     687          180 :         f.debug_struct("Library").finish()
     688          180 :     }
     689              : }
     690              : 
     691              : /// Structure that represents a dynamic entry associated with an array (e.g. `DT_INIT_ARRAY`)
     692              : pub struct Array<'a> {
     693              :     ptr: cxx::UniquePtr<ffi::ELF_DynamicEntryArray>,
     694              :     _owner: PhantomData<&'a ffi::ELF_Binary>
     695              : }
     696              : 
     697              : impl Array<'_> {
     698           70 :     pub fn array(&self) -> Vec<u64> {
     699           70 :         Vec::from(self.ptr.array().as_slice())
     700           70 :     }
     701              : }
     702              : 
     703              : impl FromFFI<ffi::ELF_DynamicEntryArray> for Array<'_> {
     704           70 :     fn from_ffi(ptr: cxx::UniquePtr<ffi::ELF_DynamicEntryArray>) -> Self {
     705           70 :         Self {
     706           70 :             ptr,
     707           70 :             _owner: PhantomData
     708           70 :         }
     709           70 :     }
     710              : }
     711              : 
     712              : impl DynamicEntry for Array<'_> {
     713          140 :     fn as_base(&self) -> &ffi::ELF_DynamicEntry {
     714          140 :         self.ptr.as_ref().unwrap().as_ref()
     715          140 :     }
     716              : }
     717              : 
     718              : impl std::fmt::Debug for Array<'_> {
     719           70 :     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
     720           70 :         f.debug_struct("Array").finish()
     721           70 :     }
     722              : }
     723              : 
     724              : /// Structure that represents a dynamic entry associated with the rpath info
     725              : pub struct Rpath<'a> {
     726              :     ptr: cxx::UniquePtr<ffi::ELF_DynamicEntryRpath>,
     727              :     _owner: PhantomData<&'a ffi::ELF_Binary>
     728              : }
     729              : 
     730              : impl Rpath<'_> {
     731           10 :     pub fn rpath(&self) -> String {
     732           10 :         self.ptr.rpath().to_string()
     733           10 :     }
     734              : }
     735              : 
     736              : impl FromFFI<ffi::ELF_DynamicEntryRpath> for Rpath<'_> {
     737           10 :     fn from_ffi(ptr: cxx::UniquePtr<ffi::ELF_DynamicEntryRpath>) -> Self {
     738           10 :         Self {
     739           10 :             ptr,
     740           10 :             _owner: PhantomData
     741           10 :         }
     742           10 :     }
     743              : }
     744              : 
     745              : 
     746              : impl DynamicEntry for Rpath<'_> {
     747           10 :     fn as_base(&self) -> &ffi::ELF_DynamicEntry {
     748           10 :         self.ptr.as_ref().unwrap().as_ref()
     749           10 :     }
     750              : }
     751              : 
     752              : impl std::fmt::Debug for Rpath<'_> {
     753           10 :     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
     754           10 :         f.debug_struct("Rpath").finish()
     755           10 :     }
     756              : }
     757              : 
     758              : /// Structure that represents a dynamic entry associated with the runpath info
     759              : pub struct RunPath<'a> {
     760              :     ptr: cxx::UniquePtr<ffi::ELF_DynamicEntryRunPath>,
     761              :     _owner: PhantomData<&'a ffi::ELF_Binary>
     762              : }
     763              : 
     764              : impl RunPath<'_> {
     765           10 :     pub fn runpath(&self) -> String {
     766           10 :         self.ptr.runpath().to_string()
     767           10 :     }
     768              : }
     769              : 
     770              : impl FromFFI<ffi::ELF_DynamicEntryRunPath> for RunPath<'_> {
     771           10 :     fn from_ffi(ptr: cxx::UniquePtr<ffi::ELF_DynamicEntryRunPath>) -> Self {
     772           10 :         Self {
     773           10 :             ptr,
     774           10 :             _owner: PhantomData
     775           10 :         }
     776           10 :     }
     777              : }
     778              : 
     779              : 
     780              : impl DynamicEntry for RunPath<'_> {
     781           10 :     fn as_base(&self) -> &ffi::ELF_DynamicEntry {
     782           10 :         self.ptr.as_ref().unwrap().as_ref()
     783           10 :     }
     784              : }
     785              : 
     786              : impl std::fmt::Debug for RunPath<'_> {
     787           10 :     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
     788           10 :         f.debug_struct("RunPath").finish()
     789           10 :     }
     790              : }
     791              : 
     792              : /// Structure that represents a dynamic entry associated with the name of a library (`DT_SONAME`)
     793              : pub struct SharedObject<'a> {
     794              :     ptr: cxx::UniquePtr<ffi::ELF_DynamicSharedObject>,
     795              :     _owner: PhantomData<&'a ffi::ELF_Binary>
     796              : }
     797              : 
     798              : impl SharedObject<'_> {
     799           10 :     pub fn name(&self) -> String {
     800           10 :         self.ptr.name().to_string()
     801           10 :     }
     802              : }
     803              : 
     804              : impl FromFFI<ffi::ELF_DynamicSharedObject> for SharedObject<'_> {
     805           10 :     fn from_ffi(ptr: cxx::UniquePtr<ffi::ELF_DynamicSharedObject>) -> Self {
     806           10 :         Self {
     807           10 :             ptr,
     808           10 :             _owner: PhantomData
     809           10 :         }
     810           10 :     }
     811              : }
     812              : 
     813              : impl DynamicEntry for SharedObject<'_> {
     814           10 :     fn as_base(&self) -> &ffi::ELF_DynamicEntry {
     815           10 :         self.ptr.as_ref().unwrap().as_ref()
     816           10 :     }
     817              : }
     818              : 
     819              : impl std::fmt::Debug for SharedObject<'_> {
     820           10 :     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
     821           10 :         f.debug_struct("SharedObject").finish()
     822           10 :     }
     823              : }
     824              : 
     825              : /// Structure that represents a dynamic flag entry: `DT_FLAGS` or `DT_FLAGS_1`
     826              : pub struct Flags<'a> {
     827              :     ptr: cxx::UniquePtr<ffi::ELF_DynamicEntryFlags>,
     828              :     _owner: PhantomData<&'a ffi::ELF_Binary>
     829              : }
     830              : 
     831              : impl Flags<'_> {
     832           20 :     pub fn flags(&self) -> DtFlags {
     833           20 :         DtFlags::from(self.ptr.flags())
     834           20 :     }
     835              : }
     836              : 
     837              : impl FromFFI<ffi::ELF_DynamicEntryFlags> for Flags<'_> {
     838           20 :     fn from_ffi(ptr: cxx::UniquePtr<ffi::ELF_DynamicEntryFlags>) -> Self {
     839           20 :         Self {
     840           20 :             ptr,
     841           20 :             _owner: PhantomData
     842           20 :         }
     843           20 :     }
     844              : }
     845              : 
     846              : impl DynamicEntry for Flags<'_> {
     847           20 :     fn as_base(&self) -> &ffi::ELF_DynamicEntry {
     848           20 :         self.ptr.as_ref().unwrap().as_ref()
     849           20 :     }
     850              : }
     851              : 
     852              : impl std::fmt::Debug for Flags<'_> {
     853           20 :     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
     854           20 :         f.debug_struct("Flags").finish()
     855           20 :     }
     856              : }
     857              : 
     858              : 
     859            0 : bitflags! {
     860           20 :     #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
     861            0 :     pub struct DtFlags: u64 {
     862            0 :         const ORIGIN = 0x1;
     863            0 :         const SYMBOLIC = 0x2;
     864            0 :         const TEXTREL = 0x4;
     865            0 :         const BIND_NOW = 0x8;
     866            0 :         const STATIC_TLS = 0x10;
     867            0 :         const NOW = 0x100000001;
     868            0 :         const GLOBAL = 0x100000002;
     869            0 :         const GROUP = 0x100000004;
     870            0 :         const NODELETE = 0x100000008;
     871            0 :         const LOADFLTR = 0x100000010;
     872            0 :         const INITFIRST = 0x100000020;
     873            0 :         const NOOPEN = 0x100000040;
     874            0 :         const HANDLE_ORIGIN = 0x100000080;
     875            0 :         const DIRECT = 0x100000100;
     876            0 :         const TRANS = 0x100000200;
     877            0 :         const INTERPOSE = 0x100000400;
     878            0 :         const NODEFLIB = 0x100000800;
     879            0 :         const NODUMP = 0x100001000;
     880            0 :         const CONFALT = 0x100002000;
     881            0 :         const ENDFILTEE = 0x100004000;
     882            0 :         const DISPRELDNE = 0x100008000;
     883            0 :         const DISPRELPND = 0x100010000;
     884            0 :         const NODIRECT = 0x100020000;
     885            0 :         const IGNMULDEF = 0x100040000;
     886            0 :         const NOKSYMS = 0x100080000;
     887            0 :         const NOHDR = 0x100100000;
     888            0 :         const EDITED = 0x100200000;
     889            0 :         const NORELOC = 0x100400000;
     890            0 :         const SYMINTPOSE = 0x100800000;
     891            0 :         const GLOBAUDIT = 0x101000000;
     892            0 :         const SINGLETON = 0x102000000;
     893            0 :         const PIE = 0x108000000;
     894            0 :         const KMOD = 0x110000000;
     895            0 :         const WEAKFILTER = 0x120000000;
     896            0 :         const NOCOMMON = 0x140000000;
     897            0 :     }
     898            0 : }
     899              : 
     900              : 
     901              : impl From<u64> for DtFlags {
     902           20 :     fn from(value: u64) -> Self {
     903           20 :         DtFlags::from_bits_truncate(value)
     904           20 :     }
     905              : }
     906              : impl From<DtFlags> for u64 {
     907            0 :     fn from(value: DtFlags) -> Self {
     908            0 :         value.bits()
     909            0 :     }
     910              : }
     911              : impl std::fmt::Display for DtFlags {
     912            0 :     fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
     913            0 :         bitflags::parser::to_writer(self, f)
     914            0 :     }
     915              : }
     916              : 
     917         1490 : declare_iterator!(DynamicEntries, Entries<'a>, ffi::ELF_DynamicEntry, ffi::ELF_Binary, ffi::ELF_Binary_it_dynamic_entries);
        

Generated by: LCOV version 2.1-1