extern owl_offset ObjAlign( uint_8 alignment ) { //********************************************** // Aligns the offset to 2^alignment boundary. Returns the offset for // convenience. owl_offset offset; offset = tellOffset(); if( alignment == 0 ) return( offset ); // alignment disabled alignment = 1 << alignment; alignment = ( alignment - ( offset % alignment ) ) % alignment; if( alignment == 0 ) return( offset ); ObjNopPad( alignment / 4 ); ObjNullPad( alignment % 4 ); assert( offset + alignment == tellOffset() ); return( offset + alignment ); }
owl_offset ObjAlign( owl_section_handle section, uint_8 alignment ) { //******************************************************************* // Aligns the offset to 2^alignment boundary. Returns the offset for // convenience. owl_offset offset; offset = OWLTellOffset( section ); if( alignment == 0 ) return( offset ); // alignment disabled alignment = 1 << alignment; alignment = ( alignment - ( offset % alignment ) ) % alignment; if( alignment == 0 ) return( offset ); if( OWLTellSectionType( section ) & OWL_SEC_ATTR_CODE ) { ObjNopPad( section, alignment / 4 ); _DBGMSG2( "Align: %d nops emitted\n", alignment / 4 ); ObjNullPad( section, alignment % 4 ); _DBGMSG2( "Align: %d nulls emitted\n", alignment % 4 ); } else { ObjNullPad( section, alignment ); _DBGMSG2( "Align: %d nulls emitted\n", alignment ); } assert( offset + alignment == OWLTellOffset( section ) ); return( offset + alignment ); }