1cbb2f63462cb96c46e84ad29b52f82bf35baa7e5Shih-wei Liao/*
2cbb2f63462cb96c46e84ad29b52f82bf35baa7e5Shih-wei Liao * Copyright 2011, The Android Open Source Project
3cbb2f63462cb96c46e84ad29b52f82bf35baa7e5Shih-wei Liao *
4cbb2f63462cb96c46e84ad29b52f82bf35baa7e5Shih-wei Liao * Licensed under the Apache License, Version 2.0 (the "License");
5cbb2f63462cb96c46e84ad29b52f82bf35baa7e5Shih-wei Liao * you may not use this file except in compliance with the License.
6cbb2f63462cb96c46e84ad29b52f82bf35baa7e5Shih-wei Liao * You may obtain a copy of the License at
7cbb2f63462cb96c46e84ad29b52f82bf35baa7e5Shih-wei Liao *
8cbb2f63462cb96c46e84ad29b52f82bf35baa7e5Shih-wei Liao *     http://www.apache.org/licenses/LICENSE-2.0
9cbb2f63462cb96c46e84ad29b52f82bf35baa7e5Shih-wei Liao *
10cbb2f63462cb96c46e84ad29b52f82bf35baa7e5Shih-wei Liao * Unless required by applicable law or agreed to in writing, software
11cbb2f63462cb96c46e84ad29b52f82bf35baa7e5Shih-wei Liao * distributed under the License is distributed on an "AS IS" BASIS,
12cbb2f63462cb96c46e84ad29b52f82bf35baa7e5Shih-wei Liao * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13cbb2f63462cb96c46e84ad29b52f82bf35baa7e5Shih-wei Liao * See the License for the specific language governing permissions and
14cbb2f63462cb96c46e84ad29b52f82bf35baa7e5Shih-wei Liao * limitations under the License.
15cbb2f63462cb96c46e84ad29b52f82bf35baa7e5Shih-wei Liao */
16cbb2f63462cb96c46e84ad29b52f82bf35baa7e5Shih-wei Liao
1761dfca9e892597db79889addb7a3abf54cd50588Logan Chien#include "ELFSectionHeader.h"
18404833ada8caa7027105bd52bd36ab7822030369TDYa#include "ELF.h"
1961dfca9e892597db79889addb7a3abf54cd50588Logan Chien
20458a97643030c0cb22a68f8bfc8afa509925d43dLogan Chien// ARM Section Header Type Definitions
21458a97643030c0cb22a68f8bfc8afa509925d43dLogan Chien
22458a97643030c0cb22a68f8bfc8afa509925d43dLogan Chien// TODO: These definitions are not defined in external/elfutils/libelf/
23458a97643030c0cb22a68f8bfc8afa509925d43dLogan Chien// elf.h.  So we to this by ourself.  Maybe we should update elf.h
24458a97643030c0cb22a68f8bfc8afa509925d43dLogan Chien// instead.
25458a97643030c0cb22a68f8bfc8afa509925d43dLogan Chien
26458a97643030c0cb22a68f8bfc8afa509925d43dLogan Chien#ifndef SHT_ARM_EXIDX
27458a97643030c0cb22a68f8bfc8afa509925d43dLogan Chien#define SHT_ARM_EXIDX (SHT_LOPROC + 1)
28458a97643030c0cb22a68f8bfc8afa509925d43dLogan Chien#endif
29458a97643030c0cb22a68f8bfc8afa509925d43dLogan Chien
30458a97643030c0cb22a68f8bfc8afa509925d43dLogan Chien#ifndef SHT_ARM_PREEMPTMAP
31458a97643030c0cb22a68f8bfc8afa509925d43dLogan Chien#define SHT_ARM_PREEMPTMAP (SHT_LOPROC + 2)
32458a97643030c0cb22a68f8bfc8afa509925d43dLogan Chien#endif
33458a97643030c0cb22a68f8bfc8afa509925d43dLogan Chien
34458a97643030c0cb22a68f8bfc8afa509925d43dLogan Chien#ifndef SHT_ARM_ATTRIBUTES
35458a97643030c0cb22a68f8bfc8afa509925d43dLogan Chien#define SHT_ARM_ATTRIBUTES (SHT_LOPROC + 3)
36458a97643030c0cb22a68f8bfc8afa509925d43dLogan Chien#endif
37458a97643030c0cb22a68f8bfc8afa509925d43dLogan Chien
3861dfca9e892597db79889addb7a3abf54cd50588Logan Chienchar const *ELFSectionHeaderHelperMixin::getSectionTypeStr(uint32_t type) {
3961dfca9e892597db79889addb7a3abf54cd50588Logan Chien  switch (type) {
4061dfca9e892597db79889addb7a3abf54cd50588Logan Chien    default: return "(UNKNOWN)";
4161dfca9e892597db79889addb7a3abf54cd50588Logan Chien
4261dfca9e892597db79889addb7a3abf54cd50588Logan Chien#define CASE(TYPE) \
4361dfca9e892597db79889addb7a3abf54cd50588Logan Chien    case SHT_##TYPE: return #TYPE;
4461dfca9e892597db79889addb7a3abf54cd50588Logan Chien
4561dfca9e892597db79889addb7a3abf54cd50588Logan Chien    // General section header type
4661dfca9e892597db79889addb7a3abf54cd50588Logan Chien    CASE(NULL) CASE(PROGBITS) CASE(SYMTAB) CASE(STRTAB) CASE(RELA) CASE(HASH)
4761dfca9e892597db79889addb7a3abf54cd50588Logan Chien    CASE(DYNAMIC) CASE(NOTE) CASE(NOBITS) CASE(REL) CASE(SHLIB)
4861dfca9e892597db79889addb7a3abf54cd50588Logan Chien    CASE(DYNSYM) CASE(INIT_ARRAY) CASE(FINI_ARRAY) CASE(PREINIT_ARRAY)
4961dfca9e892597db79889addb7a3abf54cd50588Logan Chien    CASE(GROUP) CASE(SYMTAB_SHNDX) CASE(LOOS) CASE(HIOS) CASE(LOPROC)
5061dfca9e892597db79889addb7a3abf54cd50588Logan Chien    CASE(HIPROC) CASE(LOUSER) CASE(HIUSER)
5161dfca9e892597db79889addb7a3abf54cd50588Logan Chien
5261dfca9e892597db79889addb7a3abf54cd50588Logan Chien    // ARM-specific section header type
5361dfca9e892597db79889addb7a3abf54cd50588Logan Chien    CASE(ARM_EXIDX) CASE(ARM_PREEMPTMAP) CASE(ARM_ATTRIBUTES)
5461dfca9e892597db79889addb7a3abf54cd50588Logan Chien
5561dfca9e892597db79889addb7a3abf54cd50588Logan Chien#undef CASE
5661dfca9e892597db79889addb7a3abf54cd50588Logan Chien  }
5761dfca9e892597db79889addb7a3abf54cd50588Logan Chien}
58