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"
19 long get_syms(bfd
*abfd
, asymbol
***syms_ptr
)
21 long storage_needed
= bfd_get_symtab_upper_bound(abfd
);
22 if (storage_needed
== 0)
24 assert(storage_needed
>= 0);
26 *syms_ptr
= (asymbol
**)malloc(storage_needed
);
27 long num_syms
= bfd_canonicalize_symtab(abfd
, *syms_ptr
);
28 assert(num_syms
>= 0);
33 struct supersect
*fetch_supersect(bfd
*abfd
, asection
*sect
, asymbol
**sympp
)
35 static struct supersect
*supersects
= NULL
;
38 for (ss
= supersects
; ss
!= NULL
; ss
= ss
->next
) {
39 if (strcmp(sect
->name
, ss
->name
) == 0 && ss
->parent
== abfd
) {
44 struct supersect
*new = malloc(sizeof(*new));
46 new->name
= malloc(strlen(sect
->name
) + 1);
47 strcpy(new->name
, sect
->name
);
48 new->next
= supersects
;
51 new->contents_size
= bfd_get_section_size(sect
);
52 new->contents
= (void *)malloc(align(new->contents_size
, 4));
53 assert(bfd_get_section_contents
54 (abfd
, sect
, new->contents
, 0, new->contents_size
));
56 int relsize
= bfd_get_reloc_upper_bound(abfd
, sect
);
57 new->relocs
= (void *)malloc(relsize
);
59 bfd_canonicalize_reloc(abfd
, sect
, new->relocs
, sympp
);
60 assert(new->num_relocs
>= 0);