/* * Copyright 2011, The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "ELFHeader.h" #include "ELF.h" char const *ELFHeaderHelperMixin::getClassStr(int clazz) { switch (clazz) { default: #define CASE_PAIR(A, B) case A: return B; CASE_PAIR(ELFCLASSNONE, "Invalid class") CASE_PAIR(ELFCLASS32, "32bit") CASE_PAIR(ELFCLASS64, "64bit") #undef CASE_PAIR } } char const *ELFHeaderHelperMixin::getEndiannessStr(int endianness) { switch (endianness) { default: #define CASE_PAIR(A, B) case A: return B; CASE_PAIR(ELFDATANONE, "Invalid endianness") CASE_PAIR(ELFDATA2LSB, "Little endian") CASE_PAIR(ELFDATA2MSB, "Big endian") #undef CASE_PAIR } } char const *ELFHeaderHelperMixin::getOSABIStr(int abi) { if (abi >= 64 && abi <= 255) { return "Architecture specific"; } switch (abi) { default: return "Unknown OS ABI"; #define CASE_PAIR(A, B) case A: return B; CASE_PAIR(ELFOSABI_NONE, "No extensions or not specified") CASE_PAIR(ELFOSABI_HPUX, "HP-UX") CASE_PAIR(ELFOSABI_NETBSD, "NetBSD") CASE_PAIR(ELFOSABI_LINUX, "Linux") CASE_PAIR(ELFOSABI_SOLARIS, "Solaris") CASE_PAIR(ELFOSABI_AIX, "AIX") CASE_PAIR(ELFOSABI_FREEBSD, "FreeBSD") CASE_PAIR(ELFOSABI_TRU64, "Tru64") CASE_PAIR(ELFOSABI_MODESTO, "Modesto") CASE_PAIR(ELFOSABI_OPENBSD, "OpenBSD") #undef CASE_PAIR } } char const *ELFHeaderHelperMixin::getObjectTypeStr(uint16_t type) { switch (type) { default: return "No file type"; case ET_REL: return "Relocatable file"; case ET_EXEC: return "Executable file"; case ET_DYN: return "Shared object file"; case ET_CORE: return "Core file"; case ET_LOOS: case ET_HIOS: return "Operating system-specific"; case ET_LOPROC: case ET_HIPROC: return "Processor-specific"; } } char const *ELFHeaderHelperMixin::getMachineStr(uint16_t machine) { switch (machine) { default: return "No machine or unknown"; case EM_386: return "Intel 80386 (X86)"; case EM_X86_64: return "AMD x86-64 architecture"; case EM_ARM: return "Advanced RISC Machine (ARM)"; case EM_AARCH64: return "Advanced RISC Machine (ARM) V8"; case EM_MIPS: return "MIPS"; } } char const *ELFHeaderHelperMixin::getVersionStr(uint32_t version) { switch (version) { default: return "Invalid version"; case EV_CURRENT: return "Current version"; } }