Patchwork Make asm_out_file a text write-only file again

login
register
mail settings
Submitter Steven Bosscher
Date July 13, 2012, 7:30 p.m.
Message ID <CABu31nN9=mV4UqxZpNM8bjp0hP9PrFXFz2p4rmw=V8_Q-E+RCA@mail.gmail.com>
Download mbox | patch
Permalink /patch/170948/
State New
Headers show

Comments

Steven Bosscher - July 13, 2012, 7:30 p.m.
Hello,

Geoff had to make asm_out_file read-write for PCH [1], because at the
time it was necessary to read back anything written to asm_out_file
and store it in the PCH. This didn't work on mingw32 so Danny Smith
made the file binary [2] with the b modifier (but according to 'man
fopen', only for non-POSIX).

This is not necessary anymore. The attached patch changes things back
to the pre-r61136 state of things.

Bootstrapped&tested on x86_64-unknown-linux-gnu. OK for trunk?

Ciao!
Steven

[1] http://gcc.gnu.org/viewcvs/trunk/gcc/toplev.c?limit_changes=0&r1=61136&r2=61135&pathrev=61136)
[2] http://gcc.gnu.org/viewcvs/trunk/gcc/toplev.c?r1=82643&r2=82642&pathrev=82643


gcc/
        * toplev.c (init_asm_output): Open asm_out_file in 'w' mode.

c-family/
        * c-pch.c (CHECK_NO_ASM_OUT_DURING_PCH): Do not define.
        Remove code conditional on it.
Ian Taylor - July 14, 2012, 4:25 p.m.
On Fri, Jul 13, 2012 at 12:30 PM, Steven Bosscher <stevenb.gcc@gmail.com> wrote:
>
> gcc/
>         * toplev.c (init_asm_output): Open asm_out_file in 'w' mode.
>
> c-family/
>         * c-pch.c (CHECK_NO_ASM_OUT_DURING_PCH): Do not define.
>         Remove code conditional on it.

This is OK.

Thanks.

Ian

Patch

Index: toplev.c
===================================================================
--- toplev.c    (revision 189469)
+++ toplev.c    (working copy)
@@ -908,7 +908,7 @@  init_asm_output (const char *name)
       if (!strcmp (asm_file_name, "-"))
        asm_out_file = stdout;
       else
-       asm_out_file = fopen (asm_file_name, "w+b");
+       asm_out_file = fopen (asm_file_name, "w");
       if (asm_out_file == 0)
        fatal_error ("can%'t open %s for writing: %m", asm_file_name);
     }
Index: c-family/c-pch.c
===================================================================
--- c-family/c-pch.c    (revision 189469)
+++ c-family/c-pch.c    (working copy)
@@ -35,24 +35,6 @@  along with GCC; see the file COPYING3.
 #include "opts.h"
 #include "timevar.h"

-/* PCH was introduced before unit-at-a-time became the only supported
-   compilation mode.  To exactly replay the content parsed at PCH generate
-   time, anything written to asm_out_file was read back in and stored in
-   the PCH, and written back out to asm_out_file while reading a PCH.
-
-   Nowadays, ideally no action by a front end should never result in output
-   to asm_out_file, and front-end files should not include output.h.  For
-   now assert that nothing is written to asm_out_file while a PCH is being
-   generated.  Before GCC 4.8 is released, this code should be removed.
-   FIXME.  */
-#define CHECK_NO_ASM_OUT_DURING_PCH
-#ifdef CHECK_NO_ASM_OUT_DURING_PCH
-extern FILE *asm_out_file;
-
-/* The position in the assembler output file when pch_init was called.  */
-static long asm_file_startpos;
-#endif
-
 /* This is a list of flag variables that must match exactly, and their
    names for the error message.  The possible values for *flag_var must
    fit in a 'signed char'.  */
@@ -112,9 +94,7 @@  get_ident (void)
 }

 /* Prepare to write a PCH file, if one is being written.  This is
-   called at the start of compilation.
-
-   Also, print out the executable checksum if -fverbose-asm is in effect.  */
+   called at the start of compilation.  */

 void
 pch_init (void)
@@ -153,10 +133,6 @@  pch_init (void)
       || fwrite (target_validity, v.target_data_length, 1, f) != 1)
     fatal_error ("can%'t write to %s: %m", pch_file);

-#ifdef CHECK_NO_ASM_OUT_DURING_PCH
-  asm_file_startpos = ftell (asm_out_file);
-#endif
-
   /* Let the debugging format deal with the PCHness.  */
   (*debug_hooks->handle_pch) (0);

@@ -177,10 +153,6 @@  c_common_write_pch (void)

   cpp_write_pch_deps (parse_in, pch_outfile);

-#ifdef CHECK_NO_ASM_OUT_DURING_PCH
-  gcc_assert (ftell (asm_out_file) - asm_file_startpos == 0);
-#endif
-
   gt_pch_save (pch_outfile);

   timevar_push (TV_PCH_CPP_SAVE);