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