1 1.1 christos /* TILE-Gx-specific support for 32-bit ELF. 2 1.1.1.9 christos Copyright (C) 2011-2026 Free Software Foundation, Inc. 3 1.1 christos 4 1.1 christos This file is part of BFD, the Binary File Descriptor library. 5 1.1 christos 6 1.1 christos This program is free software; you can redistribute it and/or modify 7 1.1 christos it under the terms of the GNU General Public License as published by 8 1.1 christos the Free Software Foundation; either version 3 of the License, or 9 1.1 christos (at your option) any later version. 10 1.1 christos 11 1.1 christos This program is distributed in the hope that it will be useful, 12 1.1 christos but WITHOUT ANY WARRANTY; without even the implied warranty of 13 1.1 christos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 1.1 christos GNU General Public License for more details. 15 1.1 christos 16 1.1 christos You should have received a copy of the GNU General Public License 17 1.1 christos along with this program; if not, write to the Free Software 18 1.1 christos Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, 19 1.1 christos MA 02110-1301, USA. */ 20 1.1 christos 21 1.1 christos #include "sysdep.h" 22 1.1 christos #include "bfd.h" 23 1.1 christos #include "libbfd.h" 24 1.1 christos #include "elf-bfd.h" 25 1.1 christos #include "elfxx-tilegx.h" 26 1.1 christos #include "elf32-tilegx.h" 27 1.1 christos 28 1.1 christos 29 1.1 christos /* Support for core dump NOTE sections. */ 30 1.1 christos 31 1.1.1.6 christos static bool 32 1.1 christos tilegx_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note) 33 1.1 christos { 34 1.1 christos int offset; 35 1.1 christos size_t size; 36 1.1 christos 37 1.1 christos if (note->descsz != TILEGX_PRSTATUS_SIZEOF) 38 1.1.1.6 christos return false; 39 1.1 christos 40 1.1 christos /* pr_cursig */ 41 1.1.1.2 christos elf_tdata (abfd)->core->signal = 42 1.1 christos bfd_get_16 (abfd, note->descdata + TILEGX_PRSTATUS_OFFSET_PR_CURSIG); 43 1.1 christos 44 1.1 christos /* pr_pid */ 45 1.1.1.2 christos elf_tdata (abfd)->core->pid = 46 1.1 christos bfd_get_32 (abfd, note->descdata + TILEGX_PRSTATUS_OFFSET_PR_PID); 47 1.1 christos 48 1.1 christos /* pr_reg */ 49 1.1 christos offset = TILEGX_PRSTATUS_OFFSET_PR_REG; 50 1.1 christos size = TILEGX_GREGSET_T_SIZE; 51 1.1 christos 52 1.1 christos /* Make a ".reg/999" section. */ 53 1.1 christos return _bfd_elfcore_make_pseudosection (abfd, ".reg", 54 1.1 christos size, note->descpos + offset); 55 1.1 christos } 56 1.1 christos 57 1.1.1.6 christos static bool 58 1.1 christos tilegx_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note) 59 1.1 christos { 60 1.1 christos if (note->descsz != TILEGX_PRPSINFO_SIZEOF) 61 1.1.1.6 christos return false; 62 1.1 christos 63 1.1.1.2 christos elf_tdata (abfd)->core->program 64 1.1 christos = _bfd_elfcore_strndup (abfd, note->descdata + TILEGX_PRPSINFO_OFFSET_PR_FNAME, 16); 65 1.1.1.2 christos elf_tdata (abfd)->core->command 66 1.1 christos = _bfd_elfcore_strndup (abfd, note->descdata + TILEGX_PRPSINFO_OFFSET_PR_PSARGS, ELF_PR_PSARGS_SIZE); 67 1.1 christos 68 1.1 christos 69 1.1 christos /* Note that for some reason, a spurious space is tacked 70 1.1 christos onto the end of the args in some (at least one anyway) 71 1.1 christos implementations, so strip it off if it exists. */ 72 1.1 christos { 73 1.1.1.2 christos char *command = elf_tdata (abfd)->core->command; 74 1.1 christos int n = strlen (command); 75 1.1 christos 76 1.1 christos if (0 < n && command[n - 1] == ' ') 77 1.1 christos command[n - 1] = '\0'; 78 1.1 christos } 79 1.1 christos 80 1.1.1.6 christos return true; 81 1.1 christos } 82 1.1 christos 83 1.1 christos 84 1.1 christos #define ELF_ARCH bfd_arch_tilegx 85 1.1 christos #define ELF_TARGET_ID TILEGX_ELF_DATA 86 1.1 christos #define ELF_MACHINE_CODE EM_TILEGX 87 1.1 christos #define ELF_MAXPAGESIZE 0x10000 88 1.1 christos #define ELF_COMMONPAGESIZE 0x10000 89 1.1 christos 90 1.1.1.4 christos #define TARGET_BIG_SYM tilegx_elf32_be_vec 91 1.1.1.4 christos #define TARGET_BIG_NAME "elf32-tilegx-be" 92 1.1.1.4 christos #define TARGET_LITTLE_SYM tilegx_elf32_le_vec 93 1.1.1.4 christos #define TARGET_LITTLE_NAME "elf32-tilegx-le" 94 1.1 christos 95 1.1 christos #define elf_backend_reloc_type_class tilegx_reloc_type_class 96 1.1 christos 97 1.1.1.4 christos #define bfd_elf32_bfd_reloc_name_lookup tilegx_reloc_name_lookup 98 1.1 christos #define bfd_elf32_bfd_link_hash_table_create tilegx_elf_link_hash_table_create 99 1.1 christos #define bfd_elf32_bfd_reloc_type_lookup tilegx_reloc_type_lookup 100 1.1 christos #define bfd_elf32_bfd_merge_private_bfd_data \ 101 1.1 christos _bfd_tilegx_elf_merge_private_bfd_data 102 1.1 christos 103 1.1 christos #define elf_backend_copy_indirect_symbol tilegx_elf_copy_indirect_symbol 104 1.1 christos #define elf_backend_create_dynamic_sections tilegx_elf_create_dynamic_sections 105 1.1 christos #define elf_backend_check_relocs tilegx_elf_check_relocs 106 1.1 christos #define elf_backend_adjust_dynamic_symbol tilegx_elf_adjust_dynamic_symbol 107 1.1 christos #define elf_backend_omit_section_dynsym tilegx_elf_omit_section_dynsym 108 1.1.1.8 christos #define elf_backend_late_size_sections tilegx_elf_late_size_sections 109 1.1 christos #define elf_backend_relocate_section tilegx_elf_relocate_section 110 1.1 christos #define elf_backend_finish_dynamic_symbol tilegx_elf_finish_dynamic_symbol 111 1.1 christos #define elf_backend_finish_dynamic_sections tilegx_elf_finish_dynamic_sections 112 1.1 christos #define elf_backend_gc_mark_hook tilegx_elf_gc_mark_hook 113 1.1 christos #define elf_backend_plt_sym_val tilegx_elf_plt_sym_val 114 1.1.1.4 christos #define elf_info_to_howto_rel NULL 115 1.1.1.4 christos #define elf_info_to_howto tilegx_info_to_howto_rela 116 1.1.1.4 christos #define elf_backend_grok_prstatus tilegx_elf_grok_prstatus 117 1.1.1.4 christos #define elf_backend_grok_psinfo tilegx_elf_grok_psinfo 118 1.1 christos #define elf_backend_additional_program_headers tilegx_additional_program_headers 119 1.1 christos 120 1.1 christos #define elf_backend_init_index_section _bfd_elf_init_1_index_section 121 1.1 christos 122 1.1 christos #define elf_backend_can_gc_sections 1 123 1.1 christos #define elf_backend_can_refcount 1 124 1.1 christos #define elf_backend_want_got_plt 1 125 1.1 christos #define elf_backend_plt_readonly 1 126 1.1 christos /* Align PLT mod 64 byte L2 line size. */ 127 1.1 christos #define elf_backend_plt_alignment 6 128 1.1 christos #define elf_backend_want_plt_sym 1 129 1.1 christos #define elf_backend_got_header_size 4 130 1.1.1.4 christos #define elf_backend_want_dynrelro 1 131 1.1 christos #define elf_backend_rela_normal 1 132 1.1 christos #define elf_backend_default_execstack 0 133 1.1 christos 134 1.1 christos #include "elf32-target.h" 135