1ee6cdb95525abc8c7766798148302306a100b774Shih-wei Liao/* 2ee6cdb95525abc8c7766798148302306a100b774Shih-wei Liao * Copyright 2011, The Android Open Source Project 3ee6cdb95525abc8c7766798148302306a100b774Shih-wei Liao * 4ee6cdb95525abc8c7766798148302306a100b774Shih-wei Liao * Licensed under the Apache License, Version 2.0 (the "License"); 5ee6cdb95525abc8c7766798148302306a100b774Shih-wei Liao * you may not use this file except in compliance with the License. 6ee6cdb95525abc8c7766798148302306a100b774Shih-wei Liao * You may obtain a copy of the License at 7ee6cdb95525abc8c7766798148302306a100b774Shih-wei Liao * 8ee6cdb95525abc8c7766798148302306a100b774Shih-wei Liao * http://www.apache.org/licenses/LICENSE-2.0 9ee6cdb95525abc8c7766798148302306a100b774Shih-wei Liao * 10ee6cdb95525abc8c7766798148302306a100b774Shih-wei Liao * Unless required by applicable law or agreed to in writing, software 11ee6cdb95525abc8c7766798148302306a100b774Shih-wei Liao * distributed under the License is distributed on an "AS IS" BASIS, 12ee6cdb95525abc8c7766798148302306a100b774Shih-wei Liao * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ee6cdb95525abc8c7766798148302306a100b774Shih-wei Liao * See the License for the specific language governing permissions and 14ee6cdb95525abc8c7766798148302306a100b774Shih-wei Liao * limitations under the License. 15ee6cdb95525abc8c7766798148302306a100b774Shih-wei Liao */ 16ee6cdb95525abc8c7766798148302306a100b774Shih-wei Liao 1724573a0b89be8332225b40cced0d91e52ea87051Logan Chien#ifndef ELF_HEADER_HXX 1824573a0b89be8332225b40cced0d91e52ea87051Logan Chien#define ELF_HEADER_HXX 1924573a0b89be8332225b40cced0d91e52ea87051Logan Chien 2024573a0b89be8332225b40cced0d91e52ea87051Logan Chien#include "utils/raw_ostream.h" 2124573a0b89be8332225b40cced0d91e52ea87051Logan Chien 2224573a0b89be8332225b40cced0d91e52ea87051Logan Chien#include <llvm/Support/raw_ostream.h> 2324573a0b89be8332225b40cced0d91e52ea87051Logan Chien#include <llvm/Support/Format.h> 2424573a0b89be8332225b40cced0d91e52ea87051Logan Chien 2524573a0b89be8332225b40cced0d91e52ea87051Logan Chientemplate <unsigned Bitwidth> 2624573a0b89be8332225b40cced0d91e52ea87051Logan Chienvoid ELFHeader<Bitwidth>::print() { 2724573a0b89be8332225b40cced0d91e52ea87051Logan Chien using namespace llvm; 2824573a0b89be8332225b40cced0d91e52ea87051Logan Chien 2924573a0b89be8332225b40cced0d91e52ea87051Logan Chien out() << fillformat('=', 79) << '\n'; 3024573a0b89be8332225b40cced0d91e52ea87051Logan Chien out().changeColor(raw_ostream::WHITE, true); 3124573a0b89be8332225b40cced0d91e52ea87051Logan Chien out() << "ELF Header\n"; 3224573a0b89be8332225b40cced0d91e52ea87051Logan Chien out().resetColor(); 3324573a0b89be8332225b40cced0d91e52ea87051Logan Chien out() << fillformat('-', 79) << '\n'; 3424573a0b89be8332225b40cced0d91e52ea87051Logan Chien 3524573a0b89be8332225b40cced0d91e52ea87051Logan Chien#define PRINT_LINT(title, value) \ 3624573a0b89be8332225b40cced0d91e52ea87051Logan Chien out() << format(" %-32s : ", (char const *)(title)) << (value) << '\n' 3724573a0b89be8332225b40cced0d91e52ea87051Logan Chien PRINT_LINT("Class", getClassStr(getClass())); 3824573a0b89be8332225b40cced0d91e52ea87051Logan Chien PRINT_LINT("Endianness", getEndiannessStr(getEndianness())); 3924573a0b89be8332225b40cced0d91e52ea87051Logan Chien PRINT_LINT("Header Version", (unsigned)getVersion()); 4024573a0b89be8332225b40cced0d91e52ea87051Logan Chien PRINT_LINT("OS ABI", getOSABIStr(getOSABI())); 4124573a0b89be8332225b40cced0d91e52ea87051Logan Chien PRINT_LINT("ABI Version", (unsigned)getABIVersion()); 4224573a0b89be8332225b40cced0d91e52ea87051Logan Chien PRINT_LINT("Object Type", getObjectTypeStr(getObjectType())); 4324573a0b89be8332225b40cced0d91e52ea87051Logan Chien PRINT_LINT("Machine", getMachineStr(getMachine())); 4424573a0b89be8332225b40cced0d91e52ea87051Logan Chien PRINT_LINT("Version", getVersionStr(getVersion())); 4524573a0b89be8332225b40cced0d91e52ea87051Logan Chien PRINT_LINT("Entry Address", getEntryAddress()); 4624573a0b89be8332225b40cced0d91e52ea87051Logan Chien PRINT_LINT("Program Header Offset", getProgramHeaderTableOffset()); 4724573a0b89be8332225b40cced0d91e52ea87051Logan Chien PRINT_LINT("Section Header Offset", getSectionHeaderTableOffset()); 4824573a0b89be8332225b40cced0d91e52ea87051Logan Chien PRINT_LINT("Flags", getFlags()); 4924573a0b89be8332225b40cced0d91e52ea87051Logan Chien PRINT_LINT("ELF Header Size", getELFHeaderSize()); 5024573a0b89be8332225b40cced0d91e52ea87051Logan Chien PRINT_LINT("Program Header Size", getProgramHeaderEntrySize()); 5124573a0b89be8332225b40cced0d91e52ea87051Logan Chien PRINT_LINT("Program Header Num", getProgramHeaderNum()); 5224573a0b89be8332225b40cced0d91e52ea87051Logan Chien PRINT_LINT("Section Header Size", getSectionHeaderEntrySize()); 5324573a0b89be8332225b40cced0d91e52ea87051Logan Chien PRINT_LINT("Section Header Num", getSectionHeaderNum()); 5424573a0b89be8332225b40cced0d91e52ea87051Logan Chien PRINT_LINT("String Section Index", getStringSectionIndex()); 5524573a0b89be8332225b40cced0d91e52ea87051Logan Chien#undef PRINT_LINT 5624573a0b89be8332225b40cced0d91e52ea87051Logan Chien 5724573a0b89be8332225b40cced0d91e52ea87051Logan Chien out() << fillformat('=', 79) << "\n\n"; 5824573a0b89be8332225b40cced0d91e52ea87051Logan Chien} 5924573a0b89be8332225b40cced0d91e52ea87051Logan Chien 6024573a0b89be8332225b40cced0d91e52ea87051Logan Chien#endif // ELF_HEADER_HXX 61