forked from Imagelibrary/binutils-gdb
Add support for DWARF-5 and experimental two-level line number tables.
2014-12-23 Cary Coutant <ccoutant@google.com> gas/ * config/obj-elf.c (elf_pseudo_table): Add .lloc and .subprog directives. * dwarf2dbg.h (struct dwarf2_line_info): Add logical field. (dwarf2_directive_subprog): New function. (dwarf2_directive_loc): Add is_lloc parameter. * dwarf2dbg.c: Include "hash.h". (line_base): New variable. (line_range): New variable. (DWARF2_EXPERIMENTAL_LINE_OPCODE_BASE): Rename. (DWARF2_LINE_BASE): Restore to original value. (DWARF2_LINE_RANGE): Likewise. (DWARF5_EXPERIMENTAL_LINE_BASE): New macro. (DWARF5_EXPERIMENTAL_LINE_RANGE): New macro. (SPECIAL_LINE): Use line_base, line_range. (DWARF2_LINE_EXPERIMENTAL_VERSION): New macro. (DWARF2_EXPERIMENTAL_LINE_OPCODE_BASE): New macro. (opcode_base): New static variable. (DWARF2_LINE_BASE, DWARF2_LINE_RANGE): Adjust parameters. (DWARF2_LINE_MAX_OPS_PER_INSN): New macro. (SPECIAL_LINE, SPECIAL_ADDR): Use opcode_base. (struct subprog_entry): New struct. (subprogs, subprogs_in_use, subprogs_allocated): New variables. (struct logicals_entry): New struct. (logicals, logicals_in_use, logicals_allocated, logicals_with_labels): New variables. (struct string_table): New struct. (debug_line_str_table): New variable. (current): Add logical field. (dwarf2_gen_line_info): Fill in symbol and segment for recent logicals. (dwarf2_where): Add logical field. (make_subprog_entry): New function. (make_logical): New function. (dwarf2_directive_subprog): New function. (dwarf2_directive_loc): Add is_lloc parameter; add support for .lloc directive. (out_set_addr_from_logical): New function. (size_inc_line_addr): Fix signed/unsigned warnings. Use opcode_base, line_base, line_range. (emit_inc_line_addr): Likewise. (emit_logicals): New function. (process_entries): Add support for two-level line tables. (add_to_string_table): New function. (out_string_table): New function. (out_dwarf5_file_list): New function. (out_subprog_list): New function. (out_debug_line): Add support for DWARF-5 line tables and for experimental two-level line number tables. (dwarf2_finish): Likewise.
This commit is contained in:
@@ -125,8 +125,10 @@ static const pseudo_typeS elf_pseudo_table[] =
|
|||||||
{"8byte", cons, 8},
|
{"8byte", cons, 8},
|
||||||
/* These are used for dwarf2. */
|
/* These are used for dwarf2. */
|
||||||
{ "file", (void (*) (int)) dwarf2_directive_file, 0 },
|
{ "file", (void (*) (int)) dwarf2_directive_file, 0 },
|
||||||
{ "loc", dwarf2_directive_loc, 0 },
|
{ "loc", dwarf2_directive_loc, 0 },
|
||||||
{ "loc_mark_labels", dwarf2_directive_loc_mark_labels, 0 },
|
{ "loc_mark_labels", dwarf2_directive_loc_mark_labels, 0 },
|
||||||
|
{ "lloc", dwarf2_directive_loc, 1 },
|
||||||
|
{ "subprog", dwarf2_directive_subprog, 0 },
|
||||||
|
|
||||||
/* We need to trap the section changing calls to handle .previous. */
|
/* We need to trap the section changing calls to handle .previous. */
|
||||||
{"data", obj_elf_data, 0},
|
{"data", obj_elf_data, 0},
|
||||||
|
|||||||
816
gas/dwarf2dbg.c
816
gas/dwarf2dbg.c
File diff suppressed because it is too large
Load Diff
@@ -35,6 +35,7 @@ struct dwarf2_line_info {
|
|||||||
unsigned int isa;
|
unsigned int isa;
|
||||||
unsigned int flags;
|
unsigned int flags;
|
||||||
unsigned int discriminator;
|
unsigned int discriminator;
|
||||||
|
unsigned int logical;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Implements the .file FILENO "FILENAME" directive. FILENO can be 0
|
/* Implements the .file FILENO "FILENAME" directive. FILENO can be 0
|
||||||
@@ -42,13 +43,29 @@ struct dwarf2_line_info {
|
|||||||
number must be >0. */
|
number must be >0. */
|
||||||
extern char *dwarf2_directive_file (int dummy);
|
extern char *dwarf2_directive_file (int dummy);
|
||||||
|
|
||||||
|
/* Experimental DWARF-5 extension:
|
||||||
|
Implements the .subprog SUBPNO ["SUBPROG" [FILENO LINENO]] directive.
|
||||||
|
FILENO is the file number, LINENO the line number and the
|
||||||
|
(optional) COLUMN the column of the source code that the following
|
||||||
|
instruction corresponds to. FILENO can be 0 to indicate that the
|
||||||
|
filename specified by the textually most recent .file directive
|
||||||
|
should be used. */
|
||||||
|
extern void dwarf2_directive_subprog (int dummy);
|
||||||
|
|
||||||
/* Implements the .loc FILENO LINENO [COLUMN] directive. FILENO is
|
/* Implements the .loc FILENO LINENO [COLUMN] directive. FILENO is
|
||||||
the file number, LINENO the line number and the (optional) COLUMN
|
the file number, LINENO the line number and the (optional) COLUMN
|
||||||
the column of the source code that the following instruction
|
the column of the source code that the following instruction
|
||||||
corresponds to. FILENO can be 0 to indicate that the filename
|
corresponds to. FILENO can be 0 to indicate that the filename
|
||||||
specified by the textually most recent .file directive should be
|
specified by the textually most recent .file directive should be
|
||||||
used. */
|
used. */
|
||||||
extern void dwarf2_directive_loc (int dummy);
|
/* Experimental DWARF-5 extension:
|
||||||
|
If IS_LLOC is true, implements the .lloc LOGICAL [FILENO LINENO [COLUMN]]
|
||||||
|
directive. FILENO is the file number, LINENO the line number and the
|
||||||
|
(optional) COLUMN the column of the source code that the following
|
||||||
|
instruction corresponds to. FILENO can be 0 to indicate that the
|
||||||
|
filename specified by the textually most recent .file directive
|
||||||
|
should be used. */
|
||||||
|
extern void dwarf2_directive_loc (int is_lloc);
|
||||||
|
|
||||||
/* Implements the .loc_mark_labels {0,1} directive. */
|
/* Implements the .loc_mark_labels {0,1} directive. */
|
||||||
extern void dwarf2_directive_loc_mark_labels (int dummy);
|
extern void dwarf2_directive_loc_mark_labels (int dummy);
|
||||||
|
|||||||
Reference in New Issue
Block a user