segT subseg_get (const char *segname, int force_new) { segT secptr; segment_info_type *seginfo; const char *now_seg_name = (now_seg ? bfd_get_section_name (stdoutput, now_seg) : 0); if (!force_new && now_seg_name && (now_seg_name == segname || !strcmp (now_seg_name, segname))) return now_seg; if (!force_new) secptr = bfd_make_section_old_way (stdoutput, segname); else secptr = bfd_make_section_anyway (stdoutput, segname); seginfo = seg_info (secptr); if (! seginfo) { secptr->output_section = secptr; seginfo = XCNEW (segment_info_type); seginfo->bfd_section = secptr; bfd_set_section_userdata (stdoutput, secptr, seginfo); } return secptr; }
/* * subseg_change() * * Change the subsegment we are in, BUT DO NOT MAKE A NEW FRAG for the * subsegment. If we are already in the correct subsegment, change nothing. * This is used eg as a worker for subseg_set [which does make a new frag_now] * and for changing segments after we have read the source. We construct eg * fixSs even after the source file is read, so we do have to keep the * segment context correct. */ void subseg_change (segT seg, int subseg) { segment_info_type *seginfo = seg_info (seg); now_seg = seg; now_subseg = subseg; if (! seginfo) { seginfo = XCNEW (segment_info_type); seginfo->bfd_section = seg; bfd_set_section_userdata (stdoutput, seg, seginfo); } }
/* * subseg_change() * * Change the subsegment we are in, BUT DO NOT MAKE A NEW FRAG for the * subsegment. If we are already in the correct subsegment, change nothing. * This is used eg as a worker for subseg_set [which does make a new frag_now] * and for changing segments after we have read the source. We construct eg * fixSs even after the source file is read, so we do have to keep the * segment context correct. */ void subseg_change (segT seg, int subseg) { segment_info_type *seginfo = seg_info (seg); now_seg = seg; now_subseg = subseg; if (! seginfo) { seginfo = (segment_info_type *) xcalloc (1, sizeof (*seginfo)); seginfo->bfd_section = seg; bfd_set_section_userdata (stdoutput, seg, seginfo); } }