1b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/* Arm specific symbolic name handling. 2939e4807ccd5f7f8f8826eb2914b895e4458c1a4Petr Machata Copyright (C) 2002-2009, 2014, 2015 Red Hat, Inc. 3de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard This file is part of elfutils. 4b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 5de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard This file is free software; you can redistribute it and/or modify 6de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard it under the terms of either 7b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 8de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard * the GNU Lesser General Public License as published by the Free 9de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard Software Foundation; either version 3 of the License, or (at 10de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard your option) any later version 11de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard 12de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard or 13de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard 14de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard * the GNU General Public License as published by the Free 15de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard Software Foundation; either version 2 of the License, or (at 16de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard your option) any later version 17de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard 18de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard or both in parallel, as here. 19de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard 20de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard elfutils is distributed in the hope that it will be useful, but 21361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper WITHOUT ANY WARRANTY; without even the implied warranty of 22361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 23361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper General Public License for more details. 24361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper 25de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard You should have received copies of the GNU General Public License and 26de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard the GNU Lesser General Public License along with this program. If 27de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard not, see <http://www.gnu.org/licenses/>. */ 28b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 29b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#ifdef HAVE_CONFIG_H 30b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper# include <config.h> 31b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#endif 32b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 33b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#include <elf.h> 34b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#include <stddef.h> 35b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 36cd60ea83050d9fb48c3204005f475df460f433b6Roland McGrath#define BACKEND arm_ 37cd60ea83050d9fb48c3204005f475df460f433b6Roland McGrath#include "libebl_CPU.h" 38b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 39eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath 40eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrathconst char * 41eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGratharm_segment_type_name (int segment, char *buf __attribute__ ((unused)), 42eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath size_t len __attribute__ ((unused))) 43eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath{ 44eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath switch (segment) 45eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath { 46eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath case PT_ARM_EXIDX: 47eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath return "ARM_EXIDX"; 48eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath } 49eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath return NULL; 50eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath} 51eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath 52eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath/* Return symbolic representation of section type. */ 53eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrathconst char * 54eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGratharm_section_type_name (int type, 55eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath char *buf __attribute__ ((unused)), 56eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath size_t len __attribute__ ((unused))) 57eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath{ 58eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath switch (type) 59eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath { 60eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath case SHT_ARM_EXIDX: 61eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath return "ARM_EXIDX"; 62eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath case SHT_ARM_PREEMPTMAP: 63eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath return "ARM_PREEMPTMAP"; 64eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath case SHT_ARM_ATTRIBUTES: 65eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath return "ARM_ATTRIBUTES"; 66eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath } 67eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath 68eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath return NULL; 69eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath} 70eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath 71eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath/* Check whether machine flags are valid. */ 72eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrathbool 73eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGratharm_machine_flag_check (GElf_Word flags) 74eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath{ 75eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath switch (flags & EF_ARM_EABIMASK) 76eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath { 77eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath case EF_ARM_EABI_UNKNOWN: 78eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath case EF_ARM_EABI_VER1: 79eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath case EF_ARM_EABI_VER2: 80eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath case EF_ARM_EABI_VER3: 81eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath case EF_ARM_EABI_VER4: 82eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath case EF_ARM_EABI_VER5: 83eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath break; 84eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath default: 85eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath return false; 86eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath } 87eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath 88eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath return ((flags &~ (EF_ARM_EABIMASK 89eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath | EF_ARM_RELEXEC 90eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath | EF_ARM_HASENTRY 91eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath | EF_ARM_INTERWORK 92eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath | EF_ARM_APCS_26 93eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath | EF_ARM_APCS_FLOAT 94eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath | EF_ARM_PIC 95eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath | EF_ARM_ALIGN8 96eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath | EF_ARM_NEW_ABI 97eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath | EF_ARM_OLD_ABI 98eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath | EF_ARM_SOFT_FLOAT 99eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath | EF_ARM_VFP_FLOAT 100eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath | EF_ARM_MAVERICK_FLOAT 101eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath | EF_ARM_SYMSARESORTED 102eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath | EF_ARM_DYNSYMSUSESEGIDX 103eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath | EF_ARM_MAPSYMSFIRST 104eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath | EF_ARM_EABIMASK 105eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath | EF_ARM_BE8 106eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath | EF_ARM_LE8)) == 0); 107eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath} 108eb9ba470ff1f65a85f47cd6c325acf836abd2af8Roland McGrath 109cd60ea83050d9fb48c3204005f475df460f433b6Roland McGrath/* Check for the simple reloc types. */ 110cd60ea83050d9fb48c3204005f475df460f433b6Roland McGrathElf_Type 111cd60ea83050d9fb48c3204005f475df460f433b6Roland McGratharm_reloc_simple_type (Ebl *ebl __attribute__ ((unused)), int type) 112b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper{ 113cd60ea83050d9fb48c3204005f475df460f433b6Roland McGrath switch (type) 114cd60ea83050d9fb48c3204005f475df460f433b6Roland McGrath { 115cd60ea83050d9fb48c3204005f475df460f433b6Roland McGrath case R_ARM_ABS32: 116cd60ea83050d9fb48c3204005f475df460f433b6Roland McGrath return ELF_T_WORD; 117cd60ea83050d9fb48c3204005f475df460f433b6Roland McGrath case R_ARM_ABS16: 118cd60ea83050d9fb48c3204005f475df460f433b6Roland McGrath return ELF_T_HALF; 119cd60ea83050d9fb48c3204005f475df460f433b6Roland McGrath case R_ARM_ABS8: 120cd60ea83050d9fb48c3204005f475df460f433b6Roland McGrath return ELF_T_BYTE; 121cd60ea83050d9fb48c3204005f475df460f433b6Roland McGrath default: 122cd60ea83050d9fb48c3204005f475df460f433b6Roland McGrath return ELF_T_NUM; 123cd60ea83050d9fb48c3204005f475df460f433b6Roland McGrath } 124b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper} 125028d0ab0cc1cb5f96ee48feef966b7d8d56c6a8eMark Wielaard 126028d0ab0cc1cb5f96ee48feef966b7d8d56c6a8eMark Wielaard/* The SHT_ARM_EXIDX section type is a valid target for relocation. */ 127028d0ab0cc1cb5f96ee48feef966b7d8d56c6a8eMark Wielaardbool 128028d0ab0cc1cb5f96ee48feef966b7d8d56c6a8eMark Wielaardarm_check_reloc_target_type (Ebl *ebl __attribute__ ((unused)), Elf64_Word sh_type) 129028d0ab0cc1cb5f96ee48feef966b7d8d56c6a8eMark Wielaard{ 130028d0ab0cc1cb5f96ee48feef966b7d8d56c6a8eMark Wielaard return sh_type == SHT_ARM_EXIDX; 131028d0ab0cc1cb5f96ee48feef966b7d8d56c6a8eMark Wielaard} 132939e4807ccd5f7f8f8826eb2914b895e4458c1a4Petr Machata 133939e4807ccd5f7f8f8826eb2914b895e4458c1a4Petr Machataconst char * 134939e4807ccd5f7f8f8826eb2914b895e4458c1a4Petr Machataarm_symbol_type_name (int type, 135939e4807ccd5f7f8f8826eb2914b895e4458c1a4Petr Machata char *buf __attribute__ ((unused)), 136939e4807ccd5f7f8f8826eb2914b895e4458c1a4Petr Machata size_t len __attribute__ ((unused))) 137939e4807ccd5f7f8f8826eb2914b895e4458c1a4Petr Machata{ 138939e4807ccd5f7f8f8826eb2914b895e4458c1a4Petr Machata switch (type) 139939e4807ccd5f7f8f8826eb2914b895e4458c1a4Petr Machata { 140939e4807ccd5f7f8f8826eb2914b895e4458c1a4Petr Machata case STT_ARM_TFUNC: 141939e4807ccd5f7f8f8826eb2914b895e4458c1a4Petr Machata return "ARM_TFUNC"; 142939e4807ccd5f7f8f8826eb2914b895e4458c1a4Petr Machata } 143939e4807ccd5f7f8f8826eb2914b895e4458c1a4Petr Machata return NULL; 144939e4807ccd5f7f8f8826eb2914b895e4458c1a4Petr Machata} 145