static asection * bfd_section_init (bfd *abfd, asection *newsect) { static int section_id = 0x10; /* id 0 to 3 used by STD_SECTION. */ newsect->id = section_id; newsect->index = abfd->section_count; newsect->owner = abfd; /* Create a symbol whose only job is to point to this section. This is useful for things like relocs which are relative to the base of a section. */ newsect->symbol = bfd_make_empty_symbol (abfd); if (newsect->symbol == NULL) return NULL; newsect->symbol->name = newsect->name; newsect->symbol->value = 0; newsect->symbol->section = newsect; newsect->symbol->flags = BSF_SECTION_SYM; newsect->symbol_ptr_ptr = &newsect->symbol; if (! BFD_SEND (abfd, _new_section_hook, (abfd, newsect))) return NULL; section_id++; abfd->section_count++; *abfd->section_tail = newsect; abfd->section_tail = &newsect->next; return newsect; }
int bfd_core_file_failing_signal (bfd *abfd) { if (abfd->format != bfd_core) { bfd_set_error (bfd_error_invalid_operation); return 0; } return BFD_SEND (abfd, _core_file_failing_signal, (abfd)); }
const char * bfd_core_file_failing_command (bfd *abfd) { if (abfd->format != bfd_core) { bfd_set_error (bfd_error_invalid_operation); return NULL; } return BFD_SEND (abfd, _core_file_failing_command, (abfd)); }
long bfd_get_reloc_upper_bound (bfd *abfd, sec_ptr asect) { if (abfd->format != bfd_object) { bfd_set_error (bfd_error_invalid_operation); return -1; } return BFD_SEND (abfd, _get_reloc_upper_bound, (abfd, asect)); }
bfd_boolean core_file_matches_executable_p (bfd *core_bfd, bfd *exec_bfd) { if (core_bfd->format != bfd_core || exec_bfd->format != bfd_object) { bfd_set_error (bfd_error_wrong_format); return FALSE; } return BFD_SEND (core_bfd, _core_file_matches_executable_p, (core_bfd, exec_bfd)); }
/* FUNCTION bfd_canonicalize_reloc SYNOPSIS long bfd_canonicalize_reloc (bfd *abfd, asection *sec, arelent **loc, asymbol **syms); DESCRIPTION Call the back end associated with the open BFD @var{abfd} and translate the external form of the relocation information attached to @var{sec} into the internal canonical form. Place the table into memory at @var{loc}, which has been preallocated, usually by a call to <<bfd_get_reloc_upper_bound>>. Returns the number of relocs, or -1 on error. The @var{syms} table is also needed for horrible internal magic reasons. */ long bfd_canonicalize_reloc (bfd *abfd, sec_ptr asect, arelent **location, asymbol **symbols) { if (abfd->format != bfd_object) { bfd_set_error (bfd_error_invalid_operation); return -1; } return BFD_SEND (abfd, _bfd_canonicalize_reloc, (abfd, asect, location, symbols)); }
static asection * bfd_section_init (bfd *abfd, asection *newsect) { static int section_id = 0x10; /* id 0 to 3 used by STD_SECTION. */ newsect->id = section_id; newsect->index = abfd->section_count; newsect->owner = abfd; if (! BFD_SEND (abfd, _new_section_hook, (abfd, newsect))) return NULL; section_id++; abfd->section_count++; bfd_section_list_append (abfd, newsect); return newsect; }
asection * bfd_make_section_old_way (bfd *abfd, const char *name) { asection *newsect; if (abfd->output_has_begun) { bfd_set_error (bfd_error_invalid_operation); return NULL; } if (strcmp (name, BFD_ABS_SECTION_NAME) == 0) newsect = bfd_abs_section_ptr; else if (strcmp (name, BFD_COM_SECTION_NAME) == 0) newsect = bfd_com_section_ptr; else if (strcmp (name, BFD_UND_SECTION_NAME) == 0) newsect = bfd_und_section_ptr; else if (strcmp (name, BFD_IND_SECTION_NAME) == 0) newsect = bfd_ind_section_ptr; else { struct section_hash_entry *sh; sh = section_hash_lookup (&abfd->section_htab, name, TRUE, FALSE); if (sh == NULL) return NULL; newsect = &sh->section; if (newsect->name != NULL) { /* Section already exists. */ return newsect; } newsect->name = name; return bfd_section_init (abfd, newsect); } /* Call new_section_hook when "creating" the standard abs, com, und and ind sections to tack on format specific section data. Also, create a proper section symbol. */ if (! BFD_SEND (abfd, _new_section_hook, (abfd, newsect))) return NULL; return newsect; }