1 /* Copyright (C) 2008 Jeffrey Brian Arnold <jbarnold@mit.edu>
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License, version 2.
6 * This program is distributed in the hope that it will be useful,
7 * but WITHOUT ANY WARRANTY; without even the implied warranty of
8 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9 * GNU General Public License for more details.
11 * You should have received a copy of the GNU General Public License
12 * along with this program; if not, write to the Free Software
13 * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
17 #include "objcommon.h"
20 get_syms(bfd
* abfd
, asymbol
*** syms_ptr
)
22 long storage_needed
= bfd_get_symtab_upper_bound(abfd
);
23 if (storage_needed
== 0)
25 assert(storage_needed
>= 0);
27 *syms_ptr
= (asymbol
**) malloc(storage_needed
);
28 long num_syms
= bfd_canonicalize_symtab(abfd
, *syms_ptr
);
29 assert(num_syms
>= 0);
35 fetch_supersect(bfd
* abfd
, asection
* sect
, asymbol
** sympp
)
37 static struct supersect
*supersects
= NULL
;
40 for (ss
= supersects
; ss
!= NULL
; ss
= ss
->next
) {
41 if (strcmp(sect
->name
, ss
->name
) == 0 && ss
->parent
== abfd
) {
46 struct supersect
*new = malloc(sizeof (*new));
48 new->name
= malloc(strlen(sect
->name
) + 1);
49 strcpy(new->name
, sect
->name
);
50 new->next
= supersects
;
53 new->contents_size
= bfd_get_section_size(sect
);
54 new->contents
= (void *) malloc(align(new->contents_size
, 4));
55 assert(bfd_get_section_contents
56 (abfd
, sect
, new->contents
, 0, new->contents_size
));
58 int relsize
= bfd_get_reloc_upper_bound(abfd
, sect
);
59 new->relocs
= (void *) malloc(relsize
);
61 bfd_canonicalize_reloc(abfd
, sect
, new->relocs
, sympp
);
62 assert(new->num_relocs
>= 0);