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