diff mbox

[lto] Minor cleanups, export some functions (issue4272068)

Message ID 20110323212447.97E98AE1C2@tobiano.tor.corp.google.com
State New
Headers show

Commit Message

Diego Novillo March 23, 2011, 9:24 p.m. UTC
This patch has a few cleanups and exports 5 functions from the LTO streamer
that we are using from PPH.

- When calling output_string_with_length, every caller would first
  write a 0 to indicate that the string is not NULL before writing the
  actual string.  I moved that into output_string_with_length.
- The functions to read/write raw data blocks was private to
  lto-opts.c.  I moved it as a general available function into
  lto-streamer-*.c.
- Similarly, the functions to read/write strings and the code to emit
  decl streams and references were private.  I made them extern so
  they can be called from pph.

None of the above changes behaviour in LTO.  The patch bootstrap and
tests on x86_64.  OK for trunk?


Diego.


	* lto-opts.c (input_data_block): Move to lto-streamer-in.c.
	* lto-streamer-in.c (input_string_internal): Add clarifying
	comments.
	(lto_input_data_block): Move from lto-opts.c.  Make extern.
	Update all users.
	(lto_input_string): Rename from input_string.  Make extern.
	Update all users.
	* lto-streamer-out.c (lto_output_string_with_length): Rename from
	output_string_with_length.
	Output 0 to indicate a non-NULL string.  Update all callers to
	not emit 0.
	(lto_output_string): Rename from output_string.  Make extern.
	Update all users.
	(lto_output_decl_state_streams): Make extern.
	(lto_output_decl_state_refs): Make extern.
	* lto-streamer.h (lto_input_string): Declare.
	(lto_input_data_block): Declare.
	(lto_output_string): Declare.
	(lto_output_string_with_length): Declare.
	(lto_output_decl_state_streams): Declare.
	(lto_output_decl_state_refs): Declare.


--
This patch is available for review at http://codereview.appspot.com/4272068

Comments

Richard Biener March 24, 2011, 10:11 a.m. UTC | #1
On Wed, Mar 23, 2011 at 10:24 PM, Diego Novillo <dnovillo@google.com> wrote:
>
> This patch has a few cleanups and exports 5 functions from the LTO streamer
> that we are using from PPH.
>
> - When calling output_string_with_length, every caller would first
>  write a 0 to indicate that the string is not NULL before writing the
>  actual string.  I moved that into output_string_with_length.
> - The functions to read/write raw data blocks was private to
>  lto-opts.c.  I moved it as a general available function into
>  lto-streamer-*.c.
> - Similarly, the functions to read/write strings and the code to emit
>  decl streams and references were private.  I made them extern so
>  they can be called from pph.
>
> None of the above changes behaviour in LTO.  The patch bootstrap and
> tests on x86_64.  OK for trunk?
>

Ok.

Thanks,
Richard.

> Diego.
>
>
>        * lto-opts.c (input_data_block): Move to lto-streamer-in.c.
>        * lto-streamer-in.c (input_string_internal): Add clarifying
>        comments.
>        (lto_input_data_block): Move from lto-opts.c.  Make extern.
>        Update all users.
>        (lto_input_string): Rename from input_string.  Make extern.
>        Update all users.
>        * lto-streamer-out.c (lto_output_string_with_length): Rename from
>        output_string_with_length.
>        Output 0 to indicate a non-NULL string.  Update all callers to
>        not emit 0.
>        (lto_output_string): Rename from output_string.  Make extern.
>        Update all users.
>        (lto_output_decl_state_streams): Make extern.
>        (lto_output_decl_state_refs): Make extern.
>        * lto-streamer.h (lto_input_string): Declare.
>        (lto_input_data_block): Declare.
>        (lto_output_string): Declare.
>        (lto_output_string_with_length): Declare.
>        (lto_output_decl_state_streams): Declare.
>        (lto_output_decl_state_refs): Declare.
>
> diff --git a/gcc/lto-opts.c b/gcc/lto-opts.c
> index ec4e78d..9979e8d 100644
> --- a/gcc/lto-opts.c
> +++ b/gcc/lto-opts.c
> @@ -162,18 +162,6 @@ output_string_stream (struct lto_output_stream *stream, const char *string)
>     output_data_stream (stream, &flag, sizeof (flag));
>  }
>
> -/* Read LENGTH bytes from STREAM to ADDR.  */
> -
> -static void
> -input_data_block (struct lto_input_block *ib, void *addr, size_t length)
> -{
> -  size_t i;
> -  unsigned char *const buffer = (unsigned char *const) addr;
> -
> -  for (i = 0; i < length; i++)
> -    buffer[i] = lto_input_1_unsigned (ib);
> -}
> -
>  /* Return a string from IB.  The string is allocated, and the caller is
>    responsible for freeing it.  */
>
> @@ -182,15 +170,15 @@ input_string_block (struct lto_input_block *ib)
>  {
>   bool flag;
>
> -  input_data_block (ib, &flag, sizeof (flag));
> +  lto_input_data_block (ib, &flag, sizeof (flag));
>   if (flag)
>     {
>       size_t length;
>       char *string;
>
> -      input_data_block (ib, &length, sizeof (length));
> +      lto_input_data_block (ib, &length, sizeof (length));
>       string = (char *) xcalloc (1, length + 1);
> -      input_data_block (ib, string, length);
> +      lto_input_data_block (ib, string, length);
>
>       return string;
>     }
> @@ -336,16 +324,16 @@ input_options (struct lto_input_block *ib)
>  {
>   size_t length, i;
>
> -  input_data_block (ib, &length, sizeof (length));
> +  lto_input_data_block (ib, &length, sizeof (length));
>
>   for (i = 0; i < length; i++)
>     {
>       opt_t o;
>
> -      input_data_block (ib, &o.type, sizeof (o.type));
> -      input_data_block (ib, &o.code, sizeof (o.code));
> +      lto_input_data_block (ib, &o.type, sizeof (o.type));
> +      lto_input_data_block (ib, &o.code, sizeof (o.code));
>       o.arg = input_string_block (ib);
> -      input_data_block (ib, &o.value, sizeof (o.value));
> +      lto_input_data_block (ib, &o.value, sizeof (o.value));
>       VEC_safe_push (opt_t, heap, file_options, &o);
>     }
>  }
> diff --git a/gcc/lto-streamer-in.c b/gcc/lto-streamer-in.c
> index a873258..383bfc2 100644
> --- a/gcc/lto-streamer-in.c
> +++ b/gcc/lto-streamer-in.c
> @@ -140,7 +140,10 @@ input_string_internal (struct data_in *data_in, struct lto_input_block *ib,
>   unsigned int loc;
>   const char *result;
>
> +  /* Read the location of the string from IB.  */
>   loc = lto_input_uleb128 (ib);
> +
> +  /* Get the string stored at location LOC in DATA_IN->STRINGS.  */
>   LTO_INIT_INPUT_BLOCK (str_tab, data_in->strings, loc, data_in->strings_len);
>   len = lto_input_uleb128 (&str_tab);
>   *rlen = len;
> @@ -191,10 +194,24 @@ input_identifier (struct data_in *data_in, struct lto_input_block *ib)
>   return get_identifier_with_length (ptr, len);
>  }
>
> +
> +/* Read LENGTH bytes from STREAM to ADDR.  */
> +
> +void
> +lto_input_data_block (struct lto_input_block *ib, void *addr, size_t length)
> +{
> +  size_t i;
> +  unsigned char *const buffer = (unsigned char *const) addr;
> +
> +  for (i = 0; i < length; i++)
> +    buffer[i] = lto_input_1_unsigned (ib);
> +}
> +
> +
>  /* Read a NULL terminated string from the string table in DATA_IN.  */
>
> -static const char *
> -input_string (struct data_in *data_in, struct lto_input_block *ib)
> +const char *
> +lto_input_string (struct data_in *data_in, struct lto_input_block *ib)
>  {
>   unsigned int len;
>   const char *ptr;
> @@ -275,7 +292,7 @@ lto_input_location (struct lto_input_block *ib, struct data_in *data_in)
>  {
>   expanded_location xloc;
>
> -  xloc.file = input_string (data_in, ib);
> +  xloc.file = lto_input_string (data_in, ib);
>   if (xloc.file == NULL)
>     return UNKNOWN_LOCATION;
>
> @@ -2307,7 +2324,7 @@ lto_input_ts_translation_unit_decl_tree_pointers (struct lto_input_block *ib,
>                                                  struct data_in *data_in,
>                                                  tree expr)
>  {
> -  TRANSLATION_UNIT_LANGUAGE (expr) = xstrdup (input_string (data_in, ib));
> +  TRANSLATION_UNIT_LANGUAGE (expr) = xstrdup (lto_input_string (data_in, ib));
>   VEC_safe_push (tree, gc, all_translation_units, expr);
>  }
>
> @@ -2590,7 +2607,7 @@ lto_get_builtin_tree (struct lto_input_block *ib, struct data_in *data_in)
>   else
>     gcc_unreachable ();
>
> -  asmname = input_string (data_in, ib);
> +  asmname = lto_input_string (data_in, ib);
>   if (asmname)
>     set_builtin_user_assembler_name (result, asmname);
>
> diff --git a/gcc/lto-streamer-out.c b/gcc/lto-streamer-out.c
> index ba916b6..4857947 100644
> --- a/gcc/lto-streamer-out.c
> +++ b/gcc/lto-streamer-out.c
> @@ -154,11 +154,11 @@ destroy_output_block (struct output_block *ob)
>    table in OB. The string might or might not include a trailing '\0'.
>    Then put the index onto the INDEX_STREAM.  */
>
> -static void
> -output_string_with_length (struct output_block *ob,
> -                          struct lto_output_stream *index_stream,
> -                          const char *s,
> -                          unsigned int len)
> +void
> +lto_output_string_with_length (struct output_block *ob,
> +                              struct lto_output_stream *index_stream,
> +                              const char *s,
> +                              unsigned int len)
>  {
>   struct string_slot **slot;
>   struct string_slot s_slot;
> @@ -170,6 +170,9 @@ output_string_with_length (struct output_block *ob,
>   s_slot.len = len;
>   s_slot.slot_num = 0;
>
> +  /* Indicate that this is not a NULL string.  */
> +  lto_output_uleb128_stream (index_stream, 0);
> +
>   slot = (struct string_slot **) htab_find_slot (ob->string_hash_table,
>                                                 &s_slot, INSERT);
>   if (*slot == NULL)
> @@ -200,16 +203,14 @@ output_string_with_length (struct output_block *ob,
>  /* Output the '\0' terminated STRING to the string
>    table in OB.  Then put the index onto the INDEX_STREAM.  */
>
> -static void
> -output_string (struct output_block *ob,
> -              struct lto_output_stream *index_stream,
> -              const char *string)
> +void
> +lto_output_string (struct output_block *ob,
> +                  struct lto_output_stream *index_stream,
> +                  const char *string)
>  {
>   if (string)
> -    {
> -      lto_output_uleb128_stream (index_stream, 0);
> -      output_string_with_length (ob, index_stream, string, strlen (string) + 1);
> -    }
> +    lto_output_string_with_length (ob, index_stream, string,
> +                                  strlen (string) + 1);
>   else
>     lto_output_uleb128_stream (index_stream, 1);
>  }
> @@ -224,12 +225,9 @@ output_string_cst (struct output_block *ob,
>                   tree string)
>  {
>   if (string)
> -    {
> -      lto_output_uleb128_stream (index_stream, 0);
> -      output_string_with_length (ob, index_stream,
> -                                TREE_STRING_POINTER (string),
> -                                TREE_STRING_LENGTH (string));
> -    }
> +    lto_output_string_with_length (ob, index_stream,
> +                                  TREE_STRING_POINTER (string),
> +                                  TREE_STRING_LENGTH (string ));
>   else
>     lto_output_uleb128_stream (index_stream, 1);
>  }
> @@ -244,12 +242,9 @@ output_identifier (struct output_block *ob,
>                   tree id)
>  {
>   if (id)
> -    {
> -      lto_output_uleb128_stream (index_stream, 0);
> -      output_string_with_length (ob, index_stream,
> -                                IDENTIFIER_POINTER (id),
> -                                IDENTIFIER_LENGTH (id));
> -    }
> +    lto_output_string_with_length (ob, index_stream,
> +                                  IDENTIFIER_POINTER (id),
> +                                  IDENTIFIER_LENGTH (id));
>   else
>     lto_output_uleb128_stream (index_stream, 1);
>  }
> @@ -611,13 +606,13 @@ lto_output_location (struct output_block *ob, location_t loc)
>
>   if (loc == UNKNOWN_LOCATION)
>     {
> -      output_string (ob, ob->main_stream, NULL);
> +      lto_output_string (ob, ob->main_stream, NULL);
>       return;
>     }
>
>   xloc = expand_location (loc);
>
> -  output_string (ob, ob->main_stream, xloc.file);
> +  lto_output_string (ob, ob->main_stream, xloc.file);
>   output_sleb128 (ob, xloc.line);
>   output_sleb128 (ob, xloc.column);
>   output_sleb128 (ob, xloc.sysp);
> @@ -1155,7 +1150,7 @@ static void
>  lto_output_ts_translation_unit_decl_tree_pointers (struct output_block *ob,
>                                                   tree expr)
>  {
> -  output_string (ob, ob->main_stream, TRANSLATION_UNIT_LANGUAGE (expr));
> +  lto_output_string (ob, ob->main_stream, TRANSLATION_UNIT_LANGUAGE (expr));
>  }
>
>  /* Helper for lto_output_tree.  Write all pointer fields in EXPR to output
> @@ -1320,12 +1315,12 @@ lto_output_builtin_tree (struct output_block *ob, tree expr, int ix)
>         reader side from adding a second '*', we omit it here.  */
>       const char *str = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (expr));
>       if (strlen (str) > 1 && str[0] == '*')
> -       output_string (ob, ob->main_stream, &str[1]);
> +       lto_output_string (ob, ob->main_stream, &str[1]);
>       else
> -       output_string (ob, ob->main_stream, NULL);
> +       lto_output_string (ob, ob->main_stream, NULL);
>     }
>   else
> -    output_string (ob, ob->main_stream, NULL);
> +    lto_output_string (ob, ob->main_stream, NULL);
>  }
>
>
> @@ -1745,7 +1740,7 @@ output_gimple_stmt (struct output_block *ob, gimple stmt)
>       lto_output_uleb128_stream (ob->main_stream, gimple_asm_noutputs (stmt));
>       lto_output_uleb128_stream (ob->main_stream, gimple_asm_nclobbers (stmt));
>       lto_output_uleb128_stream (ob->main_stream, gimple_asm_nlabels (stmt));
> -      output_string (ob, ob->main_stream, gimple_asm_string (stmt));
> +      lto_output_string (ob, ob->main_stream, gimple_asm_string (stmt));
>       /* Fallthru  */
>
>     case GIMPLE_ASSIGN:
> @@ -2342,7 +2337,7 @@ write_global_references (struct output_block *ob,
>  /* Write all the streams in an lto_out_decl_state STATE using
>    output block OB and output stream OUT_STREAM.  */
>
> -static void
> +void
>  lto_output_decl_state_streams (struct output_block *ob,
>                               struct lto_out_decl_state *state)
>  {
> @@ -2356,7 +2351,7 @@ lto_output_decl_state_streams (struct output_block *ob,
>  /* Write all the references in an lto_out_decl_state STATE using
>    output block OB and output stream OUT_STREAM.  */
>
> -static void
> +void
>  lto_output_decl_state_refs (struct output_block *ob,
>                            struct lto_output_stream *out_stream,
>                            struct lto_out_decl_state *state)
> diff --git a/gcc/lto-streamer.h b/gcc/lto-streamer.h
> index d8669a2..c7c865d 100644
> --- a/gcc/lto-streamer.h
> +++ b/gcc/lto-streamer.h
> @@ -862,6 +862,9 @@ extern struct data_in *lto_data_in_create (struct lto_file_decl_data *,
>                                    const char *, unsigned,
>                                    VEC(ld_plugin_symbol_resolution_t,heap) *);
>  extern void lto_data_in_delete (struct data_in *);
> +extern const char *lto_input_string (struct data_in *,
> +                                    struct lto_input_block *);
> +extern void lto_input_data_block (struct lto_input_block *, void *, size_t);
>
>
>  /* In lto-streamer-out.c  */
> @@ -870,6 +873,18 @@ extern struct output_block *create_output_block (enum lto_section_type);
>  extern void destroy_output_block (struct output_block *);
>  extern void lto_output_tree (struct output_block *, tree, bool);
>  extern void produce_asm (struct output_block *ob, tree fn);
> +extern void lto_output_string (struct output_block *,
> +                              struct lto_output_stream *,
> +                              const char *);
> +extern void lto_output_string_with_length (struct output_block *,
> +                                          struct lto_output_stream *,
> +                                          const char *,
> +                                          unsigned int);
> +void lto_output_decl_state_streams (struct output_block *,
> +                                   struct lto_out_decl_state *);
> +void lto_output_decl_state_refs (struct output_block *,
> +                                struct lto_output_stream *,
> +                                struct lto_out_decl_state *);
>
>
>  /* In lto-cgraph.c  */
>
> --
> This patch is available for review at http://codereview.appspot.com/4272068
>
diff mbox

Patch

diff --git a/gcc/lto-opts.c b/gcc/lto-opts.c
index ec4e78d..9979e8d 100644
--- a/gcc/lto-opts.c
+++ b/gcc/lto-opts.c
@@ -162,18 +162,6 @@  output_string_stream (struct lto_output_stream *stream, const char *string)
     output_data_stream (stream, &flag, sizeof (flag));
 }
 
-/* Read LENGTH bytes from STREAM to ADDR.  */
-
-static void
-input_data_block (struct lto_input_block *ib, void *addr, size_t length)
-{
-  size_t i;
-  unsigned char *const buffer = (unsigned char *const) addr;
-
-  for (i = 0; i < length; i++)
-    buffer[i] = lto_input_1_unsigned (ib);
-}
-
 /* Return a string from IB.  The string is allocated, and the caller is
    responsible for freeing it.  */
 
@@ -182,15 +170,15 @@  input_string_block (struct lto_input_block *ib)
 {
   bool flag;
 
-  input_data_block (ib, &flag, sizeof (flag));
+  lto_input_data_block (ib, &flag, sizeof (flag));
   if (flag)
     {
       size_t length;
       char *string;
 
-      input_data_block (ib, &length, sizeof (length));
+      lto_input_data_block (ib, &length, sizeof (length));
       string = (char *) xcalloc (1, length + 1);
-      input_data_block (ib, string, length);
+      lto_input_data_block (ib, string, length);
 
       return string;
     }
@@ -336,16 +324,16 @@  input_options (struct lto_input_block *ib)
 {
   size_t length, i;
 
-  input_data_block (ib, &length, sizeof (length));
+  lto_input_data_block (ib, &length, sizeof (length));
 
   for (i = 0; i < length; i++)
     {
       opt_t o;
 
-      input_data_block (ib, &o.type, sizeof (o.type));
-      input_data_block (ib, &o.code, sizeof (o.code));
+      lto_input_data_block (ib, &o.type, sizeof (o.type));
+      lto_input_data_block (ib, &o.code, sizeof (o.code));
       o.arg = input_string_block (ib);
-      input_data_block (ib, &o.value, sizeof (o.value));
+      lto_input_data_block (ib, &o.value, sizeof (o.value));
       VEC_safe_push (opt_t, heap, file_options, &o);
     }
 }
diff --git a/gcc/lto-streamer-in.c b/gcc/lto-streamer-in.c
index a873258..383bfc2 100644
--- a/gcc/lto-streamer-in.c
+++ b/gcc/lto-streamer-in.c
@@ -140,7 +140,10 @@  input_string_internal (struct data_in *data_in, struct lto_input_block *ib,
   unsigned int loc;
   const char *result;
 
+  /* Read the location of the string from IB.  */
   loc = lto_input_uleb128 (ib);
+
+  /* Get the string stored at location LOC in DATA_IN->STRINGS.  */
   LTO_INIT_INPUT_BLOCK (str_tab, data_in->strings, loc, data_in->strings_len);
   len = lto_input_uleb128 (&str_tab);
   *rlen = len;
@@ -191,10 +194,24 @@  input_identifier (struct data_in *data_in, struct lto_input_block *ib)
   return get_identifier_with_length (ptr, len);
 }
 
+
+/* Read LENGTH bytes from STREAM to ADDR.  */
+
+void
+lto_input_data_block (struct lto_input_block *ib, void *addr, size_t length)
+{
+  size_t i;
+  unsigned char *const buffer = (unsigned char *const) addr;
+
+  for (i = 0; i < length; i++)
+    buffer[i] = lto_input_1_unsigned (ib);
+}
+
+
 /* Read a NULL terminated string from the string table in DATA_IN.  */
 
-static const char *
-input_string (struct data_in *data_in, struct lto_input_block *ib)
+const char *
+lto_input_string (struct data_in *data_in, struct lto_input_block *ib)
 {
   unsigned int len;
   const char *ptr;
@@ -275,7 +292,7 @@  lto_input_location (struct lto_input_block *ib, struct data_in *data_in)
 {
   expanded_location xloc;
 
-  xloc.file = input_string (data_in, ib);
+  xloc.file = lto_input_string (data_in, ib);
   if (xloc.file == NULL)
     return UNKNOWN_LOCATION;
 
@@ -2307,7 +2324,7 @@  lto_input_ts_translation_unit_decl_tree_pointers (struct lto_input_block *ib,
 						  struct data_in *data_in,
 						  tree expr)
 {
-  TRANSLATION_UNIT_LANGUAGE (expr) = xstrdup (input_string (data_in, ib));
+  TRANSLATION_UNIT_LANGUAGE (expr) = xstrdup (lto_input_string (data_in, ib));
   VEC_safe_push (tree, gc, all_translation_units, expr);
 }
 
@@ -2590,7 +2607,7 @@  lto_get_builtin_tree (struct lto_input_block *ib, struct data_in *data_in)
   else
     gcc_unreachable ();
 
-  asmname = input_string (data_in, ib);
+  asmname = lto_input_string (data_in, ib);
   if (asmname)
     set_builtin_user_assembler_name (result, asmname);
 
diff --git a/gcc/lto-streamer-out.c b/gcc/lto-streamer-out.c
index ba916b6..4857947 100644
--- a/gcc/lto-streamer-out.c
+++ b/gcc/lto-streamer-out.c
@@ -154,11 +154,11 @@  destroy_output_block (struct output_block *ob)
    table in OB. The string might or might not include a trailing '\0'.
    Then put the index onto the INDEX_STREAM.  */
 
-static void
-output_string_with_length (struct output_block *ob,
-			   struct lto_output_stream *index_stream,
-			   const char *s,
-			   unsigned int len)
+void
+lto_output_string_with_length (struct output_block *ob,
+			       struct lto_output_stream *index_stream,
+			       const char *s,
+			       unsigned int len)
 {
   struct string_slot **slot;
   struct string_slot s_slot;
@@ -170,6 +170,9 @@  output_string_with_length (struct output_block *ob,
   s_slot.len = len;
   s_slot.slot_num = 0;
 
+  /* Indicate that this is not a NULL string.  */
+  lto_output_uleb128_stream (index_stream, 0);
+
   slot = (struct string_slot **) htab_find_slot (ob->string_hash_table,
 						 &s_slot, INSERT);
   if (*slot == NULL)
@@ -200,16 +203,14 @@  output_string_with_length (struct output_block *ob,
 /* Output the '\0' terminated STRING to the string
    table in OB.  Then put the index onto the INDEX_STREAM.  */
 
-static void
-output_string (struct output_block *ob,
-	       struct lto_output_stream *index_stream,
-	       const char *string)
+void
+lto_output_string (struct output_block *ob,
+	           struct lto_output_stream *index_stream,
+	           const char *string)
 {
   if (string)
-    {
-      lto_output_uleb128_stream (index_stream, 0);
-      output_string_with_length (ob, index_stream, string, strlen (string) + 1);
-    }
+    lto_output_string_with_length (ob, index_stream, string,
+				   strlen (string) + 1);
   else
     lto_output_uleb128_stream (index_stream, 1);
 }
@@ -224,12 +225,9 @@  output_string_cst (struct output_block *ob,
 		   tree string)
 {
   if (string)
-    {
-      lto_output_uleb128_stream (index_stream, 0);
-      output_string_with_length (ob, index_stream,
-				 TREE_STRING_POINTER (string),
-				 TREE_STRING_LENGTH (string));
-    }
+    lto_output_string_with_length (ob, index_stream,
+				   TREE_STRING_POINTER (string),
+				   TREE_STRING_LENGTH (string ));
   else
     lto_output_uleb128_stream (index_stream, 1);
 }
@@ -244,12 +242,9 @@  output_identifier (struct output_block *ob,
 		   tree id)
 {
   if (id)
-    {
-      lto_output_uleb128_stream (index_stream, 0);
-      output_string_with_length (ob, index_stream,
-				 IDENTIFIER_POINTER (id),
-				 IDENTIFIER_LENGTH (id));
-    }
+    lto_output_string_with_length (ob, index_stream,
+				   IDENTIFIER_POINTER (id),
+				   IDENTIFIER_LENGTH (id));
   else
     lto_output_uleb128_stream (index_stream, 1);
 }
@@ -611,13 +606,13 @@  lto_output_location (struct output_block *ob, location_t loc)
 
   if (loc == UNKNOWN_LOCATION)
     {
-      output_string (ob, ob->main_stream, NULL);
+      lto_output_string (ob, ob->main_stream, NULL);
       return;
     }
 
   xloc = expand_location (loc);
 
-  output_string (ob, ob->main_stream, xloc.file);
+  lto_output_string (ob, ob->main_stream, xloc.file);
   output_sleb128 (ob, xloc.line);
   output_sleb128 (ob, xloc.column);
   output_sleb128 (ob, xloc.sysp);
@@ -1155,7 +1150,7 @@  static void
 lto_output_ts_translation_unit_decl_tree_pointers (struct output_block *ob,
 						   tree expr)
 {
-  output_string (ob, ob->main_stream, TRANSLATION_UNIT_LANGUAGE (expr));
+  lto_output_string (ob, ob->main_stream, TRANSLATION_UNIT_LANGUAGE (expr));
 }
 
 /* Helper for lto_output_tree.  Write all pointer fields in EXPR to output
@@ -1320,12 +1315,12 @@  lto_output_builtin_tree (struct output_block *ob, tree expr, int ix)
 	 reader side from adding a second '*', we omit it here.  */
       const char *str = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (expr));
       if (strlen (str) > 1 && str[0] == '*')
-	output_string (ob, ob->main_stream, &str[1]);
+	lto_output_string (ob, ob->main_stream, &str[1]);
       else
-	output_string (ob, ob->main_stream, NULL);
+	lto_output_string (ob, ob->main_stream, NULL);
     }
   else
-    output_string (ob, ob->main_stream, NULL);
+    lto_output_string (ob, ob->main_stream, NULL);
 }
 
 
@@ -1745,7 +1740,7 @@  output_gimple_stmt (struct output_block *ob, gimple stmt)
       lto_output_uleb128_stream (ob->main_stream, gimple_asm_noutputs (stmt));
       lto_output_uleb128_stream (ob->main_stream, gimple_asm_nclobbers (stmt));
       lto_output_uleb128_stream (ob->main_stream, gimple_asm_nlabels (stmt));
-      output_string (ob, ob->main_stream, gimple_asm_string (stmt));
+      lto_output_string (ob, ob->main_stream, gimple_asm_string (stmt));
       /* Fallthru  */
 
     case GIMPLE_ASSIGN:
@@ -2342,7 +2337,7 @@  write_global_references (struct output_block *ob,
 /* Write all the streams in an lto_out_decl_state STATE using
    output block OB and output stream OUT_STREAM.  */
 
-static void
+void
 lto_output_decl_state_streams (struct output_block *ob,
 			       struct lto_out_decl_state *state)
 {
@@ -2356,7 +2351,7 @@  lto_output_decl_state_streams (struct output_block *ob,
 /* Write all the references in an lto_out_decl_state STATE using
    output block OB and output stream OUT_STREAM.  */
 
-static void
+void
 lto_output_decl_state_refs (struct output_block *ob,
 			    struct lto_output_stream *out_stream,
 			    struct lto_out_decl_state *state)
diff --git a/gcc/lto-streamer.h b/gcc/lto-streamer.h
index d8669a2..c7c865d 100644
--- a/gcc/lto-streamer.h
+++ b/gcc/lto-streamer.h
@@ -862,6 +862,9 @@  extern struct data_in *lto_data_in_create (struct lto_file_decl_data *,
 				    const char *, unsigned,
 				    VEC(ld_plugin_symbol_resolution_t,heap) *);
 extern void lto_data_in_delete (struct data_in *);
+extern const char *lto_input_string (struct data_in *,
+				     struct lto_input_block *);
+extern void lto_input_data_block (struct lto_input_block *, void *, size_t);
 
 
 /* In lto-streamer-out.c  */
@@ -870,6 +873,18 @@  extern struct output_block *create_output_block (enum lto_section_type);
 extern void destroy_output_block (struct output_block *);
 extern void lto_output_tree (struct output_block *, tree, bool);
 extern void produce_asm (struct output_block *ob, tree fn);
+extern void lto_output_string (struct output_block *,
+			       struct lto_output_stream *,
+			       const char *);
+extern void lto_output_string_with_length (struct output_block *,
+			                   struct lto_output_stream *,
+			                   const char *,
+			                   unsigned int);
+void lto_output_decl_state_streams (struct output_block *,
+				    struct lto_out_decl_state *);
+void lto_output_decl_state_refs (struct output_block *,
+			         struct lto_output_stream *,
+			         struct lto_out_decl_state *);
 
 
 /* In lto-cgraph.c  */