1 1.1 mrg /* Part of CPP library. (Precompiled header reading/writing.) 2 1.1.1.2 mrg Copyright (C) 2000-2024 Free Software Foundation, Inc. 3 1.1 mrg 4 1.1 mrg This program is free software; you can redistribute it and/or modify it 5 1.1 mrg under the terms of the GNU General Public License as published by the 6 1.1 mrg Free Software Foundation; either version 3, or (at your option) any 7 1.1 mrg later version. 8 1.1 mrg 9 1.1 mrg This program is distributed in the hope that it will be useful, 10 1.1 mrg but WITHOUT ANY WARRANTY; without even the implied warranty of 11 1.1 mrg MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 1.1 mrg GNU General Public License for more details. 13 1.1 mrg 14 1.1 mrg You should have received a copy of the GNU General Public License 15 1.1 mrg along with this program; see the file COPYING3. If not see 16 1.1 mrg <http://www.gnu.org/licenses/>. */ 17 1.1 mrg 18 1.1 mrg #include "config.h" 19 1.1 mrg #include "system.h" 20 1.1 mrg #include "cpplib.h" 21 1.1 mrg #include "internal.h" 22 1.1 mrg #include "hashtab.h" 23 1.1 mrg #include "mkdeps.h" 24 1.1 mrg 25 1.1 mrg static int write_macdef (cpp_reader *, cpp_hashnode *, void *); 26 1.1 mrg static int save_idents (cpp_reader *, cpp_hashnode *, void *); 27 1.1 mrg static hashval_t hashmem (const void *, size_t); 28 1.1 mrg static hashval_t cpp_string_hash (const void *); 29 1.1 mrg static int cpp_string_eq (const void *, const void *); 30 1.1 mrg static int count_defs (cpp_reader *, cpp_hashnode *, void *); 31 1.1 mrg static int comp_hashnodes (const void *, const void *); 32 1.1 mrg static int collect_ht_nodes (cpp_reader *, cpp_hashnode *, void *); 33 1.1 mrg static int write_defs (cpp_reader *, cpp_hashnode *, void *); 34 1.1 mrg static int save_macros (cpp_reader *, cpp_hashnode *, void *); 35 1.1 mrg static int _cpp_save_pushed_macros (cpp_reader *, FILE *); 36 1.1 mrg static int _cpp_restore_pushed_macros (cpp_reader *, FILE *); 37 1.1 mrg 38 1.1 mrg /* This structure represents a macro definition on disk. */ 39 1.1 mrg struct macrodef_struct 40 1.1 mrg { 41 1.1 mrg unsigned int definition_length; 42 1.1 mrg unsigned short name_length; 43 1.1 mrg unsigned short flags; 44 1.1 mrg }; 45 1.1 mrg 46 1.1 mrg /* This is how we write out a macro definition. 47 1.1 mrg Suitable for being called by cpp_forall_identifiers. */ 48 1.1 mrg 49 1.1 mrg static int 50 1.1 mrg write_macdef (cpp_reader *pfile, cpp_hashnode *hn, void *file_p) 51 1.1 mrg { 52 1.1 mrg FILE *f = (FILE *) file_p; 53 1.1 mrg bool is_void = false; 54 1.1 mrg switch (hn->type) 55 1.1 mrg { 56 1.1 mrg case NT_VOID: 57 1.1 mrg if (! (hn->flags & NODE_POISONED)) 58 1.1 mrg return 1; 59 1.1 mrg is_void = true; 60 1.1 mrg goto poisoned; 61 1.1 mrg 62 1.1 mrg case NT_BUILTIN_MACRO: 63 1.1 mrg return 1; 64 1.1 mrg 65 1.1 mrg case NT_USER_MACRO: 66 1.1 mrg if (hn->value.macro->kind != cmk_assert) 67 1.1 mrg { 68 1.1 mrg poisoned: 69 1.1 mrg struct macrodef_struct s; 70 1.1 mrg const unsigned char *defn; 71 1.1 mrg 72 1.1 mrg s.name_length = NODE_LEN (hn); 73 1.1 mrg s.flags = hn->flags & NODE_POISONED; 74 1.1 mrg 75 1.1 mrg if (is_void) 76 1.1 mrg { 77 1.1 mrg defn = NODE_NAME (hn); 78 1.1 mrg s.definition_length = s.name_length; 79 1.1 mrg } 80 1.1 mrg else 81 1.1 mrg { 82 1.1 mrg defn = cpp_macro_definition (pfile, hn); 83 1.1 mrg s.definition_length = ustrlen (defn); 84 1.1 mrg } 85 1.1 mrg 86 1.1 mrg if (fwrite (&s, sizeof (s), 1, f) != 1 87 1.1 mrg || fwrite (defn, 1, s.definition_length, f) != s.definition_length) 88 1.1 mrg { 89 1.1 mrg cpp_errno (pfile, CPP_DL_ERROR, 90 1.1 mrg "while writing precompiled header"); 91 1.1 mrg return 0; 92 1.1 mrg } 93 1.1 mrg } 94 1.1 mrg return 1; 95 1.1 mrg 96 1.1 mrg default: 97 1.1 mrg abort (); 98 1.1 mrg } 99 1.1 mrg } 100 1.1 mrg 101 1.1 mrg /* This structure records the names of the defined macros. 102 1.1 mrg It's also used as a callback structure for size_initial_idents 103 1.1 mrg and save_idents. */ 104 1.1 mrg 105 1.1 mrg struct cpp_savedstate 106 1.1 mrg { 107 1.1 mrg /* A hash table of the defined identifiers. */ 108 1.1 mrg htab_t definedhash; 109 1.1 mrg /* The size of the definitions of those identifiers (the size of 110 1.1 mrg 'definedstrs'). */ 111 1.1 mrg size_t hashsize; 112 1.1 mrg /* Number of definitions */ 113 1.1 mrg size_t n_defs; 114 1.1 mrg /* Array of definitions. In cpp_write_pch_deps it is used for sorting. */ 115 1.1 mrg cpp_hashnode **defs; 116 1.1 mrg /* Space for the next definition. Definitions are null-terminated 117 1.1 mrg strings. */ 118 1.1 mrg unsigned char *definedstrs; 119 1.1 mrg }; 120 1.1 mrg 121 1.1 mrg /* Save this identifier into the state: put it in the hash table, 122 1.1 mrg put the definition in 'definedstrs'. */ 123 1.1 mrg 124 1.1 mrg static int 125 1.1 mrg save_idents (cpp_reader *pfile ATTRIBUTE_UNUSED, cpp_hashnode *hn, void *ss_p) 126 1.1 mrg { 127 1.1 mrg struct cpp_savedstate *const ss = (struct cpp_savedstate *)ss_p; 128 1.1 mrg 129 1.1 mrg if (hn->type != NT_VOID) 130 1.1 mrg { 131 1.1 mrg struct cpp_string news; 132 1.1 mrg void **slot; 133 1.1 mrg 134 1.1 mrg news.len = NODE_LEN (hn); 135 1.1 mrg news.text= NODE_NAME (hn); 136 1.1 mrg slot = htab_find_slot (ss->definedhash, &news, INSERT); 137 1.1 mrg if (*slot == NULL) 138 1.1 mrg { 139 1.1 mrg struct cpp_string *sp; 140 1.1 mrg unsigned char *text; 141 1.1 mrg 142 1.1 mrg sp = XNEW (struct cpp_string); 143 1.1 mrg *slot = sp; 144 1.1 mrg 145 1.1 mrg sp->len = NODE_LEN (hn); 146 1.1 mrg sp->text = text = XNEWVEC (unsigned char, NODE_LEN (hn)); 147 1.1 mrg memcpy (text, NODE_NAME (hn), NODE_LEN (hn)); 148 1.1 mrg } 149 1.1 mrg } 150 1.1 mrg 151 1.1 mrg return 1; 152 1.1 mrg } 153 1.1 mrg 154 1.1 mrg /* Hash some memory in a generic way. */ 155 1.1 mrg 156 1.1 mrg static hashval_t 157 1.1 mrg hashmem (const void *p_p, size_t sz) 158 1.1 mrg { 159 1.1 mrg const unsigned char *p = (const unsigned char *)p_p; 160 1.1 mrg size_t i; 161 1.1 mrg hashval_t h; 162 1.1 mrg 163 1.1 mrg h = 0; 164 1.1 mrg for (i = 0; i < sz; i++) 165 1.1 mrg h = h * 67 - (*p++ - 113); 166 1.1 mrg return h; 167 1.1 mrg } 168 1.1 mrg 169 1.1 mrg /* Hash a cpp string for the hashtable machinery. */ 170 1.1 mrg 171 1.1 mrg static hashval_t 172 1.1 mrg cpp_string_hash (const void *a_p) 173 1.1 mrg { 174 1.1 mrg const struct cpp_string *a = (const struct cpp_string *) a_p; 175 1.1 mrg return hashmem (a->text, a->len); 176 1.1 mrg } 177 1.1 mrg 178 1.1 mrg /* Compare two cpp strings for the hashtable machinery. */ 179 1.1 mrg 180 1.1 mrg static int 181 1.1 mrg cpp_string_eq (const void *a_p, const void *b_p) 182 1.1 mrg { 183 1.1 mrg const struct cpp_string *a = (const struct cpp_string *) a_p; 184 1.1 mrg const struct cpp_string *b = (const struct cpp_string *) b_p; 185 1.1 mrg return (a->len == b->len 186 1.1 mrg && memcmp (a->text, b->text, a->len) == 0); 187 1.1 mrg } 188 1.1 mrg 189 1.1 mrg /* Free memory associated with cpp_string. */ 190 1.1 mrg 191 1.1 mrg static void 192 1.1 mrg cpp_string_free (void *a_p) 193 1.1 mrg { 194 1.1 mrg struct cpp_string *a = (struct cpp_string *) a_p; 195 1.1 mrg free ((void *) a->text); 196 1.1 mrg free (a); 197 1.1 mrg } 198 1.1 mrg 199 1.1 mrg /* Save the current definitions of the cpp_reader for dependency 200 1.1 mrg checking purposes. When writing a precompiled header, this should 201 1.1 mrg be called at the same point in the compilation as cpp_valid_state 202 1.1 mrg would be called when reading the precompiled header back in. */ 203 1.1 mrg 204 1.1 mrg int 205 1.1 mrg cpp_save_state (cpp_reader *r, FILE *f) 206 1.1 mrg { 207 1.1 mrg /* Save the list of non-void identifiers for the dependency checking. */ 208 1.1 mrg r->savedstate = XNEW (struct cpp_savedstate); 209 1.1 mrg r->savedstate->definedhash = htab_create (100, cpp_string_hash, 210 1.1 mrg cpp_string_eq, cpp_string_free); 211 1.1 mrg cpp_forall_identifiers (r, save_idents, r->savedstate); 212 1.1 mrg 213 1.1 mrg /* Write out the list of defined identifiers. */ 214 1.1 mrg cpp_forall_identifiers (r, write_macdef, f); 215 1.1 mrg 216 1.1 mrg return 0; 217 1.1 mrg } 218 1.1 mrg 219 1.1 mrg /* Calculate the 'hashsize' field of the saved state. */ 220 1.1 mrg 221 1.1 mrg static int 222 1.1 mrg count_defs (cpp_reader *pfile ATTRIBUTE_UNUSED, cpp_hashnode *hn, void *ss_p) 223 1.1 mrg { 224 1.1 mrg struct cpp_savedstate *const ss = (struct cpp_savedstate *)ss_p; 225 1.1 mrg 226 1.1 mrg switch (hn->type) 227 1.1 mrg { 228 1.1 mrg case NT_BUILTIN_MACRO: 229 1.1 mrg return 1; 230 1.1 mrg 231 1.1 mrg case NT_USER_MACRO: 232 1.1 mrg if (hn->value.macro->kind == cmk_assert) 233 1.1 mrg return 1; 234 1.1 mrg 235 1.1 mrg /* fall through. */ 236 1.1 mrg 237 1.1 mrg case NT_VOID: 238 1.1 mrg { 239 1.1 mrg struct cpp_string news; 240 1.1 mrg void **slot; 241 1.1 mrg 242 1.1 mrg news.len = NODE_LEN (hn); 243 1.1 mrg news.text = NODE_NAME (hn); 244 1.1 mrg slot = (void **) htab_find (ss->definedhash, &news); 245 1.1 mrg if (slot == NULL) 246 1.1 mrg { 247 1.1 mrg ss->hashsize += NODE_LEN (hn) + 1; 248 1.1 mrg ss->n_defs += 1; 249 1.1 mrg } 250 1.1 mrg } 251 1.1 mrg return 1; 252 1.1 mrg 253 1.1 mrg default: 254 1.1 mrg abort (); 255 1.1 mrg } 256 1.1 mrg } 257 1.1 mrg 258 1.1 mrg /* Collect the identifiers into the state's string table. */ 259 1.1 mrg static int 260 1.1 mrg write_defs (cpp_reader *pfile ATTRIBUTE_UNUSED, cpp_hashnode *hn, void *ss_p) 261 1.1 mrg { 262 1.1 mrg struct cpp_savedstate *const ss = (struct cpp_savedstate *)ss_p; 263 1.1 mrg 264 1.1 mrg switch (hn->type) 265 1.1 mrg { 266 1.1 mrg case NT_BUILTIN_MACRO: 267 1.1 mrg return 1; 268 1.1 mrg 269 1.1 mrg case NT_USER_MACRO: 270 1.1 mrg if (hn->value.macro->kind == cmk_assert) 271 1.1 mrg return 1; 272 1.1 mrg 273 1.1 mrg /* fall through. */ 274 1.1 mrg 275 1.1 mrg case NT_VOID: 276 1.1 mrg { 277 1.1 mrg struct cpp_string news; 278 1.1 mrg void **slot; 279 1.1 mrg 280 1.1 mrg news.len = NODE_LEN (hn); 281 1.1 mrg news.text = NODE_NAME (hn); 282 1.1 mrg slot = (void **) htab_find (ss->definedhash, &news); 283 1.1 mrg if (slot == NULL) 284 1.1 mrg { 285 1.1 mrg ss->defs[ss->n_defs] = hn; 286 1.1 mrg ss->n_defs += 1; 287 1.1 mrg } 288 1.1 mrg } 289 1.1 mrg return 1; 290 1.1 mrg 291 1.1 mrg default: 292 1.1 mrg abort (); 293 1.1 mrg } 294 1.1 mrg } 295 1.1 mrg 296 1.1 mrg /* Comparison function for qsort. The arguments point to pointers of 297 1.1 mrg type ht_hashnode *. */ 298 1.1 mrg static int 299 1.1 mrg comp_hashnodes (const void *px, const void *py) 300 1.1 mrg { 301 1.1 mrg cpp_hashnode *x = *(cpp_hashnode **) px; 302 1.1 mrg cpp_hashnode *y = *(cpp_hashnode **) py; 303 1.1 mrg return ustrcmp (NODE_NAME (x), NODE_NAME (y)); 304 1.1 mrg } 305 1.1 mrg 306 1.1 mrg /* Write out the remainder of the dependency information. This should be 307 1.1 mrg called after the PCH is ready to be saved. */ 308 1.1 mrg 309 1.1 mrg int 310 1.1 mrg cpp_write_pch_deps (cpp_reader *r, FILE *f) 311 1.1 mrg { 312 1.1 mrg struct macrodef_struct z; 313 1.1 mrg struct cpp_savedstate *const ss = r->savedstate; 314 1.1 mrg unsigned char *definedstrs; 315 1.1 mrg size_t i; 316 1.1 mrg 317 1.1 mrg /* Collect the list of identifiers which have been seen and 318 1.1 mrg weren't defined to anything previously. */ 319 1.1 mrg ss->hashsize = 0; 320 1.1 mrg ss->n_defs = 0; 321 1.1 mrg cpp_forall_identifiers (r, count_defs, ss); 322 1.1 mrg 323 1.1 mrg ss->defs = XNEWVEC (cpp_hashnode *, ss->n_defs); 324 1.1 mrg ss->n_defs = 0; 325 1.1 mrg cpp_forall_identifiers (r, write_defs, ss); 326 1.1 mrg 327 1.1 mrg /* Sort the list, copy it into a buffer, and write it out. */ 328 1.1 mrg qsort (ss->defs, ss->n_defs, sizeof (cpp_hashnode *), &comp_hashnodes); 329 1.1 mrg definedstrs = ss->definedstrs = XNEWVEC (unsigned char, ss->hashsize); 330 1.1 mrg for (i = 0; i < ss->n_defs; ++i) 331 1.1 mrg { 332 1.1 mrg size_t len = NODE_LEN (ss->defs[i]); 333 1.1 mrg memcpy (definedstrs, NODE_NAME (ss->defs[i]), len + 1); 334 1.1 mrg definedstrs += len + 1; 335 1.1 mrg } 336 1.1 mrg 337 1.1 mrg memset (&z, 0, sizeof (z)); 338 1.1 mrg z.definition_length = ss->hashsize; 339 1.1 mrg if (fwrite (&z, sizeof (z), 1, f) != 1 340 1.1 mrg || fwrite (ss->definedstrs, ss->hashsize, 1, f) != 1) 341 1.1 mrg { 342 1.1 mrg cpp_errno (r, CPP_DL_ERROR, "while writing precompiled header"); 343 1.1 mrg return -1; 344 1.1 mrg } 345 1.1 mrg free (ss->definedstrs); 346 1.1 mrg free (ss->defs); 347 1.1 mrg htab_delete (ss->definedhash); 348 1.1 mrg 349 1.1 mrg /* Free the saved state. */ 350 1.1 mrg free (ss); 351 1.1 mrg r->savedstate = NULL; 352 1.1 mrg 353 1.1 mrg /* Save the next value of __COUNTER__. */ 354 1.1 mrg if (fwrite (&r->counter, sizeof (r->counter), 1, f) != 1) 355 1.1 mrg { 356 1.1 mrg cpp_errno (r, CPP_DL_ERROR, "while writing precompiled header"); 357 1.1 mrg return -1; 358 1.1 mrg } 359 1.1 mrg 360 1.1 mrg return 0; 361 1.1 mrg } 362 1.1 mrg 363 1.1 mrg /* Write out the definitions of the preprocessor, in a form suitable for 364 1.1 mrg cpp_read_state. */ 365 1.1 mrg 366 1.1 mrg int 367 1.1 mrg cpp_write_pch_state (cpp_reader *r, FILE *f) 368 1.1 mrg { 369 1.1 mrg if (!r->deps) 370 1.1 mrg r->deps = deps_init (); 371 1.1 mrg 372 1.1 mrg if (deps_save (r->deps, f) != 0) 373 1.1 mrg { 374 1.1 mrg cpp_errno (r, CPP_DL_ERROR, "while writing precompiled header"); 375 1.1 mrg return -1; 376 1.1 mrg } 377 1.1 mrg 378 1.1 mrg if (! _cpp_save_file_entries (r, f)) 379 1.1 mrg { 380 1.1 mrg cpp_errno (r, CPP_DL_ERROR, "while writing precompiled header"); 381 1.1 mrg return -1; 382 1.1 mrg } 383 1.1 mrg 384 1.1 mrg /* Save the next __COUNTER__ value. When we include a precompiled header, 385 1.1 mrg we need to start at the offset we would have if the header had been 386 1.1 mrg included normally. */ 387 1.1 mrg if (fwrite (&r->counter, sizeof (r->counter), 1, f) != 1) 388 1.1 mrg { 389 1.1 mrg cpp_errno (r, CPP_DL_ERROR, "while writing precompiled header"); 390 1.1 mrg return -1; 391 1.1 mrg } 392 1.1 mrg 393 1.1 mrg /* Write saved macros. */ 394 1.1 mrg if (! _cpp_save_pushed_macros (r, f)) 395 1.1 mrg { 396 1.1 mrg cpp_errno (r, CPP_DL_ERROR, "while writing precompiled header"); 397 1.1 mrg return -1; 398 1.1 mrg } 399 1.1 mrg 400 1.1 mrg return 0; 401 1.1 mrg } 402 1.1 mrg 403 1.1 mrg static int 404 1.1 mrg _cpp_restore_pushed_macros (cpp_reader *r, FILE *f) 405 1.1 mrg { 406 1.1 mrg size_t count_saved = 0; 407 1.1 mrg size_t i; 408 1.1 mrg struct def_pragma_macro *p; 409 1.1 mrg size_t nlen; 410 1.1 mrg uchar *defn; 411 1.1 mrg size_t defnlen; 412 1.1 mrg 413 1.1 mrg if (fread (&count_saved, sizeof (count_saved), 1, f) != 1) 414 1.1 mrg return 0; 415 1.1 mrg if (! count_saved) 416 1.1 mrg return 1; 417 1.1 mrg for (i = 0; i < count_saved; i++) 418 1.1 mrg { 419 1.1 mrg if (fread (&nlen, sizeof (nlen), 1, f) != 1) 420 1.1 mrg return 0; 421 1.1 mrg p = XNEW (struct def_pragma_macro); 422 1.1 mrg memset (p, 0, sizeof (struct def_pragma_macro)); 423 1.1 mrg p->name = XNEWVAR (char, nlen + 1); 424 1.1 mrg p->name[nlen] = 0; 425 1.1 mrg if (fread (p->name, nlen, 1, f) != 1) 426 1.1 mrg return 0; 427 1.1 mrg if (fread (&defnlen, sizeof (defnlen), 1, f) != 1) 428 1.1 mrg return 0; 429 1.1 mrg if (defnlen == 0) 430 1.1 mrg p->is_undef = 1; 431 1.1 mrg else 432 1.1 mrg { 433 1.1 mrg defn = XNEWVEC (uchar, defnlen + 1); 434 1.1 mrg defn[defnlen] = 0; 435 1.1 mrg 436 1.1 mrg if (fread (defn, defnlen, 1, f) != 1) 437 1.1 mrg return 0; 438 1.1 mrg 439 1.1 mrg p->definition = defn; 440 1.1 mrg if (fread (&(p->line), sizeof (location_t), 1, f) != 1) 441 1.1 mrg return 0; 442 1.1 mrg defnlen = 0; 443 1.1 mrg if (fread (&defnlen, sizeof (defnlen), 1, f) != 1) 444 1.1 mrg return 0; 445 1.1 mrg p->syshdr = ((defnlen & 1) != 0 ? 1 : 0); 446 1.1 mrg p->used = ((defnlen & 2) != 0 ? 1 : 0); 447 1.1 mrg } 448 1.1 mrg 449 1.1 mrg p->next = r->pushed_macros; 450 1.1 mrg r->pushed_macros = p; 451 1.1 mrg } 452 1.1 mrg return 1; 453 1.1 mrg } 454 1.1 mrg 455 1.1 mrg static int 456 1.1 mrg _cpp_save_pushed_macros (cpp_reader *r, FILE *f) 457 1.1 mrg { 458 1.1 mrg size_t count_saved = 0; 459 1.1 mrg size_t i; 460 1.1 mrg struct def_pragma_macro *p,**pp; 461 1.1 mrg size_t defnlen; 462 1.1 mrg 463 1.1 mrg /* Get count. */ 464 1.1 mrg p = r->pushed_macros; 465 1.1 mrg while (p != NULL) 466 1.1 mrg { 467 1.1 mrg count_saved++; 468 1.1 mrg p = p->next; 469 1.1 mrg } 470 1.1 mrg if (fwrite (&count_saved, sizeof (count_saved), 1, f) != 1) 471 1.1 mrg return 0; 472 1.1 mrg if (!count_saved) 473 1.1 mrg return 1; 474 1.1 mrg 475 1.1 mrg pp = (struct def_pragma_macro **) alloca (sizeof (struct def_pragma_macro *) 476 1.1 mrg * count_saved); 477 1.1 mrg /* Store them in reverse order. */ 478 1.1 mrg p = r->pushed_macros; 479 1.1 mrg i = count_saved; 480 1.1 mrg while (p != NULL) 481 1.1 mrg { 482 1.1 mrg --i; 483 1.1 mrg pp[i] = p; 484 1.1 mrg p = p->next; 485 1.1 mrg } 486 1.1 mrg for (i = 0; i < count_saved; i++) 487 1.1 mrg { 488 1.1 mrg defnlen = strlen (pp[i]->name); 489 1.1 mrg if (fwrite (&defnlen, sizeof (size_t), 1, f) != 1 490 1.1 mrg || fwrite (pp[i]->name, defnlen, 1, f) != 1) 491 1.1 mrg return 0; 492 1.1 mrg if (pp[i]->is_undef) 493 1.1 mrg { 494 1.1 mrg defnlen = 0; 495 1.1 mrg if (fwrite (&defnlen, sizeof (size_t), 1, f) != 1) 496 1.1 mrg return 0; 497 1.1 mrg } 498 1.1 mrg else 499 1.1 mrg { 500 1.1 mrg defnlen = ustrlen (pp[i]->definition); 501 1.1 mrg if (fwrite (&defnlen, sizeof (size_t), 1, f) != 1 502 1.1 mrg || fwrite (pp[i]->definition, defnlen, 1, f) != 1) 503 1.1 mrg return 0; 504 1.1 mrg if (fwrite (&(pp[i]->line), sizeof (location_t), 1, f) != 1) 505 1.1 mrg return 0; 506 1.1 mrg defnlen = 0; 507 1.1 mrg defnlen |= (pp[i]->syshdr != 0 ? 1 : 0); 508 1.1 mrg defnlen |= (pp[i]->used != 0 ? 2 : 0); 509 1.1 mrg if (fwrite (&defnlen, sizeof (defnlen), 1, f) != 1) 510 1.1 mrg return 0; 511 1.1 mrg } 512 1.1 mrg } 513 1.1 mrg return 1; 514 1.1 mrg } 515 1.1 mrg 516 1.1 mrg 517 1.1 mrg /* Data structure to transform hash table nodes into a sorted list */ 518 1.1 mrg 519 1.1 mrg struct ht_node_list 520 1.1 mrg { 521 1.1 mrg /* Array of nodes */ 522 1.1 mrg cpp_hashnode **defs; 523 1.1 mrg /* Number of nodes in the array */ 524 1.1 mrg size_t n_defs; 525 1.1 mrg /* Size of the allocated array */ 526 1.1 mrg size_t asize; 527 1.1 mrg }; 528 1.1 mrg 529 1.1 mrg /* Callback for collecting identifiers from hash table */ 530 1.1 mrg 531 1.1 mrg static int 532 1.1 mrg collect_ht_nodes (cpp_reader *pfile ATTRIBUTE_UNUSED, cpp_hashnode *hn, 533 1.1 mrg void *nl_p) 534 1.1 mrg { 535 1.1 mrg struct ht_node_list *const nl = (struct ht_node_list *)nl_p; 536 1.1 mrg 537 1.1 mrg if (hn->type != NT_VOID || hn->flags & NODE_POISONED) 538 1.1 mrg { 539 1.1 mrg if (nl->n_defs == nl->asize) 540 1.1 mrg { 541 1.1 mrg nl->asize *= 2; 542 1.1 mrg nl->defs = XRESIZEVEC (cpp_hashnode *, nl->defs, nl->asize); 543 1.1 mrg } 544 1.1 mrg 545 1.1 mrg nl->defs[nl->n_defs] = hn; 546 1.1 mrg ++nl->n_defs; 547 1.1 mrg } 548 1.1 mrg return 1; 549 1.1 mrg } 550 1.1 mrg 551 1.1 mrg 552 1.1 mrg /* Return nonzero if FD is a precompiled header which is consistent 553 1.1 mrg with the preprocessor's current definitions. It will be consistent 554 1.1 mrg when: 555 1.1 mrg 556 1.1 mrg - anything that was defined just before the PCH was generated 557 1.1 mrg is defined the same way now; and 558 1.1 mrg - anything that was not defined then, but is defined now, was not 559 1.1 mrg used by the PCH. 560 1.1 mrg 561 1.1 mrg NAME is used to print warnings if `warn_invalid_pch' is set in the 562 1.1 mrg reader's flags. 563 1.1 mrg */ 564 1.1 mrg 565 1.1 mrg int 566 1.1 mrg cpp_valid_state (cpp_reader *r, const char *name, int fd) 567 1.1 mrg { 568 1.1 mrg struct macrodef_struct m; 569 1.1 mrg size_t namebufsz = 256; 570 1.1 mrg unsigned char *namebuf = XNEWVEC (unsigned char, namebufsz); 571 1.1 mrg unsigned char *undeftab = NULL; 572 1.1 mrg struct ht_node_list nl = { 0, 0, 0 }; 573 1.1 mrg unsigned char *first, *last; 574 1.1 mrg unsigned int i; 575 1.1 mrg unsigned int counter; 576 1.1 mrg 577 1.1 mrg /* Read in the list of identifiers that must be defined 578 1.1 mrg Check that they are defined in the same way. */ 579 1.1 mrg for (;;) 580 1.1 mrg { 581 1.1 mrg cpp_hashnode *h; 582 1.1 mrg const unsigned char *newdefn; 583 1.1 mrg 584 1.1 mrg if (read (fd, &m, sizeof (m)) != sizeof (m)) 585 1.1 mrg goto error; 586 1.1 mrg 587 1.1 mrg if (m.name_length == 0) 588 1.1 mrg break; 589 1.1 mrg 590 1.1 mrg /* If this file is already preprocessed, there won't be any 591 1.1 mrg macros defined, and that's OK. */ 592 1.1 mrg if (CPP_OPTION (r, preprocessed)) 593 1.1 mrg { 594 1.1 mrg if (lseek (fd, m.definition_length, SEEK_CUR) == -1) 595 1.1 mrg goto error; 596 1.1 mrg continue; 597 1.1 mrg } 598 1.1 mrg 599 1.1 mrg if (m.definition_length > namebufsz) 600 1.1 mrg { 601 1.1 mrg free (namebuf); 602 1.1 mrg namebufsz = m.definition_length + 256; 603 1.1 mrg namebuf = XNEWVEC (unsigned char, namebufsz); 604 1.1 mrg } 605 1.1 mrg 606 1.1 mrg if ((size_t)read (fd, namebuf, m.definition_length) 607 1.1 mrg != m.definition_length) 608 1.1 mrg goto error; 609 1.1 mrg 610 1.1 mrg h = cpp_lookup (r, namebuf, m.name_length); 611 1.1 mrg if (m.flags & NODE_POISONED 612 1.1 mrg || h->flags & NODE_POISONED) 613 1.1 mrg { 614 1.1 mrg if (CPP_OPTION (r, warn_invalid_pch)) 615 1.1 mrg cpp_warning_syshdr (r, CPP_W_INVALID_PCH, 616 1.1 mrg "%s: not used because `%.*s' is poisoned", 617 1.1 mrg name, m.name_length, namebuf); 618 1.1 mrg goto fail; 619 1.1 mrg } 620 1.1 mrg 621 1.1 mrg if (h->type == NT_VOID) 622 1.1 mrg { 623 1.1 mrg /* It's ok if __GCC_HAVE_DWARF2_CFI_ASM becomes undefined, 624 1.1 mrg as in, when the PCH file is created with -g and we're 625 1.1 mrg attempting to use it without -g. Restoring the PCH file 626 1.1 mrg is supposed to bring in this definition *and* enable the 627 1.1 mrg generation of call frame information, so that precompiled 628 1.1 mrg definitions that take this macro into account, to decide 629 1.1 mrg what asm to emit, won't issue .cfi directives when the 630 1.1 mrg compiler doesn't. */ 631 1.1 mrg if (!(h->flags & NODE_USED) 632 1.1 mrg && m.name_length == sizeof ("__GCC_HAVE_DWARF2_CFI_ASM") - 1 633 1.1 mrg && !memcmp (namebuf, "__GCC_HAVE_DWARF2_CFI_ASM", m.name_length)) 634 1.1 mrg continue; 635 1.1 mrg 636 1.1 mrg if (CPP_OPTION (r, warn_invalid_pch)) 637 1.1 mrg cpp_warning_syshdr (r, CPP_W_INVALID_PCH, 638 1.1 mrg "%s: not used because `%.*s' not defined", 639 1.1 mrg name, m.name_length, namebuf); 640 1.1 mrg goto fail; 641 1.1 mrg } 642 1.1 mrg 643 1.1 mrg newdefn = cpp_macro_definition (r, h); 644 1.1 mrg 645 1.1 mrg if (m.definition_length != ustrlen (newdefn) 646 1.1 mrg || memcmp (namebuf, newdefn, m.definition_length) != 0) 647 1.1 mrg { 648 1.1 mrg if (CPP_OPTION (r, warn_invalid_pch)) 649 1.1 mrg cpp_warning_syshdr (r, CPP_W_INVALID_PCH, 650 1.1 mrg "%s: not used because `%.*s' defined as `%s' not `%.*s'", 651 1.1 mrg name, m.name_length, namebuf, newdefn + m.name_length, 652 1.1 mrg m.definition_length - m.name_length, 653 1.1 mrg namebuf + m.name_length); 654 1.1 mrg goto fail; 655 1.1 mrg } 656 1.1 mrg } 657 1.1 mrg free (namebuf); 658 1.1 mrg namebuf = NULL; 659 1.1 mrg 660 1.1 mrg /* Read in the list of identifiers that must not be defined. 661 1.1 mrg Check that they really aren't. */ 662 1.1 mrg undeftab = XNEWVEC (unsigned char, m.definition_length); 663 1.1 mrg if ((size_t) read (fd, undeftab, m.definition_length) != m.definition_length) 664 1.1 mrg goto error; 665 1.1 mrg 666 1.1 mrg /* Collect identifiers from the current hash table. */ 667 1.1 mrg nl.n_defs = 0; 668 1.1 mrg nl.asize = 10; 669 1.1 mrg nl.defs = XNEWVEC (cpp_hashnode *, nl.asize); 670 1.1 mrg cpp_forall_identifiers (r, &collect_ht_nodes, &nl); 671 1.1 mrg qsort (nl.defs, nl.n_defs, sizeof (cpp_hashnode *), &comp_hashnodes); 672 1.1 mrg 673 1.1 mrg /* Loop through nl.defs and undeftab, both of which are sorted lists. 674 1.1 mrg There should be no matches. */ 675 1.1 mrg first = undeftab; 676 1.1 mrg last = undeftab + m.definition_length; 677 1.1 mrg i = 0; 678 1.1 mrg 679 1.1 mrg while (first < last && i < nl.n_defs) 680 1.1 mrg { 681 1.1 mrg int cmp = ustrcmp (first, NODE_NAME (nl.defs[i])); 682 1.1 mrg 683 1.1 mrg if (cmp < 0) 684 1.1 mrg first += ustrlen (first) + 1; 685 1.1 mrg else if (cmp > 0) 686 1.1 mrg ++i; 687 1.1 mrg else 688 1.1 mrg { 689 1.1 mrg if (CPP_OPTION (r, warn_invalid_pch)) 690 1.1 mrg cpp_warning_syshdr (r, CPP_W_INVALID_PCH, 691 1.1 mrg "%s: not used because `%s' is defined", 692 1.1 mrg name, first); 693 1.1 mrg goto fail; 694 1.1 mrg } 695 1.1 mrg } 696 1.1 mrg 697 1.1 mrg free(nl.defs); 698 1.1 mrg nl.defs = NULL; 699 1.1 mrg free (undeftab); 700 1.1 mrg undeftab = NULL; 701 1.1 mrg 702 1.1 mrg /* Read in the next value of __COUNTER__. 703 1.1 mrg Check that (a) __COUNTER__ was not used in the pch or (b) __COUNTER__ 704 1.1 mrg has not been used in this translation unit. */ 705 1.1 mrg if (read (fd, &counter, sizeof (counter)) != sizeof (counter)) 706 1.1 mrg goto error; 707 1.1 mrg if (counter && r->counter) 708 1.1 mrg { 709 1.1 mrg if (CPP_OPTION (r, warn_invalid_pch)) 710 1.1 mrg cpp_warning_syshdr (r, CPP_W_INVALID_PCH, 711 1.1 mrg "%s: not used because `__COUNTER__' is invalid", 712 1.1 mrg name); 713 1.1 mrg goto fail; 714 1.1 mrg } 715 1.1 mrg 716 1.1 mrg /* We win! */ 717 1.1 mrg return 0; 718 1.1 mrg 719 1.1 mrg error: 720 1.1 mrg cpp_errno (r, CPP_DL_ERROR, "while reading precompiled header"); 721 1.1 mrg 722 1.1 mrg fail: 723 1.1 mrg free (namebuf); 724 1.1 mrg free (undeftab); 725 1.1 mrg free (nl.defs); 726 1.1 mrg return 1; 727 1.1 mrg } 728 1.1 mrg 729 1.1 mrg /* Save all the existing macros. */ 730 1.1 mrg 731 1.1 mrg struct save_macro_data 732 1.1 mrg { 733 1.1 mrg uchar **defns; 734 1.1 mrg size_t count; 735 1.1 mrg size_t array_size; 736 1.1 mrg char **saved_pragmas; 737 1.1 mrg }; 738 1.1 mrg 739 1.1 mrg /* Save the definition of a single macro, so that it will persist 740 1.1 mrg across a PCH restore. Because macro data is in GCed memory, which 741 1.1 mrg will be blown away by PCH, it must be temporarily copied to 742 1.1 mrg malloced memory. (The macros will refer to identifier nodes which 743 1.1 mrg are also GCed and so on, so the copying is done by turning them 744 1.1 mrg into self-contained strings.) The assumption is that most macro 745 1.1 mrg definitions will come from the PCH file, not from the compilation 746 1.1 mrg before the PCH file is loaded, so it doesn't matter that this is 747 1.1 mrg a little expensive. 748 1.1 mrg 749 1.1 mrg It would reduce the cost even further if macros defined in the PCH 750 1.1 mrg file were not saved in this way, but this is not done (yet), except 751 1.1 mrg for builtins, and for #assert by default. */ 752 1.1 mrg 753 1.1 mrg static int 754 1.1 mrg save_macros (cpp_reader *r, cpp_hashnode *h, void *data_p) 755 1.1 mrg { 756 1.1 mrg struct save_macro_data *data = (struct save_macro_data *)data_p; 757 1.1 mrg 758 1.1 mrg if (cpp_user_macro_p (h)) 759 1.1 mrg { 760 1.1 mrg if (data->count == data->array_size) 761 1.1 mrg { 762 1.1 mrg data->array_size *= 2; 763 1.1 mrg data->defns = XRESIZEVEC (uchar *, data->defns, (data->array_size)); 764 1.1 mrg } 765 1.1 mrg 766 1.1 mrg const uchar * defn = cpp_macro_definition (r, h); 767 1.1 mrg size_t defnlen = ustrlen (defn); 768 1.1 mrg 769 1.1 mrg data->defns[data->count] = (uchar *) xmemdup (defn, defnlen, defnlen + 2); 770 1.1 mrg data->defns[data->count][defnlen] = '\n'; 771 1.1 mrg data->count++; 772 1.1 mrg } 773 1.1 mrg 774 1.1 mrg return 1; 775 1.1 mrg } 776 1.1 mrg 777 1.1 mrg /* Prepare to restore the state, by saving the currently-defined 778 1.1 mrg macros in 'data'. */ 779 1.1 mrg 780 1.1 mrg void 781 1.1 mrg cpp_prepare_state (cpp_reader *r, struct save_macro_data **data) 782 1.1 mrg { 783 1.1 mrg struct save_macro_data *d = XNEW (struct save_macro_data); 784 1.1 mrg 785 1.1 mrg d->array_size = 512; 786 1.1 mrg d->defns = XNEWVEC (uchar *, d->array_size); 787 1.1 mrg d->count = 0; 788 1.1 mrg cpp_forall_identifiers (r, save_macros, d); 789 1.1 mrg d->saved_pragmas = _cpp_save_pragma_names (r); 790 1.1 mrg *data = d; 791 1.1 mrg } 792 1.1 mrg 793 1.1 mrg /* Given a precompiled header that was previously determined to be valid, 794 1.1 mrg apply all its definitions (and undefinitions) to the current state. 795 1.1 mrg DEPNAME is passed to deps_restore. */ 796 1.1 mrg 797 1.1 mrg int 798 1.1 mrg cpp_read_state (cpp_reader *r, const char *name, FILE *f, 799 1.1 mrg struct save_macro_data *data) 800 1.1 mrg { 801 1.1 mrg size_t i; 802 1.1 mrg struct lexer_state old_state; 803 1.1 mrg unsigned int counter; 804 1.1 mrg 805 1.1 mrg /* Restore spec_nodes, which will be full of references to the old 806 1.1 mrg hashtable entries and so will now be invalid. */ 807 1.1 mrg { 808 1.1 mrg struct spec_nodes *s = &r->spec_nodes; 809 1.1 mrg s->n_defined = cpp_lookup (r, DSC("defined")); 810 1.1 mrg s->n_true = cpp_lookup (r, DSC("true")); 811 1.1 mrg s->n_false = cpp_lookup (r, DSC("false")); 812 1.1 mrg s->n__VA_ARGS__ = cpp_lookup (r, DSC("__VA_ARGS__")); 813 1.1 mrg s->n__VA_OPT__ = cpp_lookup (r, DSC("__VA_OPT__")); 814 1.1 mrg } 815 1.1 mrg 816 1.1 mrg old_state = r->state; 817 1.1 mrg r->state.in_directive = 1; 818 1.1 mrg r->state.prevent_expansion = 1; 819 1.1 mrg r->state.angled_headers = 0; 820 1.1 mrg 821 1.1 mrg /* Run through the carefully-saved macros, insert them. */ 822 1.1 mrg for (i = 0; i < data->count; i++) 823 1.1 mrg { 824 1.1 mrg cpp_hashnode *h; 825 1.1 mrg size_t namelen; 826 1.1 mrg uchar *defn; 827 1.1 mrg 828 1.1 mrg namelen = ustrcspn (data->defns[i], "( \n"); 829 1.1 mrg h = cpp_lookup (r, data->defns[i], namelen); 830 1.1 mrg defn = data->defns[i] + namelen; 831 1.1 mrg 832 1.1 mrg /* The PCH file is valid, so we know that if there is a definition 833 1.1 mrg from the PCH file it must be the same as the one we had 834 1.1 mrg originally, and so do not need to restore it. */ 835 1.1 mrg if (h->type == NT_VOID) 836 1.1 mrg { 837 1.1 mrg if (cpp_push_buffer (r, defn, ustrchr (defn, '\n') - defn, true) 838 1.1 mrg != NULL) 839 1.1 mrg { 840 1.1 mrg _cpp_clean_line (r); 841 1.1.1.2 mrg 842 1.1.1.2 mrg /* ??? Using r->line_table->highest_line is not ideal here, but we 843 1.1.1.2 mrg do need to use some location that is relative to the new line 844 1.1.1.2 mrg map just loaded, not the old one that was in effect when these 845 1.1.1.2 mrg macros were lexed. The proper fix is to remember the file name 846 1.1.1.2 mrg and line number where each macro was defined, and then add 847 1.1.1.2 mrg these locations into the new line map. See PR105608. */ 848 1.1.1.2 mrg if (!_cpp_create_definition (r, h, r->line_table->highest_line)) 849 1.1 mrg abort (); 850 1.1 mrg _cpp_pop_buffer (r); 851 1.1 mrg } 852 1.1 mrg else 853 1.1 mrg abort (); 854 1.1 mrg } 855 1.1 mrg 856 1.1 mrg free (data->defns[i]); 857 1.1 mrg } 858 1.1 mrg r->state = old_state; 859 1.1 mrg 860 1.1 mrg _cpp_restore_pragma_names (r, data->saved_pragmas); 861 1.1 mrg 862 1.1 mrg free (data); 863 1.1 mrg 864 1.1 mrg if (deps_restore (r->deps, f, CPP_OPTION (r, restore_pch_deps) ? name : NULL) 865 1.1 mrg != 0) 866 1.1 mrg goto error; 867 1.1 mrg 868 1.1 mrg if (! _cpp_read_file_entries (r, f)) 869 1.1 mrg goto error; 870 1.1 mrg 871 1.1 mrg if (fread (&counter, sizeof (counter), 1, f) != 1) 872 1.1 mrg goto error; 873 1.1 mrg 874 1.1 mrg if (!r->counter) 875 1.1 mrg r->counter = counter; 876 1.1 mrg 877 1.1 mrg /* Read pushed macros. */ 878 1.1 mrg if (! _cpp_restore_pushed_macros (r, f)) 879 1.1 mrg goto error; 880 1.1 mrg return 0; 881 1.1 mrg 882 1.1 mrg error: 883 1.1 mrg cpp_errno (r, CPP_DL_ERROR, "while reading precompiled header"); 884 1.1 mrg return -1; 885 1.1 mrg } 886