static void tlink_init (void) { const char *p; symbol_table = htab_create (500, hash_string_hash, hash_string_eq, NULL); file_table = htab_create (500, hash_string_hash, hash_string_eq, NULL); demangled_table = htab_create (500, hash_string_hash, hash_string_eq, NULL); obstack_begin (&symbol_stack_obstack, 0); obstack_begin (&file_stack_obstack, 0); p = getenv ("TLINK_VERBOSE"); if (p) tlink_verbose = atoi (p); else { tlink_verbose = 1; if (vflag) tlink_verbose = 2; if (debug) tlink_verbose = 3; } getcwd (initial_cwd, sizeof (initial_cwd)); }
struct hash_control * hash_new (void) { unsigned long size; unsigned long alloc; struct hash_control *ret; size = get_gas_hash_table_size (); ret = xmalloc (sizeof *ret); obstack_begin (&ret->memory, chunksize); alloc = size * sizeof (struct hash_entry *); ret->table = obstack_alloc (&ret->memory, alloc); memset (ret->table, 0, alloc); ret->size = size; #ifdef HASH_STATISTICS ret->lookups = 0; ret->hash_compares = 0; ret->string_compares = 0; ret->insertions = 0; ret->replacements = 0; ret->deletions = 0; #endif return ret; }
struct hash_control * hash_new () { unsigned int size; struct hash_control *ret; unsigned int alloc; size = DEFAULT_SIZE; ret = (struct hash_control *) xmalloc (sizeof *ret); obstack_begin (&ret->memory, chunksize); alloc = size * sizeof (struct hash_entry *); ret->table = (struct hash_entry **) obstack_alloc (&ret->memory, alloc); memset (ret->table, 0, alloc); ret->size = size; #ifdef HASH_STATISTICS ret->lookups = 0; ret->hash_compares = 0; ret->string_compares = 0; ret->insertions = 0; ret->replacements = 0; ret->deletions = 0; #endif return ret; }
bfd *new_bfd() { bfd *nbfd; nbfd = (bfd *)zalloc (sizeof (bfd)); if (!nbfd) return 0; obstack_begin((PTR)&nbfd->memory, 128); nbfd->direction = no_direction; nbfd->iostream = NULL; nbfd->where = 0; nbfd->sections = (asection *)NULL; nbfd->format = bfd_unknown; nbfd->my_archive = (bfd *)NULL; nbfd->origin = 0; nbfd->opened_once = false; nbfd->output_has_begun = false; nbfd->section_count = 0; nbfd->usrdata = (PTR)NULL; nbfd->sections = (asection *)NULL; nbfd->cacheable = false; nbfd->flags = NO_FLAGS; nbfd->mtime_set = 0; return nbfd; }
void subsegs_begin () { /* Check table(s) seg_name[], seg_N_TYPE[] is in correct order */ #if !defined (MANY_SEGMENTS) && !defined (BFD_ASSEMBLER) know (SEG_ABSOLUTE == 0); know (SEG_TEXT == 1); know (SEG_DATA == 2); know (SEG_BSS == 3); know (SEG_UNKNOWN == 4); know (SEG_GOOF == 5); know (SEG_EXPR == 6); know (SEG_DEBUG == 7); know (SEG_NTV == 8); know (SEG_PTV == 9); know (SEG_REGISTER == 10); know (SEG_MAXIMUM_ORDINAL == SEG_REGISTER); #endif obstack_begin (&frchains, chunksize); #if __GNUC__ >= 2 obstack_alignment_mask (&frchains) = __alignof__ (frchainS) - 1; #endif frchain_root = NULL; frchain_now = NULL; /* Warn new_subseg() that we are booting. */ frag_now = &dummy_frag; #ifndef BFD_ASSEMBLER now_subseg = 42; /* Lie for 1st call to subseg_new. */ #ifdef MANY_SEGMENTS { int i; for (i = SEG_E0; i < SEG_UNKNOWN; i++) { subseg_set (i, 0); segment_info[i].frchainP = frchain_now; } } #else subseg_set (SEG_DATA, 0); /* .data 0 */ data0_frchainP = frchain_now; subseg_set (SEG_BSS, 0); bss0_frchainP = frchain_now; #endif /* ! MANY_SEGMENTS */ #endif /* ! BFD_ASSEMBLER */ absolute_frchain.frch_seg = absolute_section; absolute_frchain.frch_subseg = 0; #ifdef BFD_ASSEMBLER absolute_frchain.fix_root = absolute_frchain.fix_tail = 0; #endif absolute_frchain.frch_frag_now = &zero_address_frag; absolute_frchain.frch_root = absolute_frchain.frch_last = &zero_address_frag; }
static void subseg_set_rest (segT seg, subsegT subseg) { frchainS *frcP; /* crawl frchain chain */ frchainS **lastPP; /* address of last pointer */ frchainS *newP; /* address of new frchain */ segment_info_type *seginfo; mri_common_symbol = NULL; if (frag_now && frchain_now) frchain_now->frch_frag_now = frag_now; gas_assert (frchain_now == 0 || frchain_now->frch_last == frag_now); subseg_change (seg, (int) subseg); seginfo = seg_info (seg); /* Attempt to find or make a frchain for that subsection. We keep the list sorted by subsection number. */ for (frcP = *(lastPP = &seginfo->frchainP); frcP != NULL; frcP = *(lastPP = &frcP->frch_next)) if (frcP->frch_subseg >= subseg) break; if (frcP == NULL || frcP->frch_subseg != subseg) { /* This should be the only code that creates a frchainS. */ newP = (frchainS *) obstack_alloc (&frchains, sizeof (frchainS)); newP->frch_subseg = subseg; newP->fix_root = NULL; newP->fix_tail = NULL; obstack_begin (&newP->frch_obstack, chunksize); #if __GNUC__ >= 2 obstack_alignment_mask (&newP->frch_obstack) = __alignof__ (fragS) - 1; #endif newP->frch_frag_now = frag_alloc (&newP->frch_obstack); newP->frch_frag_now->fr_type = rs_fill; newP->frch_cfi_data = NULL; newP->frch_root = newP->frch_last = newP->frch_frag_now; *lastPP = newP; newP->frch_next = frcP; frcP = newP; } frchain_now = frcP; frag_now = frcP->frch_frag_now; gas_assert (frchain_now->frch_last == frag_now); }
void subsegs_begin (void) { obstack_begin (&frchains, chunksize); #if __GNUC__ >= 2 obstack_alignment_mask (&frchains) = __alignof__ (frchainS) - 1; #endif frchain_now = NULL; /* Warn new_subseg() that we are booting. */ frag_now = &dummy_frag; }
bfd * _bfd_new_bfd () { bfd *nbfd; nbfd = (bfd *)bfd_zmalloc (sizeof (bfd)); if (!nbfd) { bfd_set_error (bfd_error_no_memory); return 0; } bfd_check_init(); if (!obstack_begin(&nbfd->memory, 128)) { bfd_set_error (bfd_error_no_memory); return 0; } nbfd->arch_info = &bfd_default_arch_struct; nbfd->direction = no_direction; nbfd->iostream = NULL; nbfd->where = 0; nbfd->sections = (asection *)NULL; nbfd->format = bfd_unknown; nbfd->my_archive = (bfd *)NULL; nbfd->origin = 0; nbfd->opened_once = false; nbfd->output_has_begun = false; nbfd->section_count = 0; nbfd->usrdata = (PTR)NULL; nbfd->cacheable = false; nbfd->flags = NO_FLAGS; nbfd->mtime_set = false; return nbfd; }