diff options
author | Mark Mitchell <mark@codesourcery.com> | 2003-10-22 15:44:44 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 2003-10-22 15:44:44 +0000 |
commit | 926a822f2b78aad8c5891d0d902841209600fe99 (patch) | |
tree | 1a6dbe5bea06865aae3d1b5d46785e906be278b6 /gcc/c-pch.c | |
parent | 57d01e696f51a8761f0feb35e82f93f37f341b0f (diff) | |
download | gcc-926a822f2b78aad8c5891d0d902841209600fe99.zip gcc-926a822f2b78aad8c5891d0d902841209600fe99.tar.gz gcc-926a822f2b78aad8c5891d0d902841209600fe99.tar.bz2 |
c-pch.c (struct c_pch_validity): Add pch_init field.
* c-pch.c (struct c_pch_validity): Add pch_init field.
(pch_init): Set it.
(c_common_valid_pch): Check it.
(get_ident): Bump the PCH version number.
From-SVN: r72804
Diffstat (limited to 'gcc/c-pch.c')
-rw-r--r-- | gcc/c-pch.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/gcc/c-pch.c b/gcc/c-pch.c index 7fea10c..f7830b2 100644 --- a/gcc/c-pch.c +++ b/gcc/c-pch.c @@ -48,6 +48,7 @@ struct c_pch_validity unsigned char target_machine_length; unsigned char version_length; unsigned char debug_info_type; + void (*pch_init) (void); }; struct c_pch_header @@ -113,6 +114,7 @@ pch_init (void) v.version_length = strlen (version_string); v.debug_info_type = write_symbols; + v.pch_init = &pch_init; if (fwrite (get_ident(), IDENT_LENGTH, 1, f) != 1 || fwrite (&v, sizeof (v), 1, f) != 1 || fwrite (host_machine, v.host_machine_length, 1, f) != 1 @@ -285,6 +287,18 @@ c_common_valid_pch (cpp_reader *pfile, const char *name, int fd) return 2; } + /* If the text segment was not loaded at the same address as it was + when the PCH file was created, function pointers loaded from the + PCH will not be valid. We could in theory remap all the function + pointers, but no support for that exists at present. */ + if (v.pch_init != &pch_init) + { + if (cpp_get_options (pfile)->warn_invalid_pch) + cpp_error (pfile, DL_WARNING, + "%s: had text segment at different address", name); + return 2; + } + /* Check the preprocessor macros are the same as when the PCH was generated. */ |