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