void lto_write_stream (struct lto_output_stream *obs) { unsigned int block_size = 1024; struct lto_char_ptr_base *block; struct lto_char_ptr_base *next_block; if (!obs->first_block) return; for (block = obs->first_block; block; block = next_block) { const char *base = ((char *)block) + sizeof (struct lto_char_ptr_base); unsigned int num_chars = block_size - sizeof (struct lto_char_ptr_base); /* If this is not the last block, it is full. If it is the last block, left_in_block indicates how many chars are unoccupied in this block; subtract from num_chars to obtain occupancy. */ next_block = (struct lto_char_ptr_base *) block->ptr; if (!next_block) num_chars -= obs->left_in_block; if (compression_stream) lto_compress_block (compression_stream, base, num_chars); else lang_hooks.lto.append_data (base, num_chars, block); free (block); block_size *= 2; } }
void lto_write_stream (struct lto_output_stream *obs) { unsigned int block_size = 1024; struct lto_char_ptr_base *block; struct lto_char_ptr_base *next_block; if (!obs->first_block) return; for (block = obs->first_block; block; block = next_block) { const char *base = ((char *)block) + sizeof (struct lto_char_ptr_base); unsigned int num_chars = block_size - sizeof (struct lto_char_ptr_base); /* If this is not the last block, it is full. If it is the last block, left_in_block indicates how many chars are unoccupied in this block; subtract from num_chars to obtain occupancy. */ next_block = (struct lto_char_ptr_base *) block->ptr; if (!next_block) num_chars -= obs->left_in_block; /* FIXME lto: WPA mode uses an ELF function as a lang_hook to append output data. This hook is not happy with the way that compression blocks up output differently to the way it's blocked here. So for now, we don't compress WPA output. */ if (compression_stream) { lto_compress_block (compression_stream, base, num_chars); lang_hooks.lto.append_data (NULL, 0, block); } else lang_hooks.lto.append_data (base, num_chars, block); block_size *= 2; } }
void lto_write_data (const void *data, unsigned int size) { if (compression_stream) lto_compress_block (compression_stream, (const char *)data, size); else lang_hooks.lto.append_data ((const char *)data, size, NULL); }