LCOV - code coverage report
Current view: top level - libelf - elf32_getchdr.h (source / functions) Hit Total Coverage
Test: elfutils-0.191 Lines: 12 18 66.7 %
Date: 2024-03-24 18:28:45 Functions: 3 4 75.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 9 14 64.3 %

           Branch data     Line data    Source code
       1                 :            : #undef ADD_ROUTINE_PREFIX
       2                 :            : #undef ADD_ROUTINE_SUFFIX
       3                 :            : 
       4                 :            : #if ELF_WRLOCK_HELD
       5                 :            : #define CONCAT(x,y) x##y
       6                 :            : #define ADD_ROUTINE_PREFIX(y) CONCAT(__,y)
       7                 :            : #define ADD_ROUTINE_SUFFIX(x) x ## _wrlock
       8                 :            : #define INTERNAL internal_function
       9                 :            : #else
      10                 :            : #define ADD_ROUTINE_PREFIX(y) y
      11                 :            : #define ADD_ROUTINE_SUFFIX(x) x
      12                 :            : #define INTERNAL
      13                 :            : #endif
      14                 :            : 
      15                 :            : ElfW2(LIBELFBITS,Chdr) *
      16                 :            : INTERNAL
      17                 :       4046 : ADD_ROUTINE_PREFIX(elfw2(LIBELFBITS, ADD_ROUTINE_SUFFIX(getchdr))) (Elf_Scn *scn)
      18                 :            : {
      19                 :            : 
      20                 :       4046 :   ElfW2(LIBELFBITS,Shdr) *shdr = ADD_ROUTINE_PREFIX(elfw2(LIBELFBITS, ADD_ROUTINE_SUFFIX(getshdr)))(scn);
      21                 :            : 
      22         [ +  + ]:       4046 :   if (shdr == NULL)
      23                 :            :     return NULL;
      24                 :            : 
      25                 :            :   /* Must have SHF_COMPRESSED flag set.  Allocated or no bits sections
      26                 :            :      can never be compressed.  */
      27         [ -  + ]:       4044 :   if ((shdr->sh_flags & SHF_ALLOC) != 0)
      28                 :            :     {
      29                 :          0 :       __libelf_seterrno (ELF_E_INVALID_SECTION_FLAGS);
      30                 :          0 :       return NULL;
      31                 :            :     }
      32                 :            : 
      33                 :       4044 :   if (shdr->sh_type == SHT_NULL
      34         [ -  + ]:       4044 :       || shdr->sh_type == SHT_NOBITS)
      35                 :            :     {
      36                 :          0 :       __libelf_seterrno (ELF_E_INVALID_SECTION_TYPE);
      37                 :          0 :       return NULL;
      38                 :            :     }
      39                 :            : 
      40         [ +  + ]:       4044 :   if ((shdr->sh_flags & SHF_COMPRESSED) == 0)
      41                 :            :     {
      42                 :        244 :       __libelf_seterrno (ELF_E_NOT_COMPRESSED);
      43                 :        244 :       return NULL;
      44                 :            :     }
      45                 :            : 
      46                 :            :   /* This makes sure the data is in the correct format, so we don't
      47                 :            :      need to swap fields. */
      48                 :       3800 :   Elf_Data *d  = ADD_ROUTINE_PREFIX(ADD_ROUTINE_SUFFIX(elf_getdata)) (scn, NULL);
      49         [ -  + ]:       3800 :   if (d == NULL)
      50                 :            :     return NULL;
      51                 :            : 
      52   [ +  -  -  + ]:       3800 :   if (d->d_size < sizeof (ElfW2(LIBELFBITS,Chdr)) || d->d_buf == NULL)
      53                 :            :     {
      54                 :          0 :       __libelf_seterrno (ELF_E_INVALID_DATA);
      55                 :          0 :       return NULL;
      56                 :            :     }
      57                 :            : 
      58                 :            :   return (ElfW2(LIBELFBITS,Chdr) *) d->d_buf;
      59                 :            : }
      60                 :            : #undef INTERNAL
      61                 :            : #undef ELF_WRLOCK_HELD

Generated by: LCOV version 1.16