gdb: Fix issue with Clang CLI macros
[binutils-gdb.git] / gdb / dwarf2 / macro.c
1 /* Read DWARF macro information
2
3 Copyright (C) 1994-2022 Free Software Foundation, Inc.
4
5 Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology,
6 Inc. with support from Florida State University (under contract
7 with the Ada Joint Program Office), and Silicon Graphics, Inc.
8 Initial contribution by Brent Benson, Harris Computer Systems, Inc.,
9 based on Fred Fish's (Cygnus Support) implementation of DWARF 1
10 support.
11
12 This file is part of GDB.
13
14 This program is free software; you can redistribute it and/or modify
15 it under the terms of the GNU General Public License as published by
16 the Free Software Foundation; either version 3 of the License, or
17 (at your option) any later version.
18
19 This program is distributed in the hope that it will be useful,
20 but WITHOUT ANY WARRANTY; without even the implied warranty of
21 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 GNU General Public License for more details.
23
24 You should have received a copy of the GNU General Public License
25 along with this program. If not, see <http://www.gnu.org/licenses/>. */
26
27 #include "defs.h"
28 #include "dwarf2/read.h"
29 #include "dwarf2/leb.h"
30 #include "dwarf2/expr.h"
31 #include "dwarf2/line-header.h"
32 #include "dwarf2/section.h"
33 #include "dwarf2/macro.h"
34 #include "dwarf2/dwz.h"
35 #include "buildsym.h"
36 #include "macrotab.h"
37 #include "complaints.h"
38 #include "objfiles.h"
39
40 static void
41 dwarf2_macro_malformed_definition_complaint (const char *arg1)
42 {
43 complaint (_("macro debug info contains a "
44 "malformed macro definition:\n`%s'"),
45 arg1);
46 }
47
48 static struct macro_source_file *
49 macro_start_file (buildsym_compunit *builder,
50 int file, int line,
51 struct macro_source_file *current_file,
52 const struct line_header *lh)
53 {
54 /* File name relative to the compilation directory of this source file. */
55 const file_entry *fe = lh->file_name_at (file);
56 std::string file_name;
57
58 if (fe != nullptr)
59 file_name = lh->file_file_name (*fe);
60 else
61 {
62 /* The compiler produced a bogus file number. We can at least
63 record the macro definitions made in the file, even if we
64 won't be able to find the file by name. */
65 complaint (_("bad file number in macro information (%d)"),
66 file);
67
68 file_name = string_printf ("<bad macro file number %d>", file);
69 }
70
71 if (! current_file)
72 {
73 /* Note: We don't create a macro table for this compilation unit
74 at all until we actually get a filename. */
75 struct macro_table *macro_table = builder->get_macro_table ();
76
77 /* If we have no current file, then this must be the start_file
78 directive for the compilation unit's main source file. */
79 current_file = macro_set_main (macro_table, file_name.c_str ());
80 macro_define_special (macro_table);
81 }
82 else
83 current_file = macro_include (current_file, line, file_name.c_str ());
84
85 return current_file;
86 }
87
88 static const char *
89 consume_improper_spaces (const char *p, const char *body)
90 {
91 if (*p == ' ')
92 {
93 complaint (_("macro definition contains spaces "
94 "in formal argument list:\n`%s'"),
95 body);
96
97 while (*p == ' ')
98 p++;
99 }
100
101 return p;
102 }
103
104
105 static void
106 parse_macro_definition (struct macro_source_file *file, int line,
107 const char *body)
108 {
109 const char *p;
110
111 /* The body string takes one of two forms. For object-like macro
112 definitions, it should be:
113
114 <macro name> " " <definition>
115
116 For function-like macro definitions, it should be:
117
118 <macro name> "() " <definition>
119 or
120 <macro name> "(" <arg name> ( "," <arg name> ) * ") " <definition>
121
122 Spaces may appear only where explicitly indicated, and in the
123 <definition>.
124
125 The Dwarf 2 spec says that an object-like macro's name is always
126 followed by a space, but versions of GCC around March 2002 omit
127 the space when the macro's definition is the empty string.
128
129 The Dwarf 2 spec says that there should be no spaces between the
130 formal arguments in a function-like macro's formal argument list,
131 but versions of GCC around March 2002 include spaces after the
132 commas. */
133
134
135 /* Find the extent of the macro name. The macro name is terminated
136 by either a space or null character (for an object-like macro) or
137 an opening paren (for a function-like macro). */
138 for (p = body; *p; p++)
139 if (*p == ' ' || *p == '(')
140 break;
141
142 if (*p == ' ' || *p == '\0')
143 {
144 /* It's an object-like macro. */
145 int name_len = p - body;
146 std::string name (body, name_len);
147 const char *replacement;
148
149 if (*p == ' ')
150 replacement = body + name_len + 1;
151 else
152 {
153 dwarf2_macro_malformed_definition_complaint (body);
154 replacement = body + name_len;
155 }
156
157 macro_define_object (file, line, name.c_str (), replacement);
158 }
159 else if (*p == '(')
160 {
161 /* It's a function-like macro. */
162 std::string name (body, p - body);
163 int argc = 0;
164 int argv_size = 1;
165 char **argv = XNEWVEC (char *, argv_size);
166
167 p++;
168
169 p = consume_improper_spaces (p, body);
170
171 /* Parse the formal argument list. */
172 while (*p && *p != ')')
173 {
174 /* Find the extent of the current argument name. */
175 const char *arg_start = p;
176
177 while (*p && *p != ',' && *p != ')' && *p != ' ')
178 p++;
179
180 if (! *p || p == arg_start)
181 dwarf2_macro_malformed_definition_complaint (body);
182 else
183 {
184 /* Make sure argv has room for the new argument. */
185 if (argc >= argv_size)
186 {
187 argv_size *= 2;
188 argv = XRESIZEVEC (char *, argv, argv_size);
189 }
190
191 argv[argc++] = savestring (arg_start, p - arg_start);
192 }
193
194 p = consume_improper_spaces (p, body);
195
196 /* Consume the comma, if present. */
197 if (*p == ',')
198 {
199 p++;
200
201 p = consume_improper_spaces (p, body);
202 }
203 }
204
205 if (*p == ')')
206 {
207 p++;
208
209 if (*p == ' ')
210 /* Perfectly formed definition, no complaints. */
211 macro_define_function (file, line, name.c_str (),
212 argc, (const char **) argv,
213 p + 1);
214 else if (*p == '\0')
215 {
216 /* Complain, but do define it. */
217 dwarf2_macro_malformed_definition_complaint (body);
218 macro_define_function (file, line, name.c_str (),
219 argc, (const char **) argv,
220 p);
221 }
222 else
223 /* Just complain. */
224 dwarf2_macro_malformed_definition_complaint (body);
225 }
226 else
227 /* Just complain. */
228 dwarf2_macro_malformed_definition_complaint (body);
229
230 {
231 int i;
232
233 for (i = 0; i < argc; i++)
234 xfree (argv[i]);
235 }
236 xfree (argv);
237 }
238 else
239 dwarf2_macro_malformed_definition_complaint (body);
240 }
241
242 /* Skip some bytes from BYTES according to the form given in FORM.
243 Returns the new pointer. */
244
245 static const gdb_byte *
246 skip_form_bytes (bfd *abfd, const gdb_byte *bytes, const gdb_byte *buffer_end,
247 enum dwarf_form form,
248 unsigned int offset_size,
249 const struct dwarf2_section_info *section)
250 {
251 unsigned int bytes_read;
252
253 switch (form)
254 {
255 case DW_FORM_data1:
256 case DW_FORM_flag:
257 ++bytes;
258 break;
259
260 case DW_FORM_data2:
261 bytes += 2;
262 break;
263
264 case DW_FORM_data4:
265 bytes += 4;
266 break;
267
268 case DW_FORM_data8:
269 bytes += 8;
270 break;
271
272 case DW_FORM_data16:
273 bytes += 16;
274 break;
275
276 case DW_FORM_string:
277 read_direct_string (abfd, bytes, &bytes_read);
278 bytes += bytes_read;
279 break;
280
281 case DW_FORM_sec_offset:
282 case DW_FORM_strp:
283 case DW_FORM_GNU_strp_alt:
284 bytes += offset_size;
285 break;
286
287 case DW_FORM_block:
288 bytes += read_unsigned_leb128 (abfd, bytes, &bytes_read);
289 bytes += bytes_read;
290 break;
291
292 case DW_FORM_block1:
293 bytes += 1 + read_1_byte (abfd, bytes);
294 break;
295 case DW_FORM_block2:
296 bytes += 2 + read_2_bytes (abfd, bytes);
297 break;
298 case DW_FORM_block4:
299 bytes += 4 + read_4_bytes (abfd, bytes);
300 break;
301
302 case DW_FORM_addrx:
303 case DW_FORM_sdata:
304 case DW_FORM_strx:
305 case DW_FORM_udata:
306 case DW_FORM_GNU_addr_index:
307 case DW_FORM_GNU_str_index:
308 bytes = gdb_skip_leb128 (bytes, buffer_end);
309 if (bytes == NULL)
310 {
311 section->overflow_complaint ();
312 return NULL;
313 }
314 break;
315
316 case DW_FORM_implicit_const:
317 break;
318
319 default:
320 {
321 complaint (_("invalid form 0x%x in `%s'"),
322 form, section->get_name ());
323 return NULL;
324 }
325 }
326
327 return bytes;
328 }
329
330 /* A helper for dwarf_decode_macros that handles skipping an unknown
331 opcode. Returns an updated pointer to the macro data buffer; or,
332 on error, issues a complaint and returns NULL. */
333
334 static const gdb_byte *
335 skip_unknown_opcode (unsigned int opcode,
336 const gdb_byte **opcode_definitions,
337 const gdb_byte *mac_ptr, const gdb_byte *mac_end,
338 bfd *abfd,
339 unsigned int offset_size,
340 const struct dwarf2_section_info *section)
341 {
342 unsigned int bytes_read, i;
343 unsigned long arg;
344 const gdb_byte *defn;
345
346 if (opcode_definitions[opcode] == NULL)
347 {
348 complaint (_("unrecognized DW_MACINFO or DW_MACRO opcode 0x%x"),
349 opcode);
350 return NULL;
351 }
352
353 defn = opcode_definitions[opcode];
354 arg = read_unsigned_leb128 (abfd, defn, &bytes_read);
355 defn += bytes_read;
356
357 for (i = 0; i < arg; ++i)
358 {
359 mac_ptr = skip_form_bytes (abfd, mac_ptr, mac_end,
360 (enum dwarf_form) defn[i], offset_size,
361 section);
362 if (mac_ptr == NULL)
363 {
364 /* skip_form_bytes already issued the complaint. */
365 return NULL;
366 }
367 }
368
369 return mac_ptr;
370 }
371
372 /* A helper function which parses the header of a macro section.
373 If the macro section is the extended (for now called "GNU") type,
374 then this updates *OFFSET_SIZE. Returns a pointer to just after
375 the header, or issues a complaint and returns NULL on error. */
376
377 static const gdb_byte *
378 dwarf_parse_macro_header (const gdb_byte **opcode_definitions,
379 bfd *abfd,
380 const gdb_byte *mac_ptr,
381 unsigned int *offset_size,
382 int section_is_gnu)
383 {
384 memset (opcode_definitions, 0, 256 * sizeof (gdb_byte *));
385
386 if (section_is_gnu)
387 {
388 unsigned int version, flags;
389
390 version = read_2_bytes (abfd, mac_ptr);
391 if (version != 4 && version != 5)
392 {
393 complaint (_("unrecognized version `%d' in .debug_macro section"),
394 version);
395 return NULL;
396 }
397 mac_ptr += 2;
398
399 flags = read_1_byte (abfd, mac_ptr);
400 ++mac_ptr;
401 *offset_size = (flags & 1) ? 8 : 4;
402
403 if ((flags & 2) != 0)
404 /* We don't need the line table offset. */
405 mac_ptr += *offset_size;
406
407 /* Vendor opcode descriptions. */
408 if ((flags & 4) != 0)
409 {
410 unsigned int i, count;
411
412 count = read_1_byte (abfd, mac_ptr);
413 ++mac_ptr;
414 for (i = 0; i < count; ++i)
415 {
416 unsigned int opcode, bytes_read;
417 unsigned long arg;
418
419 opcode = read_1_byte (abfd, mac_ptr);
420 ++mac_ptr;
421 opcode_definitions[opcode] = mac_ptr;
422 arg = read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
423 mac_ptr += bytes_read;
424 mac_ptr += arg;
425 }
426 }
427 }
428
429 return mac_ptr;
430 }
431
432 /* A helper for dwarf_decode_macros that handles the GNU extensions,
433 including DW_MACRO_import. */
434
435 static void
436 dwarf_decode_macro_bytes (dwarf2_per_objfile *per_objfile,
437 buildsym_compunit *builder,
438 bfd *abfd,
439 const gdb_byte *mac_ptr, const gdb_byte *mac_end,
440 struct macro_source_file *current_file,
441 const struct line_header *lh,
442 const struct dwarf2_section_info *section,
443 int section_is_gnu, int section_is_dwz,
444 unsigned int offset_size,
445 struct dwarf2_section_info *str_section,
446 struct dwarf2_section_info *str_offsets_section,
447 gdb::optional<ULONGEST> str_offsets_base,
448 htab_t include_hash, struct dwarf2_cu *cu)
449 {
450 struct objfile *objfile = per_objfile->objfile;
451 enum dwarf_macro_record_type macinfo_type;
452 int at_commandline;
453 const gdb_byte *opcode_definitions[256];
454
455 mac_ptr = dwarf_parse_macro_header (opcode_definitions, abfd, mac_ptr,
456 &offset_size, section_is_gnu);
457 if (mac_ptr == NULL)
458 {
459 /* We already issued a complaint. */
460 return;
461 }
462
463 /* Determines if GDB is still before first DW_MACINFO_start_file. If true
464 GDB is still reading the definitions from command line. First
465 DW_MACINFO_start_file will need to be ignored as it was already executed
466 to create CURRENT_FILE for the main source holding also the command line
467 definitions. On first met DW_MACINFO_start_file this flag is reset to
468 normally execute all the remaining DW_MACINFO_start_file macinfos. */
469
470 at_commandline = 1;
471
472 do
473 {
474 /* Do we at least have room for a macinfo type byte? */
475 if (mac_ptr >= mac_end)
476 {
477 section->overflow_complaint ();
478 break;
479 }
480
481 macinfo_type = (enum dwarf_macro_record_type) read_1_byte (abfd, mac_ptr);
482 mac_ptr++;
483
484 /* Note that we rely on the fact that the corresponding GNU and
485 DWARF constants are the same. */
486 DIAGNOSTIC_PUSH
487 DIAGNOSTIC_IGNORE_SWITCH_DIFFERENT_ENUM_TYPES
488 switch (macinfo_type)
489 {
490 /* A zero macinfo type indicates the end of the macro
491 information. */
492 case 0:
493 break;
494
495 case DW_MACRO_define:
496 case DW_MACRO_undef:
497 case DW_MACRO_define_strp:
498 case DW_MACRO_undef_strp:
499 case DW_MACRO_define_sup:
500 case DW_MACRO_undef_sup:
501 {
502 unsigned int bytes_read;
503 int line;
504 const char *body;
505 int is_define;
506
507 line = read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
508 mac_ptr += bytes_read;
509
510 if (macinfo_type == DW_MACRO_define
511 || macinfo_type == DW_MACRO_undef)
512 {
513 body = read_direct_string (abfd, mac_ptr, &bytes_read);
514 mac_ptr += bytes_read;
515 }
516 else
517 {
518 LONGEST str_offset;
519
520 str_offset = read_offset (abfd, mac_ptr, offset_size);
521 mac_ptr += offset_size;
522
523 if (macinfo_type == DW_MACRO_define_sup
524 || macinfo_type == DW_MACRO_undef_sup
525 || section_is_dwz)
526 {
527 dwz_file *dwz = dwarf2_get_dwz_file (per_objfile->per_bfd,
528 true);
529
530 body = dwz->read_string (objfile, str_offset);
531 }
532 else
533 body = per_objfile->per_bfd->str.read_string (objfile,
534 str_offset,
535 "DW_FORM_strp");
536 }
537
538 is_define = (macinfo_type == DW_MACRO_define
539 || macinfo_type == DW_MACRO_define_strp
540 || macinfo_type == DW_MACRO_define_sup);
541 if (! current_file)
542 {
543 /* DWARF violation as no main source is present. */
544 complaint (_("debug info with no main source gives macro %s "
545 "on line %d: %s"),
546 is_define ? _("definition") : _("undefinition"),
547 line, body);
548 break;
549 }
550 if ((line == 0 && !at_commandline)
551 || (line != 0 && at_commandline))
552 complaint (_("debug info gives %s macro %s with %s line %d: %s"),
553 at_commandline ? _("command-line") : _("in-file"),
554 is_define ? _("definition") : _("undefinition"),
555 line == 0 ? _("zero") : _("non-zero"), line, body);
556
557 if (body == NULL)
558 {
559 /* Fedora's rpm-build's "debugedit" binary
560 corrupted .debug_macro sections.
561
562 For more info, see
563 https://bugzilla.redhat.com/show_bug.cgi?id=1708786 */
564 complaint (_("debug info gives %s invalid macro %s "
565 "without body (corrupted?) at line %d "
566 "on file %s"),
567 at_commandline ? _("command-line") : _("in-file"),
568 is_define ? _("definition") : _("undefinition"),
569 line, current_file->filename);
570 }
571 else if (is_define)
572 parse_macro_definition (current_file, line, body);
573 else
574 {
575 gdb_assert (macinfo_type == DW_MACRO_undef
576 || macinfo_type == DW_MACRO_undef_strp
577 || macinfo_type == DW_MACRO_undef_sup);
578 macro_undef (current_file, line, body);
579 }
580 }
581 break;
582
583 case DW_MACRO_define_strx:
584 case DW_MACRO_undef_strx:
585 {
586 unsigned int bytes_read;
587
588 int line = read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
589 mac_ptr += bytes_read;
590 int offset_index = read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
591 mac_ptr += bytes_read;
592
593 /* Use of the strx operators requires a DW_AT_str_offsets_base. */
594 if (!str_offsets_base.has_value ())
595 {
596 complaint (_("use of %s with unknown string offsets base "
597 "[in module %s]"),
598 (macinfo_type == DW_MACRO_define_strx
599 ? "DW_MACRO_define_strx"
600 : "DW_MACRO_undef_strx"),
601 objfile_name (objfile));
602 break;
603 }
604
605 str_offsets_section->read (objfile);
606 const gdb_byte *info_ptr = (str_offsets_section->buffer
607 + *str_offsets_base
608 + offset_index * offset_size);
609
610 const char *macinfo_str = (macinfo_type == DW_MACRO_define_strx ?
611 "DW_MACRO_define_strx" : "DW_MACRO_undef_strx");
612
613 if (*str_offsets_base + offset_index * offset_size
614 >= str_offsets_section->size)
615 {
616 complaint (_("%s pointing outside of .debug_str_offsets section "
617 "[in module %s]"), macinfo_str, objfile_name (objfile));
618 break;
619 }
620
621 ULONGEST str_offset = read_offset (abfd, info_ptr, offset_size);
622
623 const char *body = str_section->read_string (objfile, str_offset,
624 macinfo_str);
625 if (current_file == nullptr)
626 {
627 /* DWARF violation as no main source is present. */
628 complaint (_("debug info with no main source gives macro %s "
629 "on line %d: %s"),
630 macinfo_type == DW_MACRO_define_strx ? _("definition")
631 : _("undefinition"), line, body);
632 break;
633 }
634
635 if (macinfo_type == DW_MACRO_define_strx)
636 parse_macro_definition (current_file, line, body);
637 else
638 macro_undef (current_file, line, body);
639 }
640 break;
641
642 case DW_MACRO_start_file:
643 {
644 unsigned int bytes_read;
645 int line, file;
646
647 line = read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
648 mac_ptr += bytes_read;
649 file = read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
650 mac_ptr += bytes_read;
651
652 if ((line == 0 && !at_commandline)
653 || (line != 0 && at_commandline))
654 complaint (_("debug info gives source %d included "
655 "from %s at %s line %d"),
656 file, at_commandline ? _("command-line") : _("file"),
657 line == 0 ? _("zero") : _("non-zero"), line);
658
659 if (at_commandline)
660 {
661 /* This DW_MACRO_start_file was executed in the
662 pass one. */
663 at_commandline = 0;
664 }
665 else
666 current_file = macro_start_file (builder, file, line,
667 current_file, lh);
668 }
669 break;
670
671 case DW_MACRO_end_file:
672 if (! current_file)
673 complaint (_("macro debug info has an unmatched "
674 "`close_file' directive"));
675 else if (current_file->included_by == nullptr
676 && producer_is_clang (cu))
677 {
678 /* Clang, until the current version, misplaces some macro
679 definitions - such as ones defined in the command line,
680 putting them after the last DW_MACRO_end_file instead of
681 before the first DW_MACRO_start_file. Since at the time
682 of writing there is no clang version with this bug fixed,
683 we check for any clang producer. This should be changed
684 to producer_is_clang_lt_XX when possible. */
685 }
686 else
687 {
688 current_file = current_file->included_by;
689 if (! current_file)
690 {
691 enum dwarf_macro_record_type next_type;
692
693 /* GCC circa March 2002 doesn't produce the zero
694 type byte marking the end of the compilation
695 unit. Complain if it's not there, but exit no
696 matter what. */
697
698 /* Do we at least have room for a macinfo type byte? */
699 if (mac_ptr >= mac_end)
700 {
701 section->overflow_complaint ();
702 return;
703 }
704
705 /* We don't increment mac_ptr here, so this is just
706 a look-ahead. */
707 next_type
708 = (enum dwarf_macro_record_type) read_1_byte (abfd,
709 mac_ptr);
710 if (next_type != 0)
711 complaint (_("no terminating 0-type entry for "
712 "macros in `.debug_macinfo' section"));
713
714 return;
715 }
716 }
717 break;
718
719 case DW_MACRO_import:
720 case DW_MACRO_import_sup:
721 {
722 LONGEST offset;
723 void **slot;
724 bfd *include_bfd = abfd;
725 const struct dwarf2_section_info *include_section = section;
726 const gdb_byte *include_mac_end = mac_end;
727 int is_dwz = section_is_dwz;
728 const gdb_byte *new_mac_ptr;
729
730 offset = read_offset (abfd, mac_ptr, offset_size);
731 mac_ptr += offset_size;
732
733 if (macinfo_type == DW_MACRO_import_sup)
734 {
735 dwz_file *dwz = dwarf2_get_dwz_file (per_objfile->per_bfd,
736 true);
737
738 dwz->macro.read (objfile);
739
740 include_section = &dwz->macro;
741 include_bfd = include_section->get_bfd_owner ();
742 include_mac_end = dwz->macro.buffer + dwz->macro.size;
743 is_dwz = 1;
744 }
745
746 new_mac_ptr = include_section->buffer + offset;
747 slot = htab_find_slot (include_hash, new_mac_ptr, INSERT);
748
749 if (*slot != NULL)
750 {
751 /* This has actually happened; see
752 http://sourceware.org/bugzilla/show_bug.cgi?id=13568. */
753 complaint (_("recursive DW_MACRO_import in "
754 ".debug_macro section"));
755 }
756 else
757 {
758 *slot = (void *) new_mac_ptr;
759
760 dwarf_decode_macro_bytes (per_objfile, builder, include_bfd,
761 new_mac_ptr, include_mac_end,
762 current_file, lh, section,
763 section_is_gnu, is_dwz, offset_size,
764 str_section, str_offsets_section,
765 str_offsets_base, include_hash, cu);
766
767 htab_remove_elt (include_hash, (void *) new_mac_ptr);
768 }
769 }
770 break;
771
772 case DW_MACINFO_vendor_ext:
773 if (!section_is_gnu)
774 {
775 unsigned int bytes_read;
776
777 /* This reads the constant, but since we don't recognize
778 any vendor extensions, we ignore it. */
779 read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
780 mac_ptr += bytes_read;
781 read_direct_string (abfd, mac_ptr, &bytes_read);
782 mac_ptr += bytes_read;
783
784 /* We don't recognize any vendor extensions. */
785 break;
786 }
787 /* FALLTHROUGH */
788
789 default:
790 mac_ptr = skip_unknown_opcode (macinfo_type, opcode_definitions,
791 mac_ptr, mac_end, abfd, offset_size,
792 section);
793 if (mac_ptr == NULL)
794 return;
795 break;
796 }
797 DIAGNOSTIC_POP
798 } while (macinfo_type != 0);
799 }
800
801 void
802 dwarf_decode_macros (dwarf2_per_objfile *per_objfile,
803 buildsym_compunit *builder,
804 const dwarf2_section_info *section,
805 const struct line_header *lh, unsigned int offset_size,
806 unsigned int offset, struct dwarf2_section_info *str_section,
807 struct dwarf2_section_info *str_offsets_section,
808 gdb::optional<ULONGEST> str_offsets_base,
809 int section_is_gnu, struct dwarf2_cu *cu)
810 {
811 bfd *abfd;
812 const gdb_byte *mac_ptr, *mac_end;
813 struct macro_source_file *current_file = 0;
814 enum dwarf_macro_record_type macinfo_type;
815 const gdb_byte *opcode_definitions[256];
816 void **slot;
817
818 abfd = section->get_bfd_owner ();
819
820 /* First pass: Find the name of the base filename.
821 This filename is needed in order to process all macros whose definition
822 (or undefinition) comes from the command line. These macros are defined
823 before the first DW_MACINFO_start_file entry, and yet still need to be
824 associated to the base file.
825
826 To determine the base file name, we scan the macro definitions until we
827 reach the first DW_MACINFO_start_file entry. We then initialize
828 CURRENT_FILE accordingly so that any macro definition found before the
829 first DW_MACINFO_start_file can still be associated to the base file. */
830
831 mac_ptr = section->buffer + offset;
832 mac_end = section->buffer + section->size;
833
834 mac_ptr = dwarf_parse_macro_header (opcode_definitions, abfd, mac_ptr,
835 &offset_size, section_is_gnu);
836 if (mac_ptr == NULL)
837 {
838 /* We already issued a complaint. */
839 return;
840 }
841
842 do
843 {
844 /* Do we at least have room for a macinfo type byte? */
845 if (mac_ptr >= mac_end)
846 {
847 /* Complaint is printed during the second pass as GDB will probably
848 stop the first pass earlier upon finding
849 DW_MACINFO_start_file. */
850 break;
851 }
852
853 macinfo_type = (enum dwarf_macro_record_type) read_1_byte (abfd, mac_ptr);
854 mac_ptr++;
855
856 /* Note that we rely on the fact that the corresponding GNU and
857 DWARF constants are the same. */
858 DIAGNOSTIC_PUSH
859 DIAGNOSTIC_IGNORE_SWITCH_DIFFERENT_ENUM_TYPES
860 switch (macinfo_type)
861 {
862 /* A zero macinfo type indicates the end of the macro
863 information. */
864 case 0:
865 break;
866
867 case DW_MACRO_define:
868 case DW_MACRO_undef:
869 /* Only skip the data by MAC_PTR. */
870 {
871 unsigned int bytes_read;
872
873 read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
874 mac_ptr += bytes_read;
875 read_direct_string (abfd, mac_ptr, &bytes_read);
876 mac_ptr += bytes_read;
877 }
878 break;
879
880 case DW_MACRO_start_file:
881 {
882 unsigned int bytes_read;
883 int line, file;
884
885 line = read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
886 mac_ptr += bytes_read;
887 file = read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
888 mac_ptr += bytes_read;
889
890 current_file = macro_start_file (builder, file, line,
891 current_file, lh);
892 }
893 break;
894
895 case DW_MACRO_end_file:
896 /* No data to skip by MAC_PTR. */
897 break;
898
899 case DW_MACRO_define_strp:
900 case DW_MACRO_undef_strp:
901 case DW_MACRO_define_sup:
902 case DW_MACRO_undef_sup:
903 {
904 unsigned int bytes_read;
905
906 read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
907 mac_ptr += bytes_read;
908 mac_ptr += offset_size;
909 }
910 break;
911 case DW_MACRO_define_strx:
912 case DW_MACRO_undef_strx:
913 {
914 unsigned int bytes_read;
915
916 read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
917 mac_ptr += bytes_read;
918 read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
919 mac_ptr += bytes_read;
920 }
921 break;
922
923 case DW_MACRO_import:
924 case DW_MACRO_import_sup:
925 /* Note that, according to the spec, a transparent include
926 chain cannot call DW_MACRO_start_file. So, we can just
927 skip this opcode. */
928 mac_ptr += offset_size;
929 break;
930
931 case DW_MACINFO_vendor_ext:
932 /* Only skip the data by MAC_PTR. */
933 if (!section_is_gnu)
934 {
935 unsigned int bytes_read;
936
937 read_unsigned_leb128 (abfd, mac_ptr, &bytes_read);
938 mac_ptr += bytes_read;
939 read_direct_string (abfd, mac_ptr, &bytes_read);
940 mac_ptr += bytes_read;
941 }
942 /* FALLTHROUGH */
943
944 default:
945 mac_ptr = skip_unknown_opcode (macinfo_type, opcode_definitions,
946 mac_ptr, mac_end, abfd, offset_size,
947 section);
948 if (mac_ptr == NULL)
949 return;
950 break;
951 }
952 DIAGNOSTIC_POP
953 } while (macinfo_type != 0 && current_file == NULL);
954
955 /* Second pass: Process all entries.
956
957 Use the AT_COMMAND_LINE flag to determine whether we are still processing
958 command-line macro definitions/undefinitions. This flag is unset when we
959 reach the first DW_MACINFO_start_file entry. */
960
961 htab_up include_hash (htab_create_alloc (1, htab_hash_pointer,
962 htab_eq_pointer,
963 NULL, xcalloc, xfree));
964 mac_ptr = section->buffer + offset;
965 slot = htab_find_slot (include_hash.get (), mac_ptr, INSERT);
966 *slot = (void *) mac_ptr;
967 dwarf_decode_macro_bytes (per_objfile, builder, abfd, mac_ptr, mac_end,
968 current_file, lh, section, section_is_gnu, 0,
969 offset_size, str_section, str_offsets_section,
970 str_offsets_base, include_hash.get (), cu);
971 }