1 /* Read DWARF macro information
3 Copyright (C) 1994-2022 Free Software Foundation, Inc.
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
12 This file is part of GDB.
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.
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.
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/>. */
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"
37 #include "complaints.h"
41 dwarf2_macro_malformed_definition_complaint (const char *arg1
)
43 complaint (_("macro debug info contains a "
44 "malformed macro definition:\n`%s'"),
48 static struct macro_source_file
*
49 macro_start_file (buildsym_compunit
*builder
,
51 struct macro_source_file
*current_file
,
52 const struct line_header
*lh
)
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
;
59 file_name
= lh
->file_file_name (*fe
);
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)"),
68 file_name
= string_printf ("<bad macro file number %d>", file
);
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 ();
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
);
83 current_file
= macro_include (current_file
, line
, file_name
.c_str ());
89 consume_improper_spaces (const char *p
, const char *body
)
93 complaint (_("macro definition contains spaces "
94 "in formal argument list:\n`%s'"),
106 parse_macro_definition (struct macro_source_file
*file
, int line
,
111 /* The body string takes one of two forms. For object-like macro
112 definitions, it should be:
114 <macro name> " " <definition>
116 For function-like macro definitions, it should be:
118 <macro name> "() " <definition>
120 <macro name> "(" <arg name> ( "," <arg name> ) * ") " <definition>
122 Spaces may appear only where explicitly indicated, and in the
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.
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
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
== '(')
142 if (*p
== ' ' || *p
== '\0')
144 /* It's an object-like macro. */
145 int name_len
= p
- body
;
146 std::string
name (body
, name_len
);
147 const char *replacement
;
150 replacement
= body
+ name_len
+ 1;
153 dwarf2_macro_malformed_definition_complaint (body
);
154 replacement
= body
+ name_len
;
157 macro_define_object (file
, line
, name
.c_str (), replacement
);
161 /* It's a function-like macro. */
162 std::string
name (body
, p
- body
);
165 char **argv
= XNEWVEC (char *, argv_size
);
169 p
= consume_improper_spaces (p
, body
);
171 /* Parse the formal argument list. */
172 while (*p
&& *p
!= ')')
174 /* Find the extent of the current argument name. */
175 const char *arg_start
= p
;
177 while (*p
&& *p
!= ',' && *p
!= ')' && *p
!= ' ')
180 if (! *p
|| p
== arg_start
)
181 dwarf2_macro_malformed_definition_complaint (body
);
184 /* Make sure argv has room for the new argument. */
185 if (argc
>= argv_size
)
188 argv
= XRESIZEVEC (char *, argv
, argv_size
);
191 argv
[argc
++] = savestring (arg_start
, p
- arg_start
);
194 p
= consume_improper_spaces (p
, body
);
196 /* Consume the comma, if present. */
201 p
= consume_improper_spaces (p
, body
);
210 /* Perfectly formed definition, no complaints. */
211 macro_define_function (file
, line
, name
.c_str (),
212 argc
, (const char **) argv
,
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
,
224 dwarf2_macro_malformed_definition_complaint (body
);
228 dwarf2_macro_malformed_definition_complaint (body
);
233 for (i
= 0; i
< argc
; i
++)
239 dwarf2_macro_malformed_definition_complaint (body
);
242 /* Skip some bytes from BYTES according to the form given in FORM.
243 Returns the new pointer. */
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
)
251 unsigned int bytes_read
;
277 read_direct_string (abfd
, bytes
, &bytes_read
);
281 case DW_FORM_sec_offset
:
283 case DW_FORM_GNU_strp_alt
:
284 bytes
+= offset_size
;
288 bytes
+= read_unsigned_leb128 (abfd
, bytes
, &bytes_read
);
293 bytes
+= 1 + read_1_byte (abfd
, bytes
);
296 bytes
+= 2 + read_2_bytes (abfd
, bytes
);
299 bytes
+= 4 + read_4_bytes (abfd
, bytes
);
306 case DW_FORM_GNU_addr_index
:
307 case DW_FORM_GNU_str_index
:
308 bytes
= gdb_skip_leb128 (bytes
, buffer_end
);
311 section
->overflow_complaint ();
316 case DW_FORM_implicit_const
:
321 complaint (_("invalid form 0x%x in `%s'"),
322 form
, section
->get_name ());
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. */
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
,
339 unsigned int offset_size
,
340 const struct dwarf2_section_info
*section
)
342 unsigned int bytes_read
, i
;
344 const gdb_byte
*defn
;
346 if (opcode_definitions
[opcode
] == NULL
)
348 complaint (_("unrecognized DW_MACINFO or DW_MACRO opcode 0x%x"),
353 defn
= opcode_definitions
[opcode
];
354 arg
= read_unsigned_leb128 (abfd
, defn
, &bytes_read
);
357 for (i
= 0; i
< arg
; ++i
)
359 mac_ptr
= skip_form_bytes (abfd
, mac_ptr
, mac_end
,
360 (enum dwarf_form
) defn
[i
], offset_size
,
364 /* skip_form_bytes already issued the complaint. */
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. */
377 static const gdb_byte
*
378 dwarf_parse_macro_header (const gdb_byte
**opcode_definitions
,
380 const gdb_byte
*mac_ptr
,
381 unsigned int *offset_size
,
384 memset (opcode_definitions
, 0, 256 * sizeof (gdb_byte
*));
388 unsigned int version
, flags
;
390 version
= read_2_bytes (abfd
, mac_ptr
);
391 if (version
!= 4 && version
!= 5)
393 complaint (_("unrecognized version `%d' in .debug_macro section"),
399 flags
= read_1_byte (abfd
, mac_ptr
);
401 *offset_size
= (flags
& 1) ? 8 : 4;
403 if ((flags
& 2) != 0)
404 /* We don't need the line table offset. */
405 mac_ptr
+= *offset_size
;
407 /* Vendor opcode descriptions. */
408 if ((flags
& 4) != 0)
410 unsigned int i
, count
;
412 count
= read_1_byte (abfd
, mac_ptr
);
414 for (i
= 0; i
< count
; ++i
)
416 unsigned int opcode
, bytes_read
;
419 opcode
= read_1_byte (abfd
, mac_ptr
);
421 opcode_definitions
[opcode
] = mac_ptr
;
422 arg
= read_unsigned_leb128 (abfd
, mac_ptr
, &bytes_read
);
423 mac_ptr
+= bytes_read
;
432 /* A helper for dwarf_decode_macros that handles the GNU extensions,
433 including DW_MACRO_import. */
436 dwarf_decode_macro_bytes (dwarf2_per_objfile
*per_objfile
,
437 buildsym_compunit
*builder
,
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
)
450 struct objfile
*objfile
= per_objfile
->objfile
;
451 enum dwarf_macro_record_type macinfo_type
;
453 const gdb_byte
*opcode_definitions
[256];
455 mac_ptr
= dwarf_parse_macro_header (opcode_definitions
, abfd
, mac_ptr
,
456 &offset_size
, section_is_gnu
);
459 /* We already issued a complaint. */
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. */
474 /* Do we at least have room for a macinfo type byte? */
475 if (mac_ptr
>= mac_end
)
477 section
->overflow_complaint ();
481 macinfo_type
= (enum dwarf_macro_record_type
) read_1_byte (abfd
, mac_ptr
);
484 /* Note that we rely on the fact that the corresponding GNU and
485 DWARF constants are the same. */
487 DIAGNOSTIC_IGNORE_SWITCH_DIFFERENT_ENUM_TYPES
488 switch (macinfo_type
)
490 /* A zero macinfo type indicates the end of the macro
495 case DW_MACRO_define
:
497 case DW_MACRO_define_strp
:
498 case DW_MACRO_undef_strp
:
499 case DW_MACRO_define_sup
:
500 case DW_MACRO_undef_sup
:
502 unsigned int bytes_read
;
507 line
= read_unsigned_leb128 (abfd
, mac_ptr
, &bytes_read
);
508 mac_ptr
+= bytes_read
;
510 if (macinfo_type
== DW_MACRO_define
511 || macinfo_type
== DW_MACRO_undef
)
513 body
= read_direct_string (abfd
, mac_ptr
, &bytes_read
);
514 mac_ptr
+= bytes_read
;
520 str_offset
= read_offset (abfd
, mac_ptr
, offset_size
);
521 mac_ptr
+= offset_size
;
523 if (macinfo_type
== DW_MACRO_define_sup
524 || macinfo_type
== DW_MACRO_undef_sup
527 dwz_file
*dwz
= dwarf2_get_dwz_file (per_objfile
->per_bfd
,
530 body
= dwz
->read_string (objfile
, str_offset
);
533 body
= per_objfile
->per_bfd
->str
.read_string (objfile
,
538 is_define
= (macinfo_type
== DW_MACRO_define
539 || macinfo_type
== DW_MACRO_define_strp
540 || macinfo_type
== DW_MACRO_define_sup
);
543 /* DWARF violation as no main source is present. */
544 complaint (_("debug info with no main source gives macro %s "
546 is_define
? _("definition") : _("undefinition"),
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
);
559 /* Fedora's rpm-build's "debugedit" binary
560 corrupted .debug_macro sections.
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 "
567 at_commandline
? _("command-line") : _("in-file"),
568 is_define
? _("definition") : _("undefinition"),
569 line
, current_file
->filename
);
572 parse_macro_definition (current_file
, line
, body
);
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
);
583 case DW_MACRO_define_strx
:
584 case DW_MACRO_undef_strx
:
586 unsigned int bytes_read
;
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
;
593 /* Use of the strx operators requires a DW_AT_str_offsets_base. */
594 if (!str_offsets_base
.has_value ())
596 complaint (_("use of %s with unknown string offsets base "
598 (macinfo_type
== DW_MACRO_define_strx
599 ? "DW_MACRO_define_strx"
600 : "DW_MACRO_undef_strx"),
601 objfile_name (objfile
));
605 str_offsets_section
->read (objfile
);
606 const gdb_byte
*info_ptr
= (str_offsets_section
->buffer
608 + offset_index
* offset_size
);
610 const char *macinfo_str
= (macinfo_type
== DW_MACRO_define_strx
?
611 "DW_MACRO_define_strx" : "DW_MACRO_undef_strx");
613 if (*str_offsets_base
+ offset_index
* offset_size
614 >= str_offsets_section
->size
)
616 complaint (_("%s pointing outside of .debug_str_offsets section "
617 "[in module %s]"), macinfo_str
, objfile_name (objfile
));
621 ULONGEST str_offset
= read_offset (abfd
, info_ptr
, offset_size
);
623 const char *body
= str_section
->read_string (objfile
, str_offset
,
625 if (current_file
== nullptr)
627 /* DWARF violation as no main source is present. */
628 complaint (_("debug info with no main source gives macro %s "
630 macinfo_type
== DW_MACRO_define_strx
? _("definition")
631 : _("undefinition"), line
, body
);
635 if (macinfo_type
== DW_MACRO_define_strx
)
636 parse_macro_definition (current_file
, line
, body
);
638 macro_undef (current_file
, line
, body
);
642 case DW_MACRO_start_file
:
644 unsigned int bytes_read
;
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
;
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
);
661 /* This DW_MACRO_start_file was executed in the
666 current_file
= macro_start_file (builder
, file
, line
,
671 case DW_MACRO_end_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
))
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. */
688 current_file
= current_file
->included_by
;
691 enum dwarf_macro_record_type next_type
;
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
698 /* Do we at least have room for a macinfo type byte? */
699 if (mac_ptr
>= mac_end
)
701 section
->overflow_complaint ();
705 /* We don't increment mac_ptr here, so this is just
708 = (enum dwarf_macro_record_type
) read_1_byte (abfd
,
711 complaint (_("no terminating 0-type entry for "
712 "macros in `.debug_macinfo' section"));
719 case DW_MACRO_import
:
720 case DW_MACRO_import_sup
:
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
;
730 offset
= read_offset (abfd
, mac_ptr
, offset_size
);
731 mac_ptr
+= offset_size
;
733 if (macinfo_type
== DW_MACRO_import_sup
)
735 dwz_file
*dwz
= dwarf2_get_dwz_file (per_objfile
->per_bfd
,
738 dwz
->macro
.read (objfile
);
740 include_section
= &dwz
->macro
;
741 include_bfd
= include_section
->get_bfd_owner ();
742 include_mac_end
= dwz
->macro
.buffer
+ dwz
->macro
.size
;
746 new_mac_ptr
= include_section
->buffer
+ offset
;
747 slot
= htab_find_slot (include_hash
, new_mac_ptr
, INSERT
);
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"));
758 *slot
= (void *) new_mac_ptr
;
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
);
767 htab_remove_elt (include_hash
, (void *) new_mac_ptr
);
772 case DW_MACINFO_vendor_ext
:
775 unsigned int bytes_read
;
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
;
784 /* We don't recognize any vendor extensions. */
790 mac_ptr
= skip_unknown_opcode (macinfo_type
, opcode_definitions
,
791 mac_ptr
, mac_end
, abfd
, offset_size
,
798 } while (macinfo_type
!= 0);
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
)
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];
818 abfd
= section
->get_bfd_owner ();
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.
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. */
831 mac_ptr
= section
->buffer
+ offset
;
832 mac_end
= section
->buffer
+ section
->size
;
834 mac_ptr
= dwarf_parse_macro_header (opcode_definitions
, abfd
, mac_ptr
,
835 &offset_size
, section_is_gnu
);
838 /* We already issued a complaint. */
844 /* Do we at least have room for a macinfo type byte? */
845 if (mac_ptr
>= mac_end
)
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. */
853 macinfo_type
= (enum dwarf_macro_record_type
) read_1_byte (abfd
, mac_ptr
);
856 /* Note that we rely on the fact that the corresponding GNU and
857 DWARF constants are the same. */
859 DIAGNOSTIC_IGNORE_SWITCH_DIFFERENT_ENUM_TYPES
860 switch (macinfo_type
)
862 /* A zero macinfo type indicates the end of the macro
867 case DW_MACRO_define
:
869 /* Only skip the data by MAC_PTR. */
871 unsigned int bytes_read
;
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
;
880 case DW_MACRO_start_file
:
882 unsigned int bytes_read
;
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
;
890 current_file
= macro_start_file (builder
, file
, line
,
895 case DW_MACRO_end_file
:
896 /* No data to skip by MAC_PTR. */
899 case DW_MACRO_define_strp
:
900 case DW_MACRO_undef_strp
:
901 case DW_MACRO_define_sup
:
902 case DW_MACRO_undef_sup
:
904 unsigned int bytes_read
;
906 read_unsigned_leb128 (abfd
, mac_ptr
, &bytes_read
);
907 mac_ptr
+= bytes_read
;
908 mac_ptr
+= offset_size
;
911 case DW_MACRO_define_strx
:
912 case DW_MACRO_undef_strx
:
914 unsigned int bytes_read
;
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
;
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
928 mac_ptr
+= offset_size
;
931 case DW_MACINFO_vendor_ext
:
932 /* Only skip the data by MAC_PTR. */
935 unsigned int bytes_read
;
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
;
945 mac_ptr
= skip_unknown_opcode (macinfo_type
, opcode_definitions
,
946 mac_ptr
, mac_end
, abfd
, offset_size
,
953 } while (macinfo_type
!= 0 && current_file
== NULL
);
955 /* Second pass: Process all entries.
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. */
961 htab_up
include_hash (htab_create_alloc (1, htab_hash_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
);