]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
c-pch.c (struct c_pch_validity): Add pch_init field.
authorMark Mitchell <mark@codesourcery.com>
Wed, 22 Oct 2003 15:44:44 +0000 (15:44 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Wed, 22 Oct 2003 15:44:44 +0000 (15:44 +0000)
* 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

gcc/ChangeLog
gcc/c-pch.c

index a6f80eae810f8979515476b3cef2e9b3a9558d07..580c3d01da143ab2c098a96ba9689945c287025d 100644 (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>
 
        PR debug/12500
index 7fea10c5fe32e27ef7b062b1db11d29cc54e61ff..f7830b2ba279cb6ae864d454686f4f7a0d9c62da 100644 (file)
@@ -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.  */