Home | History | Annotate | Line # | Download | only in bfd
elfxx-aarch64.h revision 1.1.1.1
      1  1.1  christos /* AArch64-specific backend routines.
      2  1.1  christos    Copyright (C) 2009-2015 Free Software Foundation, Inc.
      3  1.1  christos    Contributed by ARM Ltd.
      4  1.1  christos 
      5  1.1  christos    This file is part of BFD, the Binary File Descriptor library.
      6  1.1  christos 
      7  1.1  christos    This program is free software; you can redistribute it and/or modify
      8  1.1  christos    it under the terms of the GNU General Public License as published by
      9  1.1  christos    the Free Software Foundation; either version 3 of the License, or
     10  1.1  christos    (at your option) any later version.
     11  1.1  christos 
     12  1.1  christos    This program is distributed in the hope that it will be useful,
     13  1.1  christos    but WITHOUT ANY WARRANTY; without even the implied warranty of
     14  1.1  christos    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15  1.1  christos    GNU General Public License for more details.
     16  1.1  christos 
     17  1.1  christos    You should have received a copy of the GNU General Public License
     18  1.1  christos    along with this program; see the file COPYING3. If not,
     19  1.1  christos    see <http://www.gnu.org/licenses/>.  */
     20  1.1  christos 
     21  1.1  christos #include "bfd.h"
     22  1.1  christos #include "elf-bfd.h"
     23  1.1  christos #include "stdint.h"
     24  1.1  christos 
     25  1.1  christos /* Take the PAGE component of an address or offset.  */
     26  1.1  christos #define PG(x)        ((x) & ~ (bfd_vma) 0xfff)
     27  1.1  christos #define PG_OFFSET(x) ((x) &   (bfd_vma) 0xfff)
     28  1.1  christos 
     29  1.1  christos #define AARCH64_ADR_OP		0x10000000
     30  1.1  christos #define AARCH64_ADRP_OP		0x90000000
     31  1.1  christos #define AARCH64_ADRP_OP_MASK	0x9F000000
     32  1.1  christos 
     33  1.1  christos extern bfd_signed_vma
     34  1.1  christos _bfd_aarch64_sign_extend (bfd_vma, int);
     35  1.1  christos 
     36  1.1  christos extern uint32_t
     37  1.1  christos _bfd_aarch64_decode_adrp_imm (uint32_t);
     38  1.1  christos 
     39  1.1  christos extern uint32_t
     40  1.1  christos _bfd_aarch64_reencode_adr_imm (uint32_t, uint32_t);
     41  1.1  christos 
     42  1.1  christos extern bfd_reloc_status_type
     43  1.1  christos _bfd_aarch64_elf_put_addend (bfd *, bfd_byte *, bfd_reloc_code_real_type,
     44  1.1  christos 			     reloc_howto_type *, bfd_signed_vma);
     45  1.1  christos 
     46  1.1  christos extern bfd_vma
     47  1.1  christos _bfd_aarch64_elf_resolve_relocation (bfd_reloc_code_real_type, bfd_vma, bfd_vma,
     48  1.1  christos 				     bfd_vma, bfd_boolean);
     49  1.1  christos 
     50  1.1  christos extern bfd_boolean
     51  1.1  christos _bfd_aarch64_elf_add_symbol_hook (bfd *, struct bfd_link_info *,
     52  1.1  christos 				  Elf_Internal_Sym *, const char **,
     53  1.1  christos 				  flagword *, asection **, bfd_vma *);
     54  1.1  christos 
     55  1.1  christos extern bfd_boolean
     56  1.1  christos _bfd_aarch64_elf_grok_prstatus (bfd *, Elf_Internal_Note *);
     57  1.1  christos 
     58  1.1  christos extern bfd_boolean
     59  1.1  christos _bfd_aarch64_elf_grok_psinfo (bfd *, Elf_Internal_Note *);
     60  1.1  christos 
     61  1.1  christos extern char *
     62  1.1  christos _bfd_aarch64_elf_write_core_note (bfd *, char *, int *, int, ...);
     63  1.1  christos 
     64  1.1  christos #define elf_backend_add_symbol_hook	_bfd_aarch64_elf_add_symbol_hook
     65  1.1  christos #define elf_backend_grok_prstatus	_bfd_aarch64_elf_grok_prstatus
     66  1.1  christos #define elf_backend_grok_psinfo         _bfd_aarch64_elf_grok_psinfo
     67  1.1  christos #define elf_backend_write_core_note     _bfd_aarch64_elf_write_core_note
     68