aboutsummaryrefslogtreecommitdiff
path: root/gcc/c-pch.c
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>2003-10-22 15:44:44 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>2003-10-22 15:44:44 +0000
commit926a822f2b78aad8c5891d0d902841209600fe99 (patch)
tree1a6dbe5bea06865aae3d1b5d46785e906be278b6 /gcc/c-pch.c
parent57d01e696f51a8761f0feb35e82f93f37f341b0f (diff)
downloadgcc-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.c14
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. */