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
This commit is contained in:
Mark Mitchell 2003-10-22 15:44:44 +00:00 committed by Mark Mitchell
parent 57d01e696f
commit 926a822f2b
2 changed files with 21 additions and 0 deletions

View File

@ -1,3 +1,10 @@
2003-10-22 Mark Mitchell <mark@codesourcery.com>
* 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.
2003-10-22 David Taylor <dtaylor@emc.com> 2003-10-22 David Taylor <dtaylor@emc.com>
PR debug/12500 PR debug/12500

View File

@ -48,6 +48,7 @@ struct c_pch_validity
unsigned char target_machine_length; unsigned char target_machine_length;
unsigned char version_length; unsigned char version_length;
unsigned char debug_info_type; unsigned char debug_info_type;
void (*pch_init) (void);
}; };
struct c_pch_header struct c_pch_header
@ -113,6 +114,7 @@ pch_init (void)
v.version_length = strlen (version_string); v.version_length = strlen (version_string);
v.debug_info_type = write_symbols; v.debug_info_type = write_symbols;
v.pch_init = &pch_init;
if (fwrite (get_ident(), IDENT_LENGTH, 1, f) != 1 if (fwrite (get_ident(), IDENT_LENGTH, 1, f) != 1
|| fwrite (&v, sizeof (v), 1, f) != 1 || fwrite (&v, sizeof (v), 1, f) != 1
|| fwrite (host_machine, v.host_machine_length, 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; 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 /* Check the preprocessor macros are the same as when the PCH was
generated. */ generated. */