Commit bfa2ebe3 by Richard Biener Committed by Richard Biener

data-streamer.h (streamer_write_data_stream): Declare here, renamed from ...

2014-07-31  Richard Biener  <rguenther@suse.de>

	* data-streamer.h (streamer_write_data_stream): Declare here,
	renamed from ...
	* lto-streamer.h (lto_output_data_stream): ... this.  Remove.
	* lto-cgraph.c (lto_output_node): Adjust.
	(lto_output_varpool_node): Likewise.
	* data-streamer-out.c (streamer_string_index): Likewise.
	(streamer_write_data_stream, lto_append_block): Move from ...
	* lto-section-out.c (lto_output_data_stream,
	lto_append_block): ... here.

From-SVN: r213317
parent c5fbeafd
2014-07-31 Richard Biener <rguenther@suse.de>
* data-streamer.h (streamer_write_data_stream): Declare here,
renamed from ...
* lto-streamer.h (lto_output_data_stream): ... this. Remove.
* lto-cgraph.c (lto_output_node): Adjust.
(lto_output_varpool_node): Likewise.
* data-streamer-out.c (streamer_string_index): Likewise.
(streamer_write_data_stream, lto_append_block): Move from ...
* lto-section-out.c (lto_output_data_stream,
lto_append_block): ... here.
2014-07-30 Mike Stump <mikestump@comcast.net> 2014-07-30 Mike Stump <mikestump@comcast.net>
* configure.ac: Also check for popen. * configure.ac: Also check for popen.
......
...@@ -32,6 +32,49 @@ along with GCC; see the file COPYING3. If not see ...@@ -32,6 +32,49 @@ along with GCC; see the file COPYING3. If not see
#include "gimple.h" #include "gimple.h"
#include "data-streamer.h" #include "data-streamer.h"
/* Adds a new block to output stream OBS. */
void
lto_append_block (struct lto_output_stream *obs)
{
struct lto_char_ptr_base *new_block;
gcc_assert (obs->left_in_block == 0);
if (obs->first_block == NULL)
{
/* This is the first time the stream has been written
into. */
obs->block_size = 1024;
new_block = (struct lto_char_ptr_base*) xmalloc (obs->block_size);
obs->first_block = new_block;
}
else
{
struct lto_char_ptr_base *tptr;
/* Get a new block that is twice as big as the last block
and link it into the list. */
obs->block_size *= 2;
new_block = (struct lto_char_ptr_base*) xmalloc (obs->block_size);
/* The first bytes of the block are reserved as a pointer to
the next block. Set the chain of the full block to the
pointer to the new block. */
tptr = obs->current_block;
tptr->ptr = (char *) new_block;
}
/* Set the place for the next char at the first position after the
chain to the next block. */
obs->current_pointer
= ((char *) new_block) + sizeof (struct lto_char_ptr_base);
obs->current_block = new_block;
/* Null out the newly allocated block's pointer to the next block. */
new_block->ptr = NULL;
obs->left_in_block = obs->block_size - sizeof (struct lto_char_ptr_base);
}
/* Return index used to reference STRING of LEN characters in the string table /* Return index used to reference STRING of LEN characters in the string table
in OB. The string might or might not include a trailing '\0'. in OB. The string might or might not include a trailing '\0'.
Then put the index onto the INDEX_STREAM. Then put the index onto the INDEX_STREAM.
...@@ -71,7 +114,7 @@ streamer_string_index (struct output_block *ob, const char *s, unsigned int len, ...@@ -71,7 +114,7 @@ streamer_string_index (struct output_block *ob, const char *s, unsigned int len,
new_slot->slot_num = start; new_slot->slot_num = start;
*slot = new_slot; *slot = new_slot;
streamer_write_uhwi_stream (string_stream, len); streamer_write_uhwi_stream (string_stream, len);
lto_output_data_stream (string_stream, string, len); streamer_write_data_stream (string_stream, string, len);
return start + 1; return start + 1;
} }
else else
...@@ -304,3 +347,34 @@ streamer_write_gcov_count_stream (struct lto_output_stream *obs, gcov_type work) ...@@ -304,3 +347,34 @@ streamer_write_gcov_count_stream (struct lto_output_stream *obs, gcov_type work)
gcc_assert ((HOST_WIDE_INT) work == work); gcc_assert ((HOST_WIDE_INT) work == work);
streamer_write_hwi_stream (obs, work); streamer_write_hwi_stream (obs, work);
} }
/* Write raw DATA of length LEN to the output block OB. */
void
streamer_write_data_stream (struct lto_output_stream *obs, const void *data,
size_t len)
{
while (len)
{
size_t copy;
/* No space left. */
if (obs->left_in_block == 0)
lto_append_block (obs);
/* Determine how many bytes to copy in this loop. */
if (len <= obs->left_in_block)
copy = len;
else
copy = obs->left_in_block;
/* Copy the data and do bookkeeping. */
memcpy (obs->current_pointer, data, copy);
obs->current_pointer += copy;
obs->total_size += copy;
obs->left_in_block -= copy;
data = (const char *) data + copy;
len -= copy;
}
}
...@@ -70,6 +70,8 @@ void streamer_write_uhwi_stream (struct lto_output_stream *, ...@@ -70,6 +70,8 @@ void streamer_write_uhwi_stream (struct lto_output_stream *,
unsigned HOST_WIDE_INT); unsigned HOST_WIDE_INT);
void streamer_write_hwi_stream (struct lto_output_stream *, HOST_WIDE_INT); void streamer_write_hwi_stream (struct lto_output_stream *, HOST_WIDE_INT);
void streamer_write_gcov_count_stream (struct lto_output_stream *, gcov_type); void streamer_write_gcov_count_stream (struct lto_output_stream *, gcov_type);
void streamer_write_data_stream (struct lto_output_stream *, const void *,
size_t);
/* In data-streamer-in.c */ /* In data-streamer-in.c */
const char *string_for_index (struct data_in *, unsigned int, unsigned int *); const char *string_for_index (struct data_in *, unsigned int, unsigned int *);
......
...@@ -488,7 +488,7 @@ lto_output_node (struct lto_simple_output_block *ob, struct cgraph_node *node, ...@@ -488,7 +488,7 @@ lto_output_node (struct lto_simple_output_block *ob, struct cgraph_node *node,
comdat = IDENTIFIER_POINTER (group); comdat = IDENTIFIER_POINTER (group);
else else
comdat = ""; comdat = "";
lto_output_data_stream (ob->main_stream, comdat, strlen (comdat) + 1); streamer_write_data_stream (ob->main_stream, comdat, strlen (comdat) + 1);
if (group) if (group)
{ {
...@@ -546,7 +546,7 @@ lto_output_node (struct lto_simple_output_block *ob, struct cgraph_node *node, ...@@ -546,7 +546,7 @@ lto_output_node (struct lto_simple_output_block *ob, struct cgraph_node *node,
bp_pack_enum (&bp, ld_plugin_symbol_resolution, bp_pack_enum (&bp, ld_plugin_symbol_resolution,
LDPR_NUM_KNOWN, node->resolution); LDPR_NUM_KNOWN, node->resolution);
streamer_write_bitpack (&bp); streamer_write_bitpack (&bp);
lto_output_data_stream (ob->main_stream, section, strlen (section) + 1); streamer_write_data_stream (ob->main_stream, section, strlen (section) + 1);
if (node->thunk.thunk_p && !boundary_p) if (node->thunk.thunk_p && !boundary_p)
{ {
...@@ -622,7 +622,7 @@ lto_output_varpool_node (struct lto_simple_output_block *ob, varpool_node *node, ...@@ -622,7 +622,7 @@ lto_output_varpool_node (struct lto_simple_output_block *ob, varpool_node *node,
comdat = IDENTIFIER_POINTER (group); comdat = IDENTIFIER_POINTER (group);
else else
comdat = ""; comdat = "";
lto_output_data_stream (ob->main_stream, comdat, strlen (comdat) + 1); streamer_write_data_stream (ob->main_stream, comdat, strlen (comdat) + 1);
if (group) if (group)
{ {
...@@ -640,7 +640,7 @@ lto_output_varpool_node (struct lto_simple_output_block *ob, varpool_node *node, ...@@ -640,7 +640,7 @@ lto_output_varpool_node (struct lto_simple_output_block *ob, varpool_node *node,
section = node->get_section (); section = node->get_section ();
if (!section) if (!section)
section = ""; section = "";
lto_output_data_stream (ob->main_stream, section, strlen (section) + 1); streamer_write_data_stream (ob->main_stream, section, strlen (section) + 1);
streamer_write_enum (ob->main_stream, ld_plugin_symbol_resolution, streamer_write_enum (ob->main_stream, ld_plugin_symbol_resolution,
LDPR_NUM_KNOWN, node->resolution); LDPR_NUM_KNOWN, node->resolution);
......
...@@ -147,79 +147,6 @@ lto_write_stream (struct lto_output_stream *obs) ...@@ -147,79 +147,6 @@ lto_write_stream (struct lto_output_stream *obs)
} }
/* Adds a new block to output stream OBS. */
void
lto_append_block (struct lto_output_stream *obs)
{
struct lto_char_ptr_base *new_block;
gcc_assert (obs->left_in_block == 0);
if (obs->first_block == NULL)
{
/* This is the first time the stream has been written
into. */
obs->block_size = 1024;
new_block = (struct lto_char_ptr_base*) xmalloc (obs->block_size);
obs->first_block = new_block;
}
else
{
struct lto_char_ptr_base *tptr;
/* Get a new block that is twice as big as the last block
and link it into the list. */
obs->block_size *= 2;
new_block = (struct lto_char_ptr_base*) xmalloc (obs->block_size);
/* The first bytes of the block are reserved as a pointer to
the next block. Set the chain of the full block to the
pointer to the new block. */
tptr = obs->current_block;
tptr->ptr = (char *) new_block;
}
/* Set the place for the next char at the first position after the
chain to the next block. */
obs->current_pointer
= ((char *) new_block) + sizeof (struct lto_char_ptr_base);
obs->current_block = new_block;
/* Null out the newly allocated block's pointer to the next block. */
new_block->ptr = NULL;
obs->left_in_block = obs->block_size - sizeof (struct lto_char_ptr_base);
}
/* Write raw DATA of length LEN to the output block OB. */
void
lto_output_data_stream (struct lto_output_stream *obs, const void *data,
size_t len)
{
while (len)
{
size_t copy;
/* No space left. */
if (obs->left_in_block == 0)
lto_append_block (obs);
/* Determine how many bytes to copy in this loop. */
if (len <= obs->left_in_block)
copy = len;
else
copy = obs->left_in_block;
/* Copy the data and do bookkeeping. */
memcpy (obs->current_pointer, data, copy);
obs->current_pointer += copy;
obs->total_size += copy;
obs->left_in_block -= copy;
data = (const char *) data + copy;
len -= copy;
}
}
/* Lookup NAME in ENCODER. If NAME is not found, create a new entry in /* Lookup NAME in ENCODER. If NAME is not found, create a new entry in
ENCODER for NAME with the next available index of ENCODER, then ENCODER for NAME with the next available index of ENCODER, then
print the index to OBS. True is returned if NAME was added to print the index to OBS. True is returned if NAME was added to
......
...@@ -779,8 +779,6 @@ extern void lto_begin_section (const char *, bool); ...@@ -779,8 +779,6 @@ extern void lto_begin_section (const char *, bool);
extern void lto_end_section (void); extern void lto_end_section (void);
extern void lto_write_data (const void *, unsigned int); extern void lto_write_data (const void *, unsigned int);
extern void lto_write_stream (struct lto_output_stream *); extern void lto_write_stream (struct lto_output_stream *);
extern void lto_output_data_stream (struct lto_output_stream *, const void *,
size_t);
extern bool lto_output_decl_index (struct lto_output_stream *, extern bool lto_output_decl_index (struct lto_output_stream *,
struct lto_tree_ref_encoder *, struct lto_tree_ref_encoder *,
tree, unsigned int *); tree, unsigned int *);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment