Home | History | Annotate | Download | only in backends
      1 /* Arm specific symbolic name handling.
      2    Copyright (C) 2002-2009 Red Hat, Inc.
      3    This file is part of Red Hat elfutils.
      4 
      5    Red Hat elfutils is free software; you can redistribute it and/or modify
      6    it under the terms of the GNU General Public License as published by the
      7    Free Software Foundation; version 2 of the License.
      8 
      9    Red Hat elfutils is distributed in the hope that it will be useful, but
     10    WITHOUT ANY WARRANTY; without even the implied warranty of
     11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     12    General Public License for more details.
     13 
     14    You should have received a copy of the GNU General Public License along
     15    with Red Hat elfutils; if not, write to the Free Software Foundation,
     16    Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
     17 
     18    Red Hat elfutils is an included package of the Open Invention Network.
     19    An included package of the Open Invention Network is a package for which
     20    Open Invention Network licensees cross-license their patents.  No patent
     21    license is granted, either expressly or impliedly, by designation as an
     22    included package.  Should you wish to participate in the Open Invention
     23    Network licensing program, please visit www.openinventionnetwork.com
     24    <http://www.openinventionnetwork.com>.  */
     25 
     26 #ifdef HAVE_CONFIG_H
     27 # include <config.h>
     28 #endif
     29 
     30 #include <elf.h>
     31 #include <stddef.h>
     32 
     33 #define BACKEND		arm_
     34 #include "libebl_CPU.h"
     35 
     36 
     37 const char *
     38 arm_segment_type_name (int segment, char *buf __attribute__ ((unused)),
     39 		       size_t len __attribute__ ((unused)))
     40 {
     41   switch (segment)
     42     {
     43     case PT_ARM_EXIDX:
     44       return "ARM_EXIDX";
     45     }
     46   return NULL;
     47 }
     48 
     49 /* Return symbolic representation of section type.  */
     50 const char *
     51 arm_section_type_name (int type,
     52 		       char *buf __attribute__ ((unused)),
     53 		       size_t len __attribute__ ((unused)))
     54 {
     55   switch (type)
     56     {
     57     case SHT_ARM_EXIDX:
     58       return "ARM_EXIDX";
     59     case SHT_ARM_PREEMPTMAP:
     60       return "ARM_PREEMPTMAP";
     61     case SHT_ARM_ATTRIBUTES:
     62       return "ARM_ATTRIBUTES";
     63     }
     64 
     65   return NULL;
     66 }
     67 
     68 /* Check whether machine flags are valid.  */
     69 bool
     70 arm_machine_flag_check (GElf_Word flags)
     71 {
     72   switch (flags & EF_ARM_EABIMASK)
     73     {
     74     case EF_ARM_EABI_UNKNOWN:
     75     case EF_ARM_EABI_VER1:
     76     case EF_ARM_EABI_VER2:
     77     case EF_ARM_EABI_VER3:
     78     case EF_ARM_EABI_VER4:
     79     case EF_ARM_EABI_VER5:
     80       break;
     81     default:
     82       return false;
     83     }
     84 
     85   return ((flags &~ (EF_ARM_EABIMASK
     86 		     | EF_ARM_RELEXEC
     87 		     | EF_ARM_HASENTRY
     88 		     | EF_ARM_INTERWORK
     89 		     | EF_ARM_APCS_26
     90 		     | EF_ARM_APCS_FLOAT
     91 		     | EF_ARM_PIC
     92 		     | EF_ARM_ALIGN8
     93 		     | EF_ARM_NEW_ABI
     94 		     | EF_ARM_OLD_ABI
     95 		     | EF_ARM_SOFT_FLOAT
     96 		     | EF_ARM_VFP_FLOAT
     97 		     | EF_ARM_MAVERICK_FLOAT
     98 		     | EF_ARM_SYMSARESORTED
     99 		     | EF_ARM_DYNSYMSUSESEGIDX
    100 		     | EF_ARM_MAPSYMSFIRST
    101 		     | EF_ARM_EABIMASK
    102 		     | EF_ARM_BE8
    103 		     | EF_ARM_LE8)) == 0);
    104 }
    105 
    106 /* Check for the simple reloc types.  */
    107 Elf_Type
    108 arm_reloc_simple_type (Ebl *ebl __attribute__ ((unused)), int type)
    109 {
    110   switch (type)
    111     {
    112     case R_ARM_ABS32:
    113       return ELF_T_WORD;
    114     case R_ARM_ABS16:
    115       return ELF_T_HALF;
    116     case R_ARM_ABS8:
    117       return ELF_T_BYTE;
    118     default:
    119       return ELF_T_NUM;
    120     }
    121 }
    122