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

Side by Side Diff: bfd/coff-ppc.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/coff-or32.c ('k') | bfd/coff-rs6000.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 /* BFD back-end for PowerPC Microsoft Portable Executable files. 1 /* BFD back-end for PowerPC Microsoft Portable Executable files.
2 Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2 Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
3 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 3 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
4 Free Software Foundation, Inc. 4 2012 Free Software Foundation, Inc.
5 5
6 Original version pieced together by Kim Knuttila (krk@cygnus.com) 6 Original version pieced together by Kim Knuttila (krk@cygnus.com)
7 7
8 There is nothing new under the sun. This file draws a lot on other 8 There is nothing new under the sun. This file draws a lot on other
9 coff files, in particular, those for the rs/6000, alpha, mips, and 9 coff files, in particular, those for the rs/6000, alpha, mips, and
10 intel backends, and the PE work for the arm. 10 intel backends, and the PE work for the arm.
11 11
12 This file is part of BFD, the Binary File Descriptor library. 12 This file is part of BFD, the Binary File Descriptor library.
13 13
14 This program is free software; you can redistribute it and/or modify 14 This program is free software; you can redistribute it and/or modify
(...skipping 30 matching lines...) Expand all
45 #ifdef BADMAG 45 #ifdef BADMAG
46 #undef BADMAG 46 #undef BADMAG
47 #endif 47 #endif
48 48
49 #define BADMAG(x) PPCBADMAG(x) 49 #define BADMAG(x) PPCBADMAG(x)
50 50
51 #include "libcoff.h" 51 #include "libcoff.h"
52 52
53 /* This file is compiled more than once, but we only compile the 53 /* This file is compiled more than once, but we only compile the
54 final_link routine once. */ 54 final_link routine once. */
55 extern bfd_boolean ppc_bfd_coff_final_link 55 extern bfd_boolean ppc_bfd_coff_final_link (bfd *, struct bfd_link_info *);
56 PARAMS ((bfd *, struct bfd_link_info *)); 56 extern void dump_toc (void *);
57 extern void dump_toc PARAMS ((PTR));
58 57
59 /* The toc is a set of bfd_vma fields. We use the fact that valid 58 /* The toc is a set of bfd_vma fields. We use the fact that valid
60 addresses are even (i.e. the bit representing "1" is off) to allow 59 addresses are even (i.e. the bit representing "1" is off) to allow
61 us to encode a little extra information in the field 60 us to encode a little extra information in the field
62 - Unallocated addresses are initialized to 1. 61 - Unallocated addresses are initialized to 1.
63 - Allocated addresses are even numbers. 62 - Allocated addresses are even numbers.
64 The first time we actually write a reference to the toc in the bfd, 63 The first time we actually write a reference to the toc in the bfd,
65 we want to record that fact in a fixup file (if it is asked for), so 64 we want to record that fact in a fixup file (if it is asked for), so
66 we keep track of whether or not an address has been written by marking 65 we keep track of whether or not an address has been written by marking
67 the low order bit with a "1" upon writing. */ 66 the low order bit with a "1" upon writing. */
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
116 HASH_CHECK_DCL 115 HASH_CHECK_DCL
117 }; 116 };
118 117
119 /* PE linker hash table. */ 118 /* PE linker hash table. */
120 119
121 struct ppc_coff_link_hash_table 120 struct ppc_coff_link_hash_table
122 { 121 {
123 struct coff_link_hash_table root; /* First entry, as required. */ 122 struct coff_link_hash_table root; /* First entry, as required. */
124 }; 123 };
125 124
126 static struct bfd_hash_entry *ppc_coff_link_hash_newfunc
127 PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *,
128 const char *));
129 static struct bfd_link_hash_table *ppc_coff_link_hash_table_create
130 PARAMS ((bfd *));
131 static bfd_boolean coff_ppc_relocate_section
132 PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
133 struct internal_reloc *, struct internal_syment *, asection **));
134 static reloc_howto_type *coff_ppc_rtype_to_howto
135 PARAMS ((bfd *, asection *, struct internal_reloc *,
136 struct coff_link_hash_entry *, struct internal_syment *,
137 bfd_vma *));
138
139 /* Routine to create an entry in the link hash table. */ 125 /* Routine to create an entry in the link hash table. */
140 126
141 static struct bfd_hash_entry * 127 static struct bfd_hash_entry *
142 ppc_coff_link_hash_newfunc (entry, table, string) 128 ppc_coff_link_hash_newfunc (struct bfd_hash_entry * entry,
143 struct bfd_hash_entry *entry; 129 » » » struct bfd_hash_table * table,
144 struct bfd_hash_table *table; 130 » » » const char * string)
145 const char *string;
146 { 131 {
147 struct ppc_coff_link_hash_entry *ret = 132 struct ppc_coff_link_hash_entry *ret =
148 (struct ppc_coff_link_hash_entry *) entry; 133 (struct ppc_coff_link_hash_entry *) entry;
149 134
150 /* Allocate the structure if it has not already been allocated by a 135 /* Allocate the structure if it has not already been allocated by a
151 subclass. */ 136 subclass. */
152 if (ret == (struct ppc_coff_link_hash_entry *) NULL) 137 if (ret == (struct ppc_coff_link_hash_entry *) NULL)
153 ret = (struct ppc_coff_link_hash_entry *) 138 ret = (struct ppc_coff_link_hash_entry *)
154 bfd_hash_allocate (table, 139 bfd_hash_allocate (table,
155 sizeof (struct ppc_coff_link_hash_entry)); 140 sizeof (struct ppc_coff_link_hash_entry));
(...skipping 17 matching lines...) Expand all
173 } 158 }
174 159
175 return (struct bfd_hash_entry *) ret; 160 return (struct bfd_hash_entry *) ret;
176 } 161 }
177 162
178 /* Initialize a PE linker hash table. */ 163 /* Initialize a PE linker hash table. */
179 164
180 static bfd_boolean 165 static bfd_boolean
181 ppc_coff_link_hash_table_init (struct ppc_coff_link_hash_table *table, 166 ppc_coff_link_hash_table_init (struct ppc_coff_link_hash_table *table,
182 bfd *abfd, 167 bfd *abfd,
183 » » » struct bfd_hash_entry *(*newfunc) (struct bfd_has h_entry *, 168 » » » struct bfd_hash_entry *(*newfunc)
184 » » » » » » » » struct bfd_has h_table *, 169 » » » (struct bfd_hash_entry *,
185 » » » » » » » » const char *), 170 » » » » struct bfd_hash_table *,
171 » » » » const char *),
186 unsigned int entsize) 172 unsigned int entsize)
187 { 173 {
188 return _bfd_coff_link_hash_table_init (&table->root, abfd, newfunc, entsize); 174 return _bfd_coff_link_hash_table_init (&table->root, abfd, newfunc, entsize);
189 } 175 }
190 176
191 /* Create a PE linker hash table. */ 177 /* Create a PE linker hash table. */
192 178
193 static struct bfd_link_hash_table * 179 static struct bfd_link_hash_table *
194 ppc_coff_link_hash_table_create (abfd) 180 ppc_coff_link_hash_table_create (bfd *abfd)
195 bfd *abfd;
196 { 181 {
197 struct ppc_coff_link_hash_table *ret; 182 struct ppc_coff_link_hash_table *ret;
198 bfd_size_type amt = sizeof (struct ppc_coff_link_hash_table); 183 bfd_size_type amt = sizeof (struct ppc_coff_link_hash_table);
199 184
200 ret = (struct ppc_coff_link_hash_table *) bfd_malloc (amt); 185 ret = (struct ppc_coff_link_hash_table *) bfd_malloc (amt);
201 if (ret == NULL) 186 if (ret == NULL)
202 return NULL; 187 return NULL;
203 if (!ppc_coff_link_hash_table_init (ret, abfd, 188 if (!ppc_coff_link_hash_table_init (ret, abfd,
204 ppc_coff_link_hash_newfunc, 189 ppc_coff_link_hash_newfunc,
205 sizeof (struct ppc_coff_link_hash_entry))) 190 sizeof (struct ppc_coff_link_hash_entry)))
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 #define IMAGE_REL_PPC_TOCDEFN 0x0800 289 #define IMAGE_REL_PPC_TOCDEFN 0x0800
305 290
306 /* Masks to isolate above values in IMAGE_RELOCATION.Type. */ 291 /* Masks to isolate above values in IMAGE_RELOCATION.Type. */
307 #define IMAGE_REL_PPC_TYPEMASK 0x00FF 292 #define IMAGE_REL_PPC_TYPEMASK 0x00FF
308 #define IMAGE_REL_PPC_FLAGMASK 0x0F00 293 #define IMAGE_REL_PPC_FLAGMASK 0x0F00
309 294
310 #define EXTRACT_TYPE(x) ((x) & IMAGE_REL_PPC_TYPEMASK) 295 #define EXTRACT_TYPE(x) ((x) & IMAGE_REL_PPC_TYPEMASK)
311 #define EXTRACT_FLAGS(x) ((x) & IMAGE_REL_PPC_FLAGMASK) 296 #define EXTRACT_FLAGS(x) ((x) & IMAGE_REL_PPC_FLAGMASK)
312 #define EXTRACT_JUNK(x) \ 297 #define EXTRACT_JUNK(x) \
313 ((x) & ~(IMAGE_REL_PPC_TYPEMASK | IMAGE_REL_PPC_FLAGMASK)) 298 ((x) & ~(IMAGE_REL_PPC_TYPEMASK | IMAGE_REL_PPC_FLAGMASK))

error: old chunk mismatch

OLDNEW
« no previous file with comments | « bfd/coff-or32.c ('k') | bfd/coff-rs6000.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698