3fd30b88df
2005-05-18 Geoffrey Keating <geoffk@apple.com> * dummy-checksum.c: New. * genchecksum.c: New. * c.opt (print_pch_checksum): New flag. * c-pch.c (struct c_pch_validity): Make much shorter. (no_checksum): New. (host_machine): Remove. (target_machine): Remove. (get_ident): Change PCH version number. (pch_init): When -fverbose-asm, print out the compiler fingerprint. Don't put triplets or version string in PCH validity data. Do put the compiler checksum in the validity data. (c_common_valid_pch): Don't check triplets or version string. Do check checksum. (c_common_print_pch_checksum): New. * c-opts.c (c_common_handle_option): Add OPT_print_pch_checksum. Print fingerprint with -v. * c-common.h (c_common_print_pch_checksum): New. (executable_checksum): New. * Makefile.in (STAGEMOVESTUFF): Add cc1*-dummy, *-checksum.c. (cc1-dummy): New rule. (cc1-checksum.c): New rule. (cc1-checksum.o): New rule. (cc1): Add checksum support. (build/genchecksum): New. (build/genchecksum.o): New. (dummy-checksum.o): New. (genobjnames): Add genchecksum.o. (mostlyclean): Remove *-checksum.c. (gnucompare): Add libgcc to list of directories checked. Make comparison problems in libgcc/ and with checksum files only be warnings. * doc/invoke.texi (Precompiled Headers): Remove caution. Document that it must be the exact same binary. Add a few known-safe flags to the list. In cp/: 2005-05-18 Geoffrey Keating <geoffk@apple.com> * Make-lang.in (cc1plus-dummy): New. (cc1plus-checksum.c): New. (cc1plus-checksum.o): New. (cc1plus): Add cc1plus-checksum.o. In objc/: 2005-05-18 Geoffrey Keating <geoffk@apple.com> * Make-lang.in (cc1obj-dummy): New. (cc1obj-checksum.c): New. (cc1obj-checksum.o): New. (cc1obj): Add cc1obj-checksum.o. In objcp/: 2005-05-18 Geoffrey Keating <geoffk@apple.com> * Make-lang.in (cc1objplus-dummy): New. (cc1objplus-checksum.c): New. (cc1objplus-checksum.o): New. (cc1objplus): Add cc1objplus-checksum.o. From-SVN: r99928
78 lines
1.8 KiB
C
78 lines
1.8 KiB
C
/* Generate checksums of executables for PCH validation
|
|
Copyright (C) 2005
|
|
Free Software Foundation, Inc.
|
|
|
|
This file is part of GCC.
|
|
|
|
GCC is free software; you can redistribute it and/or modify it under
|
|
the terms of the GNU General Public License as published by the Free
|
|
Software Foundation; either version 2, or (at your option) any later
|
|
version.
|
|
|
|
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with GCC; see the file COPYING. If not, write to the Free
|
|
Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
|
02111-1307, USA. */
|
|
|
|
#include "bconfig.h"
|
|
#include "system.h"
|
|
#include "md5.h"
|
|
|
|
static void
|
|
usage (void)
|
|
{
|
|
fputs ("Usage: genchecksums <filename>\n", stderr);
|
|
}
|
|
|
|
static void
|
|
dosum (const char *file)
|
|
{
|
|
FILE *f;
|
|
unsigned char result[16];
|
|
int i;
|
|
|
|
f = fopen (file, "rb");
|
|
if (!f)
|
|
{
|
|
fprintf (stderr, "opening %s: %s\n", file, xstrerror (errno));
|
|
exit (1);
|
|
}
|
|
|
|
/* Some executable formats have timestamps in the first 16 bytes, yuck. */
|
|
if (fseek (f, 16, SEEK_SET) != 0)
|
|
{
|
|
fprintf (stderr, "seeking in %s: %s\n", file, xstrerror (errno));
|
|
exit (1);
|
|
}
|
|
|
|
if (md5_stream (f, result) != 0
|
|
|| fclose (f) != 0)
|
|
{
|
|
fprintf (stderr, "reading %s: %s\n", file, xstrerror (errno));
|
|
exit (1);
|
|
}
|
|
|
|
fputs ("const unsigned char executable_checksum[16] = { ", stdout);
|
|
for (i = 0; i < 16; i++)
|
|
printf ("%#02x%s", result[i], i == 15 ? " };\n" : ", ");
|
|
}
|
|
|
|
int
|
|
main (int argc, char ** argv)
|
|
{
|
|
if (argc != 2)
|
|
{
|
|
usage ();
|
|
return 1;
|
|
}
|
|
|
|
dosum (argv[1]);
|
|
|
|
return 0;
|
|
}
|