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"
27 #include "gdbsupport/pathstuff.h"
30 line_header::add_include_dir (const char *include_dir
)
32 if (dwarf_line_debug
>= 2)
36 new_size
= m_include_dirs
.size ();
38 new_size
= m_include_dirs
.size () + 1;
39 gdb_printf (gdb_stdlog
, "Adding dir %zu: %s\n",
40 new_size
, include_dir
);
42 m_include_dirs
.push_back (include_dir
);
46 line_header::add_file_name (const char *name
,
48 unsigned int mod_time
,
51 if (dwarf_line_debug
>= 2)
55 new_size
= file_names_size ();
57 new_size
= file_names_size () + 1;
58 gdb_printf (gdb_stdlog
, "Adding file %zu: %s\n",
61 m_file_names
.emplace_back (name
, d_index
, mod_time
, length
);
65 line_header::file_file_name (int file
) const
67 /* Is the file number a valid index into the line header's file name
68 table? Remember that file numbers start with one, not zero. */
69 if (is_valid_file_index (file
))
71 const file_entry
*fe
= file_name_at (file
);
73 if (!IS_ABSOLUTE_PATH (fe
->name
))
75 const char *dir
= fe
->include_dir (this);
77 return path_join (dir
, 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. */
87 complaint (_("bad file number in macro information (%d)"),
90 return string_printf ("<bad macro file number %d>", file
);
95 dwarf2_statement_list_fits_in_line_number_section_complaint (void)
97 complaint (_("statement list doesn't fit in .debug_line section"));
100 /* Cover function for read_initial_length.
101 Returns the length of the object at BUF, and stores the size of the
102 initial length in *BYTES_READ and stores the size that offsets will be in
104 If the initial length size is not equivalent to that specified in
105 CU_HEADER then issue a complaint.
106 This is useful when reading non-comp-unit headers. */
109 read_checked_initial_length_and_offset (bfd
*abfd
, const gdb_byte
*buf
,
110 const struct comp_unit_head
*cu_header
,
111 unsigned int *bytes_read
,
112 unsigned int *offset_size
)
114 LONGEST length
= read_initial_length (abfd
, buf
, bytes_read
);
116 gdb_assert (cu_header
->initial_length_size
== 4
117 || cu_header
->initial_length_size
== 8
118 || cu_header
->initial_length_size
== 12);
120 if (cu_header
->initial_length_size
!= *bytes_read
)
121 complaint (_("intermixed 32-bit and 64-bit DWARF sections"));
123 *offset_size
= (*bytes_read
== 4) ? 4 : 8;
127 /* Read directory or file name entry format, starting with byte of
128 format count entries, ULEB128 pairs of entry formats, ULEB128 of
129 entries count and the entries themselves in the described entry
133 read_formatted_entries (dwarf2_per_objfile
*per_objfile
, bfd
*abfd
,
134 const gdb_byte
**bufp
, struct line_header
*lh
,
135 unsigned int offset_size
,
136 void (*callback
) (struct line_header
*lh
,
139 unsigned int mod_time
,
140 unsigned int length
))
142 gdb_byte format_count
, formati
;
143 ULONGEST data_count
, datai
;
144 const gdb_byte
*buf
= *bufp
;
145 const gdb_byte
*format_header_data
;
146 unsigned int bytes_read
;
148 format_count
= read_1_byte (abfd
, buf
);
150 format_header_data
= buf
;
151 for (formati
= 0; formati
< format_count
; formati
++)
153 read_unsigned_leb128 (abfd
, buf
, &bytes_read
);
155 read_unsigned_leb128 (abfd
, buf
, &bytes_read
);
159 data_count
= read_unsigned_leb128 (abfd
, buf
, &bytes_read
);
161 for (datai
= 0; datai
< data_count
; datai
++)
163 const gdb_byte
*format
= format_header_data
;
164 struct file_entry fe
;
166 for (formati
= 0; formati
< format_count
; formati
++)
168 ULONGEST content_type
= read_unsigned_leb128 (abfd
, format
, &bytes_read
);
169 format
+= bytes_read
;
171 ULONGEST form
= read_unsigned_leb128 (abfd
, format
, &bytes_read
);
172 format
+= bytes_read
;
174 gdb::optional
<const char *> string
;
175 gdb::optional
<unsigned int> uint
;
180 string
.emplace (read_direct_string (abfd
, buf
, &bytes_read
));
184 case DW_FORM_line_strp
:
187 = per_objfile
->read_line_string (buf
, offset_size
);
188 string
.emplace (str
);
194 uint
.emplace (read_1_byte (abfd
, buf
));
199 uint
.emplace (read_2_bytes (abfd
, buf
));
204 uint
.emplace (read_4_bytes (abfd
, buf
));
209 uint
.emplace (read_8_bytes (abfd
, buf
));
214 /* This is used for MD5, but file_entry does not record MD5s. */
219 uint
.emplace (read_unsigned_leb128 (abfd
, buf
, &bytes_read
));
224 /* It is valid only for DW_LNCT_timestamp which is ignored by
229 switch (content_type
)
232 if (string
.has_value ())
235 case DW_LNCT_directory_index
:
236 if (uint
.has_value ())
237 fe
.d_index
= (dir_index
) *uint
;
239 case DW_LNCT_timestamp
:
240 if (uint
.has_value ())
244 if (uint
.has_value ())
250 complaint (_("Unknown format content type %s"),
251 pulongest (content_type
));
255 callback (lh
, fe
.name
, fe
.d_index
, fe
.mod_time
, fe
.length
);
261 /* See line-header.h. */
264 dwarf_decode_line_header (sect_offset sect_off
, bool is_dwz
,
265 dwarf2_per_objfile
*per_objfile
,
266 struct dwarf2_section_info
*section
,
267 const struct comp_unit_head
*cu_header
)
269 const gdb_byte
*line_ptr
;
270 unsigned int bytes_read
, offset_size
;
272 const char *cur_dir
, *cur_file
;
274 bfd
*abfd
= section
->get_bfd_owner ();
276 /* Make sure that at least there's room for the total_length field.
277 That could be 12 bytes long, but we're just going to fudge that. */
278 if (to_underlying (sect_off
) + 4 >= section
->size
)
280 dwarf2_statement_list_fits_in_line_number_section_complaint ();
284 line_header_up
lh (new line_header ());
286 lh
->sect_off
= sect_off
;
287 lh
->offset_in_dwz
= is_dwz
;
289 line_ptr
= section
->buffer
+ to_underlying (sect_off
);
291 /* Read in the header. */
293 = read_checked_initial_length_and_offset (abfd
, line_ptr
, cu_header
,
294 &bytes_read
, &offset_size
);
295 line_ptr
+= bytes_read
;
297 const gdb_byte
*start_here
= line_ptr
;
299 if (line_ptr
+ unit_length
> (section
->buffer
+ section
->size
))
301 dwarf2_statement_list_fits_in_line_number_section_complaint ();
304 lh
->statement_program_end
= start_here
+ unit_length
;
305 lh
->version
= read_2_bytes (abfd
, line_ptr
);
309 /* This is a version we don't understand. The format could have
310 changed in ways we don't handle properly so just punt. */
311 complaint (_("unsupported version in .debug_line section"));
314 if (lh
->version
>= 5)
316 gdb_byte segment_selector_size
;
318 /* Skip address size. */
319 read_1_byte (abfd
, line_ptr
);
322 segment_selector_size
= read_1_byte (abfd
, line_ptr
);
324 if (segment_selector_size
!= 0)
326 complaint (_("unsupported segment selector size %u "
327 "in .debug_line section"),
328 segment_selector_size
);
333 LONGEST header_length
= read_offset (abfd
, line_ptr
, offset_size
);
334 line_ptr
+= offset_size
;
335 lh
->statement_program_start
= line_ptr
+ header_length
;
336 lh
->minimum_instruction_length
= read_1_byte (abfd
, line_ptr
);
339 if (lh
->version
>= 4)
341 lh
->maximum_ops_per_instruction
= read_1_byte (abfd
, line_ptr
);
345 lh
->maximum_ops_per_instruction
= 1;
347 if (lh
->maximum_ops_per_instruction
== 0)
349 lh
->maximum_ops_per_instruction
= 1;
350 complaint (_("invalid maximum_ops_per_instruction "
351 "in `.debug_line' section"));
354 lh
->default_is_stmt
= read_1_byte (abfd
, line_ptr
);
356 lh
->line_base
= read_1_signed_byte (abfd
, line_ptr
);
358 lh
->line_range
= read_1_byte (abfd
, line_ptr
);
360 lh
->opcode_base
= read_1_byte (abfd
, line_ptr
);
362 lh
->standard_opcode_lengths
.reset (new unsigned char[lh
->opcode_base
]);
364 lh
->standard_opcode_lengths
[0] = 1; /* This should never be used anyway. */
365 for (i
= 1; i
< lh
->opcode_base
; ++i
)
367 lh
->standard_opcode_lengths
[i
] = read_1_byte (abfd
, line_ptr
);
371 if (lh
->version
>= 5)
373 /* Read directory table. */
374 read_formatted_entries (per_objfile
, abfd
, &line_ptr
, lh
.get (),
376 [] (struct line_header
*header
, const char *name
,
377 dir_index d_index
, unsigned int mod_time
,
380 header
->add_include_dir (name
);
383 /* Read file name table. */
384 read_formatted_entries (per_objfile
, abfd
, &line_ptr
, lh
.get (),
386 [] (struct line_header
*header
, const char *name
,
387 dir_index d_index
, unsigned int mod_time
,
390 header
->add_file_name (name
, d_index
, mod_time
, length
);
395 /* Read directory table. */
396 while ((cur_dir
= read_direct_string (abfd
, line_ptr
, &bytes_read
)) != NULL
)
398 line_ptr
+= bytes_read
;
399 lh
->add_include_dir (cur_dir
);
401 line_ptr
+= bytes_read
;
403 /* Read file name table. */
404 while ((cur_file
= read_direct_string (abfd
, line_ptr
, &bytes_read
)) != NULL
)
406 unsigned int mod_time
, length
;
409 line_ptr
+= bytes_read
;
410 d_index
= (dir_index
) read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
411 line_ptr
+= bytes_read
;
412 mod_time
= read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
413 line_ptr
+= bytes_read
;
414 length
= read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
415 line_ptr
+= bytes_read
;
417 lh
->add_file_name (cur_file
, d_index
, mod_time
, length
);
419 line_ptr
+= bytes_read
;
422 if (line_ptr
> (section
->buffer
+ section
->size
))
423 complaint (_("line number info header doesn't "
424 "fit in `.debug_line' section"));