LCOV - code coverage report
Current view: top level - lib/Object - ELF.cpp (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 69 81 85.2 %
Date: 2017-09-14 15:23:50 Functions: 2 2 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : //===- ELF.cpp - ELF object file implementation ---------------------------===//
       2             : //
       3             : //                     The LLVM Compiler Infrastructure
       4             : //
       5             : // This file is distributed under the University of Illinois Open Source
       6             : // License. See LICENSE.TXT for details.
       7             : //
       8             : //===----------------------------------------------------------------------===//
       9             : 
      10             : #include "llvm/Object/ELF.h"
      11             : #include "llvm/BinaryFormat/ELF.h"
      12             : 
      13             : using namespace llvm;
      14             : using namespace object;
      15             : 
      16             : #define STRINGIFY_ENUM_CASE(ns, name)                                          \
      17             :   case ns::name:                                                               \
      18             :     return #name;
      19             : 
      20             : #define ELF_RELOC(name, value) STRINGIFY_ENUM_CASE(ELF, name)
      21             : 
      22        3908 : StringRef llvm::object::getELFRelocationTypeName(uint32_t Machine,
      23             :                                                  uint32_t Type) {
      24        3908 :   switch (Machine) {
      25         792 :   case ELF::EM_X86_64:
      26         792 :     switch (Type) {
      27             : #include "llvm/BinaryFormat/ELFRelocs/x86_64.def"
      28             :     default:
      29             :       break;
      30             :     }
      31             :     break;
      32         263 :   case ELF::EM_386:
      33             :   case ELF::EM_IAMCU:
      34         263 :     switch (Type) {
      35             : #include "llvm/BinaryFormat/ELFRelocs/i386.def"
      36             :     default:
      37             :       break;
      38             :     }
      39             :     break;
      40         901 :   case ELF::EM_MIPS:
      41         901 :     switch (Type) {
      42             : #include "llvm/BinaryFormat/ELFRelocs/Mips.def"
      43             :     default:
      44             :       break;
      45             :     }
      46             :     break;
      47         665 :   case ELF::EM_AARCH64:
      48         665 :     switch (Type) {
      49             : #include "llvm/BinaryFormat/ELFRelocs/AArch64.def"
      50             :     default:
      51             :       break;
      52             :     }
      53             :     break;
      54         498 :   case ELF::EM_ARM:
      55         498 :     switch (Type) {
      56             : #include "llvm/BinaryFormat/ELFRelocs/ARM.def"
      57             :     default:
      58             :       break;
      59             :     }
      60             :     break;
      61           0 :   case ELF::EM_ARC_COMPACT:
      62             :   case ELF::EM_ARC_COMPACT2:
      63           0 :     switch (Type) {
      64             : #include "llvm/BinaryFormat/ELFRelocs/ARC.def"
      65             :     default:
      66             :       break;
      67             :     }
      68             :     break;
      69           0 :   case ELF::EM_AVR:
      70           0 :     switch (Type) {
      71             : #include "llvm/BinaryFormat/ELFRelocs/AVR.def"
      72             :     default:
      73             :       break;
      74             :     }
      75             :     break;
      76         113 :   case ELF::EM_HEXAGON:
      77         113 :     switch (Type) {
      78             : #include "llvm/BinaryFormat/ELFRelocs/Hexagon.def"
      79             :     default:
      80             :       break;
      81             :     }
      82             :     break;
      83          14 :   case ELF::EM_LANAI:
      84          14 :     switch (Type) {
      85             : #include "llvm/BinaryFormat/ELFRelocs/Lanai.def"
      86             :     default:
      87             :       break;
      88             :     }
      89             :     break;
      90           2 :   case ELF::EM_PPC:
      91           2 :     switch (Type) {
      92             : #include "llvm/BinaryFormat/ELFRelocs/PowerPC.def"
      93             :     default:
      94             :       break;
      95             :     }
      96             :     break;
      97         458 :   case ELF::EM_PPC64:
      98         458 :     switch (Type) {
      99             : #include "llvm/BinaryFormat/ELFRelocs/PowerPC64.def"
     100             :     default:
     101             :       break;
     102             :     }
     103             :     break;
     104           0 :   case ELF::EM_RISCV:
     105           0 :     switch (Type) {
     106             : #include "llvm/BinaryFormat/ELFRelocs/RISCV.def"
     107             :     default:
     108             :       break;
     109             :     }
     110             :     break;
     111          31 :   case ELF::EM_S390:
     112          31 :     switch (Type) {
     113             : #include "llvm/BinaryFormat/ELFRelocs/SystemZ.def"
     114             :     default:
     115             :       break;
     116             :     }
     117             :     break;
     118         127 :   case ELF::EM_SPARC:
     119             :   case ELF::EM_SPARC32PLUS:
     120             :   case ELF::EM_SPARCV9:
     121         127 :     switch (Type) {
     122             : #include "llvm/BinaryFormat/ELFRelocs/Sparc.def"
     123             :     default:
     124             :       break;
     125             :     }
     126             :     break;
     127           0 :   case ELF::EM_WEBASSEMBLY:
     128           0 :     switch (Type) {
     129             : #include "llvm/BinaryFormat/ELFRelocs/WebAssembly.def"
     130             :     default:
     131             :       break;
     132             :     }
     133             :     break;
     134          42 :   case ELF::EM_AMDGPU:
     135          42 :     switch (Type) {
     136             : #include "llvm/BinaryFormat/ELFRelocs/AMDGPU.def"
     137             :     default:
     138             :       break;
     139             :     }
     140             :   case ELF::EM_BPF:
     141           2 :     switch (Type) {
     142             : #include "llvm/BinaryFormat/ELFRelocs/BPF.def"
     143             :     default:
     144             :       break;
     145             :     }
     146             :     break;
     147             :   default:
     148             :     break;
     149             :   }
     150           4 :   return "Unknown";
     151             : }
     152             : 
     153             : #undef ELF_RELOC
     154             : 
     155      135217 : StringRef llvm::object::getELFSectionTypeName(uint32_t Machine, unsigned Type) {
     156      135217 :   switch (Machine) {
     157         652 :   case ELF::EM_ARM:
     158         652 :     switch (Type) {
     159          70 :       STRINGIFY_ENUM_CASE(ELF, SHT_ARM_EXIDX);
     160           0 :       STRINGIFY_ENUM_CASE(ELF, SHT_ARM_PREEMPTMAP);
     161          10 :       STRINGIFY_ENUM_CASE(ELF, SHT_ARM_ATTRIBUTES);
     162           0 :       STRINGIFY_ENUM_CASE(ELF, SHT_ARM_DEBUGOVERLAY);
     163           0 :       STRINGIFY_ENUM_CASE(ELF, SHT_ARM_OVERLAYSECTION);
     164             :     }
     165             :     break;
     166           5 :   case ELF::EM_HEXAGON:
     167           5 :     switch (Type) { STRINGIFY_ENUM_CASE(ELF, SHT_HEX_ORDERED); }
     168             :     break;
     169      132930 :   case ELF::EM_X86_64:
     170      132930 :     switch (Type) { STRINGIFY_ENUM_CASE(ELF, SHT_X86_64_UNWIND); }
     171             :     break;
     172         714 :   case ELF::EM_MIPS:
     173             :   case ELF::EM_MIPS_RS3_LE:
     174         714 :     switch (Type) {
     175          47 :       STRINGIFY_ENUM_CASE(ELF, SHT_MIPS_REGINFO);
     176          17 :       STRINGIFY_ENUM_CASE(ELF, SHT_MIPS_OPTIONS);
     177          64 :       STRINGIFY_ENUM_CASE(ELF, SHT_MIPS_ABIFLAGS);
     178           1 :       STRINGIFY_ENUM_CASE(ELF, SHT_MIPS_DWARF);
     179             :     }
     180             :     break;
     181             :   default:
     182             :     break;
     183             :   }
     184             : 
     185      134979 :   switch (Type) {
     186         486 :     STRINGIFY_ENUM_CASE(ELF, SHT_NULL);
     187      132098 :     STRINGIFY_ENUM_CASE(ELF, SHT_PROGBITS);
     188         483 :     STRINGIFY_ENUM_CASE(ELF, SHT_SYMTAB);
     189         896 :     STRINGIFY_ENUM_CASE(ELF, SHT_STRTAB);
     190         177 :     STRINGIFY_ENUM_CASE(ELF, SHT_RELA);
     191         140 :     STRINGIFY_ENUM_CASE(ELF, SHT_HASH);
     192         143 :     STRINGIFY_ENUM_CASE(ELF, SHT_DYNAMIC);
     193          24 :     STRINGIFY_ENUM_CASE(ELF, SHT_NOTE);
     194         161 :     STRINGIFY_ENUM_CASE(ELF, SHT_NOBITS);
     195         165 :     STRINGIFY_ENUM_CASE(ELF, SHT_REL);
     196           0 :     STRINGIFY_ENUM_CASE(ELF, SHT_SHLIB);
     197         143 :     STRINGIFY_ENUM_CASE(ELF, SHT_DYNSYM);
     198          11 :     STRINGIFY_ENUM_CASE(ELF, SHT_INIT_ARRAY);
     199           7 :     STRINGIFY_ENUM_CASE(ELF, SHT_FINI_ARRAY);
     200           5 :     STRINGIFY_ENUM_CASE(ELF, SHT_PREINIT_ARRAY);
     201          25 :     STRINGIFY_ENUM_CASE(ELF, SHT_GROUP);
     202           1 :     STRINGIFY_ENUM_CASE(ELF, SHT_SYMTAB_SHNDX);
     203           1 :     STRINGIFY_ENUM_CASE(ELF, SHT_LLVM_ODRTAB);
     204           1 :     STRINGIFY_ENUM_CASE(ELF, SHT_GNU_ATTRIBUTES);
     205           4 :     STRINGIFY_ENUM_CASE(ELF, SHT_GNU_HASH);
     206           1 :     STRINGIFY_ENUM_CASE(ELF, SHT_GNU_verdef);
     207           2 :     STRINGIFY_ENUM_CASE(ELF, SHT_GNU_verneed);
     208           3 :     STRINGIFY_ENUM_CASE(ELF, SHT_GNU_versym);
     209           2 :   default:
     210           2 :     return "Unknown";
     211             :   }
     212             : }

Generated by: LCOV version 1.13