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

Side by Side Diff: gdb/objfiles.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 | « gdb/objfiles.h ('k') | gdb/observer.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 /* GDB routines for manipulating objfiles. 1 /* GDB routines for manipulating objfiles.
2 2
3 Copyright (C) 1992-2004, 2007-2012 Free Software Foundation, Inc. 3 Copyright (C) 1992-2004, 2007-2012 Free Software Foundation, Inc.
4 4
5 Contributed by Cygnus Support, using pieces from other GDB modules. 5 Contributed by Cygnus Support, using pieces from other GDB modules.
6 6
7 This file is part of GDB. 7 This file is part of GDB.
8 8
9 This program is free software; you can redistribute it and/or modify 9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by 10 it under the terms of the GNU General Public License as published by
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 info = program_space_data (pspace, objfiles_pspace_data); 98 info = program_space_data (pspace, objfiles_pspace_data);
99 if (info == NULL) 99 if (info == NULL)
100 { 100 {
101 info = XZALLOC (struct objfile_pspace_info); 101 info = XZALLOC (struct objfile_pspace_info);
102 set_program_space_data (pspace, objfiles_pspace_data, info); 102 set_program_space_data (pspace, objfiles_pspace_data, info);
103 } 103 }
104 104
105 return info; 105 return info;
106 } 106 }
107 107
108 /* Records whether any objfiles appeared or disappeared since we last updated
109 address to obj section map. */
110
111 /* Locate all mappable sections of a BFD file.
112 objfile_p_char is a char * to get it through
113 bfd_map_over_sections; we cast it back to its proper type. */
114
115 /* Called via bfd_map_over_sections to build up the section table that 108 /* Called via bfd_map_over_sections to build up the section table that
116 the objfile references. The objfile contains pointers to the start 109 the objfile references. The objfile contains pointers to the start
117 of the table (objfile->sections) and to the first location after 110 of the table (objfile->sections) and to the first location after
118 the end of the table (objfile->sections_end). */ 111 the end of the table (objfile->sections_end). */
119 112
120 static void 113 static void
121 add_to_objfile_sections (struct bfd *abfd, struct bfd_section *asect, 114 add_to_objfile_sections (struct bfd *abfd, struct bfd_section *asect,
122 » » » void *objfile_p_char) 115 » » » void *objfilep)
123 { 116 {
124 struct objfile *objfile = (struct objfile *) objfile_p_char; 117 struct objfile *objfile = (struct objfile *) objfilep;
125 struct obj_section section; 118 struct obj_section section;
126 flagword aflag; 119 flagword aflag;
127 120
128 aflag = bfd_get_section_flags (abfd, asect); 121 aflag = bfd_get_section_flags (abfd, asect);
129
130 if (!(aflag & SEC_ALLOC)) 122 if (!(aflag & SEC_ALLOC))
131 return; 123 return;
124 if (bfd_section_size (abfd, asect) == 0)
125 return;
132 126
133 if (0 == bfd_section_size (abfd, asect))
134 return;
135 section.objfile = objfile; 127 section.objfile = objfile;
136 section.the_bfd_section = asect; 128 section.the_bfd_section = asect;
137 section.ovly_mapped = 0; 129 section.ovly_mapped = 0;
138 obstack_grow (&objfile->objfile_obstack, 130 obstack_grow (&objfile->objfile_obstack,
139 (char *) &section, sizeof (section)); 131 (char *) &section, sizeof (section));
140 objfile->sections_end 132 objfile->sections_end
141 = (struct obj_section *) (((size_t) objfile->sections_end) + 1); 133 = (struct obj_section *) (((size_t) objfile->sections_end) + 1);
142 } 134 }
143 135
144 /* Builds a section table for OBJFILE. 136 /* Builds a section table for OBJFILE.
145 Returns 0 if OK, 1 on error (in which case bfd_error contains the
146 error).
147 137
148 Note that while we are building the table, which goes into the 138 Note that while we are building the table, which goes into the
149 psymbol obstack, we hijack the sections_end pointer to instead hold 139 objfile obstack, we hijack the sections_end pointer to instead hold
150 a count of the number of sections. When bfd_map_over_sections 140 a count of the number of sections. When bfd_map_over_sections
151 returns, this count is used to compute the pointer to the end of 141 returns, this count is used to compute the pointer to the end of
152 the sections table, which then overwrites the count. 142 the sections table, which then overwrites the count.
153 143
154 Also note that the OFFSET and OVLY_MAPPED in each table entry 144 Also note that the OFFSET and OVLY_MAPPED in each table entry
155 are initialized to zero. 145 are initialized to zero.
156 146
157 Also note that if anything else writes to the psymbol obstack while 147 Also note that if anything else writes to the objfile obstack while
158 we are building the table, we're pretty much hosed. */ 148 we are building the table, we're pretty much hosed. */
159 149
160 int 150 void
161 build_objfile_section_table (struct objfile *objfile) 151 build_objfile_section_table (struct objfile *objfile)
162 { 152 {
163 objfile->sections_end = 0; 153 objfile->sections_end = 0;
164 bfd_map_over_sections (objfile->obfd, 154 bfd_map_over_sections (objfile->obfd,
165 add_to_objfile_sections, (void *) objfile); 155 add_to_objfile_sections, (void *) objfile);
166 objfile->sections = obstack_finish (&objfile->objfile_obstack); 156 objfile->sections = obstack_finish (&objfile->objfile_obstack);
167 objfile->sections_end = objfile->sections + (size_t) objfile->sections_end; 157 objfile->sections_end = objfile->sections + (size_t) objfile->sections_end;
168 return (0);
169 } 158 }
170 159
171 /* Given a pointer to an initialized bfd (ABFD) and some flag bits 160 /* Given a pointer to an initialized bfd (ABFD) and some flag bits
172 allocate a new objfile struct, fill it in as best we can, link it 161 allocate a new objfile struct, fill it in as best we can, link it
173 into the list of all known objfiles, and return a pointer to the 162 into the list of all known objfiles, and return a pointer to the
174 new objfile struct. 163 new objfile struct.
175 164
176 The FLAGS word contains various bits (OBJF_*) that can be taken as 165 The FLAGS word contains various bits (OBJF_*) that can be taken as
177 requests for specific operations. Other bits like OBJF_SHARED are 166 requests for specific operations. Other bits like OBJF_SHARED are
178 simply copied through to the new objfile flags member. */ 167 simply copied through to the new objfile flags member. */
(...skipping 30 matching lines...) Expand all
209 objfile->obfd = gdb_bfd_ref (abfd); 198 objfile->obfd = gdb_bfd_ref (abfd);
210 if (abfd != NULL) 199 if (abfd != NULL)
211 { 200 {
212 /* Look up the gdbarch associated with the BFD. */ 201 /* Look up the gdbarch associated with the BFD. */
213 objfile->gdbarch = gdbarch_from_bfd (abfd); 202 objfile->gdbarch = gdbarch_from_bfd (abfd);
214 203
215 objfile->name = xstrdup (bfd_get_filename (abfd)); 204 objfile->name = xstrdup (bfd_get_filename (abfd));
216 objfile->mtime = bfd_get_mtime (abfd); 205 objfile->mtime = bfd_get_mtime (abfd);
217 206
218 /* Build section table. */ 207 /* Build section table. */
219 208 build_objfile_section_table (objfile);
220 if (build_objfile_section_table (objfile))
221 » {
222 » error (_("Can't find the file sections in `%s': %s"),
223 » » objfile->name, bfd_errmsg (bfd_get_error ()));
224 » }
225 } 209 }
226 else 210 else
227 { 211 {
228 objfile->name = xstrdup ("<<anonymous objfile>>"); 212 objfile->name = xstrdup ("<<anonymous objfile>>");
229 } 213 }
230 214
231 objfile->pspace = current_program_space; 215 objfile->pspace = current_program_space;
232 216
233 /* Initialize the section indexes for this objfile, so that we can 217 /* Initialize the section indexes for this objfile, so that we can
234 later detect if they are used w/o being properly assigned to. */ 218 later detect if they are used w/o being properly assigned to. */
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
335 entry_point_address (void) 319 entry_point_address (void)
336 { 320 {
337 CORE_ADDR retval; 321 CORE_ADDR retval;
338 322
339 if (!entry_point_address_query (&retval)) 323 if (!entry_point_address_query (&retval))
340 error (_("Entry point address is not known.")); 324 error (_("Entry point address is not known."));
341 325
342 return retval; 326 return retval;
343 } 327 }
344 328
345 /* Create the terminating entry of OBJFILE's minimal symbol table.
346 If OBJFILE->msymbols is zero, allocate a single entry from
347 OBJFILE->objfile_obstack; otherwise, just initialize
348 OBJFILE->msymbols[OBJFILE->minimal_symbol_count]. */
349 void
350 terminate_minimal_symbol_table (struct objfile *objfile)
351 {
352 if (! objfile->msymbols)
353 objfile->msymbols = ((struct minimal_symbol *)
354 obstack_alloc (&objfile->objfile_obstack,
355 sizeof (objfile->msymbols[0])));
356
357 {
358 struct minimal_symbol *m
359 = &objfile->msymbols[objfile->minimal_symbol_count];
360
361 memset (m, 0, sizeof (*m));
362 /* Don't rely on these enumeration values being 0's. */
363 MSYMBOL_TYPE (m) = mst_unknown;
364 SYMBOL_SET_LANGUAGE (m, language_unknown);
365 }
366 }
367
368 /* Iterator on PARENT and every separate debug objfile of PARENT. 329 /* Iterator on PARENT and every separate debug objfile of PARENT.
369 The usage pattern is: 330 The usage pattern is:
370 for (objfile = parent; 331 for (objfile = parent;
371 objfile; 332 objfile;
372 objfile = objfile_separate_debug_iterate (parent, objfile)) 333 objfile = objfile_separate_debug_iterate (parent, objfile))
373 ... 334 ...
374 */ 335 */
375 336
376 struct objfile * 337 struct objfile *
377 objfile_separate_debug_iterate (const struct objfile *parent, 338 objfile_separate_debug_iterate (const struct objfile *parent,
(...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after
759 if (BLOCKVECTOR_MAP (bv)) 720 if (BLOCKVECTOR_MAP (bv))
760 addrmap_relocate (BLOCKVECTOR_MAP (bv), 721 addrmap_relocate (BLOCKVECTOR_MAP (bv),
761 ANOFFSET (delta, s->block_line_section)); 722 ANOFFSET (delta, s->block_line_section));
762 723
763 for (i = 0; i < BLOCKVECTOR_NBLOCKS (bv); ++i) 724 for (i = 0; i < BLOCKVECTOR_NBLOCKS (bv); ++i)
764 { 725 {
765 struct block *b; 726 struct block *b;
766 struct symbol *sym; 727 struct symbol *sym;
767 struct dict_iterator iter; 728 struct dict_iterator iter;
768 729

error: old chunk mismatch

OLDNEW
« no previous file with comments | « gdb/objfiles.h ('k') | gdb/observer.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698