diff options
author | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-07-31 07:51:41 +0000 |
---|---|---|
committer | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-07-31 07:51:41 +0000 |
commit | a797f9eed54019df2013a700b332247962f65f66 (patch) | |
tree | ff37ca736ada5ffa9cbb047d08ff03f4d6d72c52 /gcc | |
parent | e3f3803dbd29c68d3a2b62cfbefeae271a693a80 (diff) | |
download | gcc-a797f9eed54019df2013a700b332247962f65f66.tar.gz |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@213317 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 12 | ||||
-rw-r--r-- | gcc/data-streamer-out.c | 76 | ||||
-rw-r--r-- | gcc/data-streamer.h | 2 | ||||
-rw-r--r-- | gcc/lto-cgraph.c | 8 | ||||
-rw-r--r-- | gcc/lto-section-out.c | 73 | ||||
-rw-r--r-- | gcc/lto-streamer.h | 2 |
6 files changed, 93 insertions, 80 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 23dd6f06ab6..7176ee8d086 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,15 @@ +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> * configure.ac: Also check for popen. diff --git a/gcc/data-streamer-out.c b/gcc/data-streamer-out.c index 8eefd2f855e..4b3a0119dbe 100644 --- a/gcc/data-streamer-out.c +++ b/gcc/data-streamer-out.c @@ -32,6 +32,49 @@ along with GCC; see the file COPYING3. If not see #include "gimple.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 in OB. The string might or might not include a trailing '\0'. 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, new_slot->slot_num = start; *slot = new_slot; 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; } else @@ -304,3 +347,34 @@ streamer_write_gcov_count_stream (struct lto_output_stream *obs, gcov_type work) gcc_assert ((HOST_WIDE_INT) work == 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; + } +} + diff --git a/gcc/data-streamer.h b/gcc/data-streamer.h index dc7b7207add..56fedd2764d 100644 --- a/gcc/data-streamer.h +++ b/gcc/data-streamer.h @@ -70,6 +70,8 @@ void streamer_write_uhwi_stream (struct lto_output_stream *, unsigned 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_data_stream (struct lto_output_stream *, const void *, + size_t); /* In data-streamer-in.c */ const char *string_for_index (struct data_in *, unsigned int, unsigned int *); diff --git a/gcc/lto-cgraph.c b/gcc/lto-cgraph.c index b1fcf67a025..ab694a58335 100644 --- a/gcc/lto-cgraph.c +++ b/gcc/lto-cgraph.c @@ -488,7 +488,7 @@ lto_output_node (struct lto_simple_output_block *ob, struct cgraph_node *node, comdat = IDENTIFIER_POINTER (group); else 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) { @@ -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, LDPR_NUM_KNOWN, node->resolution); 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) { @@ -622,7 +622,7 @@ lto_output_varpool_node (struct lto_simple_output_block *ob, varpool_node *node, comdat = IDENTIFIER_POINTER (group); else 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) { @@ -640,7 +640,7 @@ lto_output_varpool_node (struct lto_simple_output_block *ob, varpool_node *node, section = node->get_section (); if (!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, LDPR_NUM_KNOWN, node->resolution); diff --git a/gcc/lto-section-out.c b/gcc/lto-section-out.c index 2494191f288..0c5f792bcde 100644 --- a/gcc/lto-section-out.c +++ b/gcc/lto-section-out.c @@ -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 ENCODER for NAME with the next available index of ENCODER, then print the index to OBS. True is returned if NAME was added to diff --git a/gcc/lto-streamer.h b/gcc/lto-streamer.h index 423108b60eb..1d728f6aa09 100644 --- a/gcc/lto-streamer.h +++ b/gcc/lto-streamer.h @@ -779,8 +779,6 @@ extern void lto_begin_section (const char *, bool); extern void lto_end_section (void); extern void lto_write_data (const void *, unsigned int); 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 *, struct lto_tree_ref_encoder *, tree, unsigned int *); |