Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6)

Side by Side Diff: bfd/elf64-ia64-vms.c

Issue 11969036: Merge GDB 7.5.1 (Closed) Base URL: http://git.chromium.org/native_client/nacl-gdb.git@master
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « bfd/elf64-hppa.c ('k') | bfd/elf64-mips.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
None
OLDNEW
1 /* IA-64 support for 64-bit ELF 1 /* IA-64 support for OpenVMS
2 Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2 Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
3 2008, 2009, 2010, 2011 Free Software Foundation, Inc. 3 2008, 2009, 2010, 2012 Free Software Foundation, Inc.
4 Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
5 4
6 This file is part of BFD, the Binary File Descriptor library. 5 This file is part of BFD, the Binary File Descriptor library.
7 6
8 This program is free software; you can redistribute it and/or modify 7 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by 8 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or 9 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version. 10 (at your option) any later version.
12 11
13 This program is distributed in the hope that it will be useful, 12 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details. 15 GNU General Public License for more details.
17 16
18 You should have received a copy of the GNU General Public License 17 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software 18 along with this program; if not, write to the Free Software
20 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, 19 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
21 MA 02110-1301, USA. */ 20 MA 02110-1301, USA. */
22 21
23 #include "sysdep.h" 22 #include "sysdep.h"
24 #include "bfd.h" 23 #include "bfd.h"
25 #include "libbfd.h" 24 #include "libbfd.h"
26 #include "elf-bfd.h" 25 #include "elf-bfd.h"
27 #include "opcode/ia64.h" 26 #include "opcode/ia64.h"
28 #include "elf/ia64.h" 27 #include "elf/ia64.h"
29 #include "objalloc.h" 28 #include "objalloc.h"
30 #include "hashtab.h" 29 #include "hashtab.h"
31 #include "bfd_stdint.h"
32 #include "elfxx-ia64.h" 30 #include "elfxx-ia64.h"
31 #include "vms.h"
32 #include "bfdver.h"
33 33
34 #define ARCH_SIZE» NN 34 /* THE RULES for all the stuff the linker creates --
35 35
36 #if ARCH_SIZE == 64 36 GOT» » Entries created in response to LTOFF or LTOFF_FPTR
37 #define»LOG_SECTION_ALIGN» 3 37 » » relocations. Dynamic relocs created for dynamic
38 #endif 38 » » symbols in an application; REL relocs for locals
39 » » in a shared library.
39 40
40 #if ARCH_SIZE == 32 41 FPTR» » The canonical function descriptor. Created for local
41 #define»LOG_SECTION_ALIGN» 2 42 » » symbols in applications. Descriptors for dynamic symbols
42 #endif 43 » » and local symbols in shared libraries are created by
44 » » ld.so. Thus there are no dynamic relocs against these
45 » » objects. The FPTR relocs for such _are_ passed through
46 » » to the dynamic relocation tables.
43 47
44 /* Only add code for vms when the vms target is enabled. This is required 48 FULL_PLT» Created for a PCREL21B relocation against a dynamic symbol.
45 because it depends on vms-lib.c for its archive format and we don't want 49 » » Requires the creation of a PLTOFF entry. This does not
46 to compile that code if it is not used. */ 50 » » require any dynamic relocations.
47 #if ARCH_SIZE == 64 && \ 51
48 (defined (HAVE_bfd_elf64_ia64_vms_vec) || defined (HAVE_all_vecs)) 52 PLTOFF» Created by PLTOFF relocations. For local symbols, this
49 #define INCLUDE_IA64_VMS 53 » » is an alternate function descriptor, and in shared libraries
50 #endif 54 » » requires two REL relocations. Note that this cannot be
55 » » transformed into an FPTR relocation, since it must be in
56 » » range of the GP. For dynamic symbols, this is a function
57 » » descriptor. */
51 58
52 typedef struct bfd_hash_entry *(*new_hash_entry_func) 59 typedef struct bfd_hash_entry *(*new_hash_entry_func)
53 (struct bfd_hash_entry *, struct bfd_hash_table *, const char *); 60 (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
54 61
55 /* In dynamically (linker-) created sections, we generally need to keep track 62 /* In dynamically (linker-) created sections, we generally need to keep track
56 of the place a symbol or expression got allocated to. This is done via hash 63 of the place a symbol or expression got allocated to. This is done via hash
57 tables that store entries of the following type. */ 64 tables that store entries of the following type. */
58 65
59 struct elfNN_ia64_dyn_sym_info 66 struct elf64_ia64_dyn_sym_info
60 { 67 {
61 /* The addend for which this entry is relevant. */ 68 /* The addend for which this entry is relevant. */
62 bfd_vma addend; 69 bfd_vma addend;
63 70
64 bfd_vma got_offset; 71 bfd_vma got_offset;
65 bfd_vma fptr_offset; 72 bfd_vma fptr_offset;
66 bfd_vma pltoff_offset; 73 bfd_vma pltoff_offset;
67 bfd_vma plt_offset; 74 bfd_vma plt_offset;
68 bfd_vma plt2_offset; 75 bfd_vma plt2_offset;
69 bfd_vma tprel_offset;
70 bfd_vma dtpmod_offset;
71 bfd_vma dtprel_offset;
72 76
73 /* The symbol table entry, if any, that this was derived from. */ 77 /* The symbol table entry, if any, that this was derived from. */
74 struct elf_link_hash_entry *h; 78 struct elf_link_hash_entry *h;
75 79
76 /* Used to count non-got, non-plt relocations for delayed sizing 80 /* Used to count non-got, non-plt relocations for delayed sizing
77 of relocation sections. */ 81 of relocation sections. */
78 struct elfNN_ia64_dyn_reloc_entry 82 struct elf64_ia64_dyn_reloc_entry
79 { 83 {
80 struct elfNN_ia64_dyn_reloc_entry *next; 84 struct elf64_ia64_dyn_reloc_entry *next;
81 asection *srel; 85 asection *srel;
82 int type; 86 int type;
83 int count; 87 int count;
84
85 /* Is this reloc against readonly section? */
86 bfd_boolean reltext;
87 } *reloc_entries; 88 } *reloc_entries;
88 89
89 /* TRUE when the section contents have been updated. */ 90 /* TRUE when the section contents have been updated. */
90 unsigned got_done : 1; 91 unsigned got_done : 1;
91 unsigned fptr_done : 1; 92 unsigned fptr_done : 1;
92 unsigned pltoff_done : 1; 93 unsigned pltoff_done : 1;
93 unsigned tprel_done : 1;
94 unsigned dtpmod_done : 1;
95 unsigned dtprel_done : 1;
96 94
97 /* TRUE for the different kinds of linker data we want created. */ 95 /* TRUE for the different kinds of linker data we want created. */
98 unsigned want_got : 1; 96 unsigned want_got : 1;
99 unsigned want_gotx : 1; 97 unsigned want_gotx : 1;
100 unsigned want_fptr : 1; 98 unsigned want_fptr : 1;
101 unsigned want_ltoff_fptr : 1; 99 unsigned want_ltoff_fptr : 1;
102 unsigned want_plt : 1; 100 unsigned want_plt : 1;» /* A MIN_PLT entry. */
103 unsigned want_plt2 : 1; 101 unsigned want_plt2 : 1;» /* A FULL_PLT. */
104 unsigned want_pltoff : 1; 102 unsigned want_pltoff : 1;
105 unsigned want_tprel : 1;
106 unsigned want_dtpmod : 1;
107 unsigned want_dtprel : 1;
108 }; 103 };
109 104
110 struct elfNN_ia64_local_hash_entry 105 struct elf64_ia64_local_hash_entry
111 { 106 {
112 int id; 107 int id;
113 unsigned int r_sym; 108 unsigned int r_sym;
114 /* The number of elements in elfNN_ia64_dyn_sym_info array. */ 109 /* The number of elements in elf64_ia64_dyn_sym_info array. */
115 unsigned int count; 110 unsigned int count;
116 /* The number of sorted elements in elfNN_ia64_dyn_sym_info array. */ 111 /* The number of sorted elements in elf64_ia64_dyn_sym_info array. */
117 unsigned int sorted_count; 112 unsigned int sorted_count;
118 /* The size of elfNN_ia64_dyn_sym_info array. */ 113 /* The size of elf64_ia64_dyn_sym_info array. */
119 unsigned int size; 114 unsigned int size;
120 /* The array of elfNN_ia64_dyn_sym_info. */ 115 /* The array of elf64_ia64_dyn_sym_info. */
121 struct elfNN_ia64_dyn_sym_info *info; 116 struct elf64_ia64_dyn_sym_info *info;
122 117
123 /* TRUE if this hash entry's addends was translated for 118 /* TRUE if this hash entry's addends was translated for
124 SHF_MERGE optimization. */ 119 SHF_MERGE optimization. */
125 unsigned sec_merge_done : 1; 120 unsigned sec_merge_done : 1;
126 }; 121 };
127 122
128 struct elfNN_ia64_link_hash_entry 123 struct elf64_ia64_link_hash_entry
129 { 124 {
130 struct elf_link_hash_entry root; 125 struct elf_link_hash_entry root;
131 /* The number of elements in elfNN_ia64_dyn_sym_info array. */ 126
127 /* Set if this symbol is defined in a shared library.
128 We can't use root.u.def.section->owner as the symbol is an absolute
129 symbol. */
130 bfd *shl;
131
132 /* The number of elements in elf64_ia64_dyn_sym_info array. */
132 unsigned int count; 133 unsigned int count;
133 /* The number of sorted elements in elfNN_ia64_dyn_sym_info array. */ 134 /* The number of sorted elements in elf64_ia64_dyn_sym_info array. */
134 unsigned int sorted_count; 135 unsigned int sorted_count;
135 /* The size of elfNN_ia64_dyn_sym_info array. */ 136 /* The size of elf64_ia64_dyn_sym_info array. */
136 unsigned int size; 137 unsigned int size;
137 /* The array of elfNN_ia64_dyn_sym_info. */ 138 /* The array of elf64_ia64_dyn_sym_info. */
138 struct elfNN_ia64_dyn_sym_info *info; 139 struct elf64_ia64_dyn_sym_info *info;
139 }; 140 };
140 141
141 struct elfNN_ia64_link_hash_table 142 struct elf64_ia64_link_hash_table
142 { 143 {
143 /* The main hash table. */ 144 /* The main hash table. */
144 struct elf_link_hash_table root; 145 struct elf_link_hash_table root;
145 146
146 asection *fptr_sec; /* Function descriptor table (or NULL). */ 147 asection *fptr_sec; /* Function descriptor table (or NULL). */
147 asection *rel_fptr_sec; /* Dynamic relocation section for same. */ 148 asection *rel_fptr_sec; /* Dynamic relocation section for same. */
148 asection *pltoff_sec; /* Private descriptors for plt (or NULL). */ 149 asection *pltoff_sec; /* Private descriptors for plt (or NULL). */
149 asection *rel_pltoff_sec;» /* Dynamic relocation section for same. */ 150 asection *fixups_sec;»» /* Fixups section. */
151 asection *transfer_sec;» /* Transfer vector section. */
152 asection *note_sec;» » /* .note section. */
150 153
151 bfd_size_type minplt_entries; /* Number of minplt entries. */
152 unsigned reltext : 1; /* Are there relocs against readonly sections? */
153 unsigned self_dtpmod_done : 1;/* Has self DTPMOD entry been finished? */
154 bfd_vma self_dtpmod_offset; /* .got offset to self DTPMOD entry. */
155 /* There are maybe R_IA64_GPREL22 relocations, including those 154 /* There are maybe R_IA64_GPREL22 relocations, including those
156 optimized from R_IA64_LTOFF22X, against non-SHF_IA_64_SHORT 155 optimized from R_IA64_LTOFF22X, against non-SHF_IA_64_SHORT
157 sections. We need to record those sections so that we can choose 156 sections. We need to record those sections so that we can choose
158 a proper GP to cover all R_IA64_GPREL22 relocations. */ 157 a proper GP to cover all R_IA64_GPREL22 relocations. */
159 asection *max_short_sec; /* Maximum short output section. */ 158 asection *max_short_sec; /* Maximum short output section. */
160 bfd_vma max_short_offset; /* Maximum short offset. */ 159 bfd_vma max_short_offset; /* Maximum short offset. */
161 asection *min_short_sec; /* Minimum short output section. */ 160 asection *min_short_sec; /* Minimum short output section. */
162 bfd_vma min_short_offset; /* Minimum short offset. */ 161 bfd_vma min_short_offset; /* Minimum short offset. */
163 162
164 htab_t loc_hash_table; 163 htab_t loc_hash_table;

error: old chunk mismatch

OLDNEW
« no previous file with comments | « bfd/elf64-hppa.c ('k') | bfd/elf64-mips.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698