1 /* DWARF 2 debugging format support for GDB.
3 Copyright (C) 1994-2022 Free Software Foundation, Inc.
5 This file is part of GDB.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
21 #include "dwarf2/comp-unit-head.h"
22 #include "dwarf2/leb.h"
23 #include "dwarf2/line-header.h"
24 #include "dwarf2/read.h"
25 #include "complaints.h"
26 #include "filenames.h"
29 line_header::add_include_dir (const char *include_dir
)
31 if (dwarf_line_debug
>= 2)
35 new_size
= m_include_dirs
.size ();
37 new_size
= m_include_dirs
.size () + 1;
38 fprintf_unfiltered (gdb_stdlog
, "Adding dir %zu: %s\n",
39 new_size
, include_dir
);
41 m_include_dirs
.push_back (include_dir
);
45 line_header::add_file_name (const char *name
,
47 unsigned int mod_time
,
50 if (dwarf_line_debug
>= 2)
54 new_size
= file_names_size ();
56 new_size
= file_names_size () + 1;
57 fprintf_unfiltered (gdb_stdlog
, "Adding file %zu: %s\n",
60 m_file_names
.emplace_back (name
, d_index
, mod_time
, length
);
63 gdb::unique_xmalloc_ptr
<char>
64 line_header::file_file_name (int file
) const
66 /* Is the file number a valid index into the line header's file name
67 table? Remember that file numbers start with one, not zero. */
68 if (is_valid_file_index (file
))
70 const file_entry
*fe
= file_name_at (file
);
72 if (!IS_ABSOLUTE_PATH (fe
->name
))
74 const char *dir
= fe
->include_dir (this);
76 return gdb::unique_xmalloc_ptr
<char> (concat (dir
, SLASH_STRING
,
80 return make_unique_xstrdup (fe
->name
);
84 /* The compiler produced a bogus file number. We can at least
85 record the macro definitions made in the file, even if we
86 won't be able to find the file by name. */
89 xsnprintf (fake_name
, sizeof (fake_name
),
90 "<bad macro file number %d>", file
);
92 complaint (_("bad file number in macro information (%d)"),
95 return make_unique_xstrdup (fake_name
);
100 dwarf2_statement_list_fits_in_line_number_section_complaint (void)
102 complaint (_("statement list doesn't fit in .debug_line section"));
105 /* Cover function for read_initial_length.
106 Returns the length of the object at BUF, and stores the size of the
107 initial length in *BYTES_READ and stores the size that offsets will be in
109 If the initial length size is not equivalent to that specified in
110 CU_HEADER then issue a complaint.
111 This is useful when reading non-comp-unit headers. */
114 read_checked_initial_length_and_offset (bfd
*abfd
, const gdb_byte
*buf
,
115 const struct comp_unit_head
*cu_header
,
116 unsigned int *bytes_read
,
117 unsigned int *offset_size
)
119 LONGEST length
= read_initial_length (abfd
, buf
, bytes_read
);
121 gdb_assert (cu_header
->initial_length_size
== 4
122 || cu_header
->initial_length_size
== 8
123 || cu_header
->initial_length_size
== 12);
125 if (cu_header
->initial_length_size
!= *bytes_read
)
126 complaint (_("intermixed 32-bit and 64-bit DWARF sections"));
128 *offset_size
= (*bytes_read
== 4) ? 4 : 8;
132 /* Read directory or file name entry format, starting with byte of
133 format count entries, ULEB128 pairs of entry formats, ULEB128 of
134 entries count and the entries themselves in the described entry
138 read_formatted_entries (dwarf2_per_objfile
*per_objfile
, bfd
*abfd
,
139 const gdb_byte
**bufp
, struct line_header
*lh
,
140 unsigned int offset_size
,
141 void (*callback
) (struct line_header
*lh
,
144 unsigned int mod_time
,
145 unsigned int length
))
147 gdb_byte format_count
, formati
;
148 ULONGEST data_count
, datai
;
149 const gdb_byte
*buf
= *bufp
;
150 const gdb_byte
*format_header_data
;
151 unsigned int bytes_read
;
153 format_count
= read_1_byte (abfd
, buf
);
155 format_header_data
= buf
;
156 for (formati
= 0; formati
< format_count
; formati
++)
158 read_unsigned_leb128 (abfd
, buf
, &bytes_read
);
160 read_unsigned_leb128 (abfd
, buf
, &bytes_read
);
164 data_count
= read_unsigned_leb128 (abfd
, buf
, &bytes_read
);
166 for (datai
= 0; datai
< data_count
; datai
++)
168 const gdb_byte
*format
= format_header_data
;
169 struct file_entry fe
;
171 for (formati
= 0; formati
< format_count
; formati
++)
173 ULONGEST content_type
= read_unsigned_leb128 (abfd
, format
, &bytes_read
);
174 format
+= bytes_read
;
176 ULONGEST form
= read_unsigned_leb128 (abfd
, format
, &bytes_read
);
177 format
+= bytes_read
;
179 gdb::optional
<const char *> string
;
180 gdb::optional
<unsigned int> uint
;
185 string
.emplace (read_direct_string (abfd
, buf
, &bytes_read
));
189 case DW_FORM_line_strp
:
192 = per_objfile
->read_line_string (buf
, offset_size
);
193 string
.emplace (str
);
199 uint
.emplace (read_1_byte (abfd
, buf
));
204 uint
.emplace (read_2_bytes (abfd
, buf
));
209 uint
.emplace (read_4_bytes (abfd
, buf
));
214 uint
.emplace (read_8_bytes (abfd
, buf
));
219 /* This is used for MD5, but file_entry does not record MD5s. */
224 uint
.emplace (read_unsigned_leb128 (abfd
, buf
, &bytes_read
));
229 /* It is valid only for DW_LNCT_timestamp which is ignored by
234 switch (content_type
)
237 if (string
.has_value ())
240 case DW_LNCT_directory_index
:
241 if (uint
.has_value ())
242 fe
.d_index
= (dir_index
) *uint
;
244 case DW_LNCT_timestamp
:
245 if (uint
.has_value ())
249 if (uint
.has_value ())
255 complaint (_("Unknown format content type %s"),
256 pulongest (content_type
));
260 callback (lh
, fe
.name
, fe
.d_index
, fe
.mod_time
, fe
.length
);
266 /* See line-header.h. */
269 dwarf_decode_line_header (sect_offset sect_off
, bool is_dwz
,
270 dwarf2_per_objfile
*per_objfile
,
271 struct dwarf2_section_info
*section
,
272 const struct comp_unit_head
*cu_header
)
274 const gdb_byte
*line_ptr
;
275 unsigned int bytes_read
, offset_size
;
277 const char *cur_dir
, *cur_file
;
279 bfd
*abfd
= section
->get_bfd_owner ();
281 /* Make sure that at least there's room for the total_length field.
282 That could be 12 bytes long, but we're just going to fudge that. */
283 if (to_underlying (sect_off
) + 4 >= section
->size
)
285 dwarf2_statement_list_fits_in_line_number_section_complaint ();
289 line_header_up
lh (new line_header ());
291 lh
->sect_off
= sect_off
;
292 lh
->offset_in_dwz
= is_dwz
;
294 line_ptr
= section
->buffer
+ to_underlying (sect_off
);
296 /* Read in the header. */
298 read_checked_initial_length_and_offset (abfd
, line_ptr
, cu_header
,
299 &bytes_read
, &offset_size
);
300 line_ptr
+= bytes_read
;
302 const gdb_byte
*start_here
= line_ptr
;
304 if (line_ptr
+ lh
->total_length
> (section
->buffer
+ section
->size
))
306 dwarf2_statement_list_fits_in_line_number_section_complaint ();
309 lh
->statement_program_end
= start_here
+ lh
->total_length
;
310 lh
->version
= read_2_bytes (abfd
, line_ptr
);
314 /* This is a version we don't understand. The format could have
315 changed in ways we don't handle properly so just punt. */
316 complaint (_("unsupported version in .debug_line section"));
319 if (lh
->version
>= 5)
321 gdb_byte segment_selector_size
;
323 /* Skip address size. */
324 read_1_byte (abfd
, line_ptr
);
327 segment_selector_size
= read_1_byte (abfd
, line_ptr
);
329 if (segment_selector_size
!= 0)
331 complaint (_("unsupported segment selector size %u "
332 "in .debug_line section"),
333 segment_selector_size
);
337 lh
->header_length
= read_offset (abfd
, line_ptr
, offset_size
);
338 line_ptr
+= offset_size
;
339 lh
->statement_program_start
= line_ptr
+ lh
->header_length
;
340 lh
->minimum_instruction_length
= read_1_byte (abfd
, line_ptr
);
342 if (lh
->version
>= 4)
344 lh
->maximum_ops_per_instruction
= read_1_byte (abfd
, line_ptr
);
348 lh
->maximum_ops_per_instruction
= 1;
350 if (lh
->maximum_ops_per_instruction
== 0)
352 lh
->maximum_ops_per_instruction
= 1;
353 complaint (_("invalid maximum_ops_per_instruction "
354 "in `.debug_line' section"));
357 lh
->default_is_stmt
= read_1_byte (abfd
, line_ptr
);
359 lh
->line_base
= read_1_signed_byte (abfd
, line_ptr
);
361 lh
->line_range
= read_1_byte (abfd
, line_ptr
);
363 lh
->opcode_base
= read_1_byte (abfd
, line_ptr
);
365 lh
->standard_opcode_lengths
.reset (new unsigned char[lh
->opcode_base
]);
367 lh
->standard_opcode_lengths
[0] = 1; /* This should never be used anyway. */
368 for (i
= 1; i
< lh
->opcode_base
; ++i
)
370 lh
->standard_opcode_lengths
[i
] = read_1_byte (abfd
, line_ptr
);
374 if (lh
->version
>= 5)
376 /* Read directory table. */
377 read_formatted_entries (per_objfile
, abfd
, &line_ptr
, lh
.get (),
379 [] (struct line_header
*header
, const char *name
,
380 dir_index d_index
, unsigned int mod_time
,
383 header
->add_include_dir (name
);
386 /* Read file name table. */
387 read_formatted_entries (per_objfile
, abfd
, &line_ptr
, lh
.get (),
389 [] (struct line_header
*header
, const char *name
,
390 dir_index d_index
, unsigned int mod_time
,
393 header
->add_file_name (name
, d_index
, mod_time
, length
);
398 /* Read directory table. */
399 while ((cur_dir
= read_direct_string (abfd
, line_ptr
, &bytes_read
)) != NULL
)
401 line_ptr
+= bytes_read
;
402 lh
->add_include_dir (cur_dir
);
404 line_ptr
+= bytes_read
;
406 /* Read file name table. */
407 while ((cur_file
= read_direct_string (abfd
, line_ptr
, &bytes_read
)) != NULL
)
409 unsigned int mod_time
, length
;
412 line_ptr
+= bytes_read
;
413 d_index
= (dir_index
) read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
414 line_ptr
+= bytes_read
;
415 mod_time
= read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
416 line_ptr
+= bytes_read
;
417 length
= read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
418 line_ptr
+= bytes_read
;
420 lh
->add_file_name (cur_file
, d_index
, mod_time
, length
);
422 line_ptr
+= bytes_read
;
425 if (line_ptr
> (section
->buffer
+ section
->size
))
426 complaint (_("line number info header doesn't "
427 "fit in `.debug_line' section"));