static void segmentCgDefine( // DEFINE A SEGMENT PC_SEGMENT *segment ) // - current segment { if( ! segment->cg_defed ) { BEDefSeg( segment->seg_id , segment->attrs , segment->name , segment->align ); segment->cg_defed = TRUE; } }
void SetSegs( void ) /*********************/ { int seg; struct user_seg *useg; struct textsegment *tseg; int flags; char *name; CompFlags.low_on_memory_printed = 0; flags = GLOBAL | INIT | EXEC; if( *TextSegName == '\0' ) { name = TS_SEG_CODE; } else { name = TextSegName; flags |= GIVEN_NAME; } BEDefSeg( SEG_CODE, flags, name, SegAlign( (OptSize == 0) ? BETypeLength( TY_INTEGER ) : 1 ) ); BEDefSeg( SEG_CONST, BACK|INIT|ROM, TS_SEG_CONST, SegAlign( SegAlignment[SEG_CONST] ) ); BEDefSeg( SEG_CONST2, INIT | ROM, TS_SEG_CONST2, SegAlign( SegAlignment[SEG_CONST2] ) ); BEDefSeg( SEG_DATA, GLOBAL | INIT, TS_SEG_DATA, SegAlign( SegAlignment[SEG_DATA] ) ); if( CompFlags.ec_switch_used ) { /* 04-apr-92 */ BEDefSeg( SEG_YIB, GLOBAL | INIT, TS_SEG_YIB, 2 ); BEDefSeg( SEG_YI, GLOBAL | INIT, TS_SEG_YI, 2 ); BEDefSeg( SEG_YIE, GLOBAL | INIT, TS_SEG_YIE, 2 ); } if( CompFlags.bss_segment_used ) { BEDefSeg( SEG_BSS, GLOBAL, TS_SEG_BSS, SegAlign( SegAlignment[ SEG_BSS ] ) ); } if( CompFlags.far_strings ) { FarStringSegment = SegmentNum; /* 10-mar-95 */ ++SegmentNum; } for( seg = FIRST_PRIVATE_SEGMENT; seg < SegmentNum; ++seg ) { sprintf( Buffer, "%s%d_DATA", ModuleName, seg ); BEDefSeg( seg, INIT | PRIVATE, Buffer, SegAlign( 16 ) ); } for( useg = UserSegments; useg != NULL ; useg = useg->next ) { seg = useg->segment; switch( useg->segtype ) { // case SEGTYPE_CODE: // BEDefSeg( seg, INIT | GLOBAL | EXEC, useg->name, 1 ); // break; case SEGTYPE_DATA: /* created through #pragma data_seg */ BEDefSeg( seg, INIT | GLOBAL | NOGROUP, useg->name, SegAlign( TARGET_INT ) ); break; case SEGTYPE_BASED: BEDefSeg( seg, INIT | PRIVATE | GLOBAL, useg->name, SegAlign( TARGET_INT ) ); break; case SEGTYPE_INITFINI: BEDefSeg( seg, INIT | GLOBAL, useg->name, SegAlign( 1 ) ); break; case SEGTYPE_INITFINITR: BEDefSeg( seg, INIT | GLOBAL| THREAD_LOCAL, useg->name, SegAlign( 1 ) ); break; } } for( tseg = TextSegList; tseg != NULL; tseg = tseg->next ) { tseg->segment_number = ++SegmentNum; BEDefSeg( tseg->segment_number, GLOBAL | INIT | EXEC | GIVEN_NAME, tseg->segname, SegAlign( (OptSize == 0) ? BETypeLength( TY_INTEGER ) : 1 ) ); } }