From 981975b62d8e098e571a91c30b938b4bcc7a3fa7 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Fri, 16 Mar 2001 11:31:19 -0800 Subject: [PATCH] dwarf2out.c: Revert most of 2000-11-25 and 2001-01-24 changes. * dwarf2out.c: Revert most of 2000-11-25 and 2001-01-24 changes. (LN_PROLOG_AS_LABEL, LN_PROLOG_END_LABEL): New. (size_of_line_prolog): Remove. (output_line_info): Compute prologue size via label difference. (lookup_filename): Return "unspecified" for and . * configure.in (HAVE_AS_DWARF2_DEBUG_LINE): Require that the assembler error when redefining file numbers. * config.in, configure: Rebuild. From-SVN: r40559 --- gcc/ChangeLog | 12 ++ gcc/config.in | 3 +- gcc/configure | 18 ++- gcc/configure.in | 17 ++- gcc/dwarf2out.c | 287 +++++++++++++---------------------------------- 5 files changed, 125 insertions(+), 212 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 72ee6289dfc..4b1e27e9f4c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,15 @@ +2001-03-16 Richard Henderson + + * dwarf2out.c: Revert most of 2000-11-25 and 2001-01-24 changes. + (LN_PROLOG_AS_LABEL, LN_PROLOG_END_LABEL): New. + (size_of_line_prolog): Remove. + (output_line_info): Compute prologue size via label difference. + (lookup_filename): Return "unspecified" for and . + + * configure.in (HAVE_AS_DWARF2_DEBUG_LINE): Require that the + assembler error when redefining file numbers. + * config.in, configure: Rebuild. + 2001-03-16 Michael Meissner * mips.h (BITMASK_HIGH): Replacement for 0x80000000 that avoids diff --git a/gcc/config.in b/gcc/config.in index 4eb97ad52c8..d47920426ec 100644 --- a/gcc/config.in +++ b/gcc/config.in @@ -465,7 +465,8 @@ /* Define if your assembler supports offsetable %lo(). */ #undef HAVE_AS_OFFSETABLE_LO10 -/* Define if your assembler supports dwarf2 .file/.loc directives. */ +/* Define if your assembler supports dwarf2 .file/.loc directives, + and preserves file table indicies exactly as given. */ #undef HAVE_AS_DWARF2_DEBUG_LINE /* Define to 1 if you want to enable namespaces (-fhonor-std) by default. */ diff --git a/gcc/configure b/gcc/configure index a6c4fbdf122..9af92cb6393 100755 --- a/gcc/configure +++ b/gcc/configure @@ -2098,7 +2098,7 @@ EOF fi # Find some useful tools -for ac_prog in mawk gawk nawk awk +for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -6688,9 +6688,21 @@ elif test x$gcc_cv_as != x -a x"$insn" != x ; then echo ' .file 0 "conftest.s"' > conftest.s echo ' .loc 0 3 0' >> conftest.s echo " $insn" >> conftest.s + # ??? This fails with non-gnu grep. if $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1 \ && grep debug_line conftest.o > /dev/null 2>&1 ; then - gcc_cv_as_dwarf2_debug_line="yes" + # The .debug_line file table must be in the exact order that + # we specified the files, since these indicies are also used + # by DW_AT_decl_file. Approximate this test by testing if + # the assembler bitches if the same index is assigned twice. + echo ' .file 1 "foo.s"' > conftest.s + echo ' .file 1 "bar.s"' >> conftest.s + if $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1 + then + gcc_cv_as_dwarf2_debug_line="no" + else + gcc_cv_as_dwarf2_debug_line="yes" + fi fi rm -f conftest.s conftest.o conftest.nm1 conftest.nm2 fi @@ -6837,7 +6849,7 @@ EOF echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6 -echo "configure:6841: checking whether to enable maintainer-specific portions of Makefiles" >&5 +echo "configure:6853: checking whether to enable maintainer-specific portions of Makefiles" >&5 # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then enableval="$enable_maintainer_mode" diff --git a/gcc/configure.in b/gcc/configure.in index 6c9592b0b9b..c5fdc2d7cfc 100644 --- a/gcc/configure.in +++ b/gcc/configure.in @@ -1494,15 +1494,28 @@ elif test x$gcc_cv_as != x -a x"$insn" != x ; then echo ' .file 0 "conftest.s"' > conftest.s echo ' .loc 0 3 0' >> conftest.s echo " $insn" >> conftest.s + # ??? This fails with non-gnu grep. if $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1 \ && grep debug_line conftest.o > /dev/null 2>&1 ; then - gcc_cv_as_dwarf2_debug_line="yes" + # The .debug_line file table must be in the exact order that + # we specified the files, since these indicies are also used + # by DW_AT_decl_file. Approximate this test by testing if + # the assembler bitches if the same index is assigned twice. + echo ' .file 1 "foo.s"' > conftest.s + echo ' .file 1 "bar.s"' >> conftest.s + if $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1 + then + gcc_cv_as_dwarf2_debug_line="no" + else + gcc_cv_as_dwarf2_debug_line="yes" + fi fi rm -f conftest.s conftest.o conftest.nm1 conftest.nm2 fi if test x"$gcc_cv_as_dwarf2_debug_line" = xyes; then AC_DEFINE(HAVE_AS_DWARF2_DEBUG_LINE, 1, - [Define if your assembler supports dwarf2 .file/.loc directives.]) +[Define if your assembler supports dwarf2 .file/.loc directives, + and preserves file table indicies exactly as given.]) fi AC_MSG_RESULT($gcc_cv_as_dwarf2_debug_line) diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index c5dbcd306a1..b192aab47d9 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -294,8 +294,10 @@ static void def_cfa_1 PARAMS ((const char *, dw_cfa_location *)); #define FDE_AFTER_SIZE_LABEL "LASFDE" #define FDE_END_LABEL "LEFDE" #define FDE_LENGTH_LABEL "LLFDE" -#define LINE_NUMBER_BEGIN_LABEL "LTSTART" -#define LINE_NUMBER_END_LABEL "LTEND" +#define LINE_NUMBER_BEGIN_LABEL "LSLT" +#define LINE_NUMBER_END_LABEL "LELT" +#define LN_PROLOG_AS_LABEL "LASLTP" +#define LN_PROLOG_END_LABEL "LELTP" #define DIE_LABEL_PREFIX "DW" /* Definitions of defaults for various types of primitive assembly language @@ -2946,11 +2948,8 @@ struct file_table table. */ #define FILE_TABLE_INCREMENT 64 -/* Filenames referenced by declarations this compilation unit. */ -static struct file_table decl_file_table; - -/* Filenames referenced by line numbers in this compilation unit. */ -static struct file_table line_file_table; +/* Filenames referenced by this compilation unit. */ +static struct file_table file_table; /* Local pointer to the name of the main input file. Initialized in dwarf2out_init. */ @@ -3183,7 +3182,6 @@ static unsigned long size_of_die PARAMS ((dw_die_ref)); static void calc_die_sizes PARAMS ((dw_die_ref)); static void mark_dies PARAMS ((dw_die_ref)); static void unmark_dies PARAMS ((dw_die_ref)); -static unsigned long size_of_line_prolog PARAMS ((void)); static unsigned long size_of_pubnames PARAMS ((void)); static unsigned long size_of_aranges PARAMS ((void)); static enum dwarf_form value_format PARAMS ((dw_attr_ref)); @@ -3281,9 +3279,8 @@ static void gen_block_die PARAMS ((tree, dw_die_ref, int)); static void decls_for_scope PARAMS ((tree, dw_die_ref, int)); static int is_redundant_typedef PARAMS ((tree)); static void gen_decl_die PARAMS ((tree, dw_die_ref)); -static unsigned lookup_filename PARAMS ((struct file_table *, - const char *)); -static void init_file_table PARAMS ((struct file_table *)); +static unsigned lookup_filename PARAMS ((const char *)); +static void init_file_table PARAMS ((void)); static void add_incomplete_type PARAMS ((tree)); static void retry_incomplete_types PARAMS ((void)); static void gen_type_die_for_member PARAMS ((tree, tree, dw_die_ref)); @@ -4738,7 +4735,7 @@ print_dwarf_line_table (outfile) { line_info = &line_info_table[i]; fprintf (outfile, "%5d: ", i); - fprintf (outfile, "%-20s", line_file_table.table[line_info->dw_file_num]); + fprintf (outfile, "%-20s", file_table.table[line_info->dw_file_num]); fprintf (outfile, "%6ld", line_info->dw_line_num); fprintf (outfile, "\n"); } @@ -5403,45 +5400,6 @@ unmark_dies (die) unmark_dies (c); } -/* Return the size of the line information prolog generated for the - compilation unit. */ - -static unsigned long -size_of_line_prolog () -{ - register unsigned long size; - register unsigned long ft_index; - - size = DWARF_LINE_PROLOG_HEADER_SIZE; - - /* Count the size of the table giving number of args for each - standard opcode. */ - size += DWARF_LINE_OPCODE_BASE - 1; - - /* Include directory table is empty (at present). Count only the - null byte used to terminate the table. */ - size += 1; - - for (ft_index = 1; ft_index < decl_file_table.in_use; ++ft_index) - { - /* File name entry. */ - size += size_of_string (decl_file_table.table[ft_index]); - - /* Include directory index. */ - size += size_of_uleb128 (0); - - /* Modification time. */ - size += size_of_uleb128 (0); - - /* File length in bytes. */ - size += size_of_uleb128 (0); - } - - /* Count the file table terminator. */ - size += 1; - return size; -} - /* Return the size of the .debug_pubnames table generated for the compilation unit. */ @@ -6003,8 +5961,6 @@ struct dir_info char *path; /* Path including directory name. */ int length; /* Path length. */ int prefix; /* Index of directory entry which is a prefix. */ - int nbytes; /* Total number of bytes in all file names excluding - paths. */ int count; /* Number of files in this directory. */ int dir_idx; /* Index of directory used as base. */ int used; /* Used in the end? */ @@ -6050,33 +6006,6 @@ file_info_cmp (p1, p2) } } -/* Compute the maximum prefix of P2 appearing also in P1. Entire - directory names must match. */ -static int prefix_of PARAMS ((struct dir_info *, struct dir_info *)); -static int -prefix_of (p1, p2) - struct dir_info *p1; - struct dir_info *p2; -{ - char *s1 = p1->path; - char *s2 = p2->path; - int len = p1->length < p2->length ? p1->length : p2->length; - - while (*s1 == *s2 && s1 < p1->path + len) - ++s1, ++s2; - - if (*s1 == '/' && *s2 == '/') - /* The whole of P1 is the prefix. */ - return p1->length; - - /* Go back to the last directory component. */ - while (s1 > p1->path) - if (*--s1 == '/') - return s1 - p1->path + 1; - - return 0; -} - /* Output the directory table and the file name table. We try to minimize the total amount of memory needed. A heuristic is used to avoid large slowdowns with many input files. */ @@ -6094,18 +6023,18 @@ output_file_names () int idx; /* Allocate the various arrays we need. */ - files = (struct file_info *) alloca (line_file_table.in_use + files = (struct file_info *) alloca (file_table.in_use * sizeof (struct file_info)); - dirs = (struct dir_info *) alloca (line_file_table.in_use * 2 + dirs = (struct dir_info *) alloca (file_table.in_use * sizeof (struct dir_info)); /* Sort the file names. */ - for (i = 1; i < (int) line_file_table.in_use; ++i) + for (i = 1; i < (int) file_table.in_use; ++i) { char *f; /* Skip all leading "./". */ - f = line_file_table.table[i]; + f = file_table.table[i]; while (f[0] == '.' && f[1] == '/') f += 2; @@ -6118,86 +6047,48 @@ output_file_names () f = strrchr (f, '/'); files[i].fname = f == NULL ? files[i].path : f + 1; } - qsort (files + 1, line_file_table.in_use - 1, sizeof (files[0]), - file_info_cmp); + qsort (files + 1, file_table.in_use - 1, sizeof (files[0]), file_info_cmp); /* Find all the different directories used. */ dirs[0].path = files[1].path; dirs[0].length = files[1].fname - files[1].path; dirs[0].prefix = -1; - dirs[0].nbytes = files[1].length - dirs[1].length + 1; dirs[0].count = 1; dirs[0].dir_idx = 0; dirs[0].used = 0; files[1].dir_idx = 0; ndirs = 1; - for (i = 2; i < (int) line_file_table.in_use; ++i) + for (i = 2; i < (int) file_table.in_use; ++i) if (files[i].fname - files[i].path == dirs[ndirs - 1].length && memcmp (dirs[ndirs - 1].path, files[i].path, dirs[ndirs - 1].length) == 0) { /* Same directory as last entry. */ files[i].dir_idx = ndirs - 1; - dirs[ndirs - 1].nbytes += files[i].length - dirs[ndirs - 1].length + 1; ++dirs[ndirs - 1].count; } else { int j; - int max_idx; - int max_len; /* This is a new directory. */ dirs[ndirs].path = files[i].path; dirs[ndirs].length = files[i].fname - files[i].path; - dirs[ndirs].nbytes = files[i].length - dirs[i].length + 1; dirs[ndirs].count = 1; dirs[ndirs].dir_idx = ndirs; dirs[ndirs].used = 0; files[i].dir_idx = ndirs; /* Search for a prefix. */ - max_len = 0; - max_idx = 0; + dirs[ndirs].prefix = -1; for (j = 0; j < ndirs; ++j) - if (dirs[j].length > max_len) - { - int this_len = prefix_of (&dirs[j], &dirs[ndirs]); - - if (this_len > max_len) - { - max_len = this_len; - max_idx = j; - } - } - - /* Remember the prefix. If this is a known prefix simply - remember the index. Otherwise we will have to create an - artificial entry. */ - if (max_len == dirs[max_idx].length) - /* This is our prefix. */ - dirs[ndirs].prefix = max_idx; - else if (max_len > 0) - { - /* Create an entry without associated file. Since we have - to keep the dirs array sorted (means, entries with paths - which come first) we have to move the new entry in the - place of the old one. */ - dirs[++ndirs] = dirs[max_idx]; - - /* We don't have to set .path. */ - dirs[max_idx].length = max_len; - dirs[max_idx].nbytes = 0; - dirs[max_idx].count = 0; - dirs[max_idx].dir_idx = ndirs; - dirs[max_idx].used = 0; - dirs[max_idx].prefix = dirs[ndirs].prefix; - - dirs[ndirs - 1].prefix = dirs[ndirs].prefix = max_idx; - } - else - dirs[ndirs].prefix = -1; + if (dirs[j].length < dirs[ndirs].length + && dirs[j].length > 1 + && (dirs[ndirs].prefix == -1 + || dirs[j].length > dirs[dirs[ndirs].prefix].length) + && memcmp (dirs[j].path, dirs[ndirs].path, dirs[j].length) == 0) + dirs[ndirs].prefix = j; ++ndirs; } @@ -6218,7 +6109,7 @@ output_file_names () int j; int total; - /* We can always safe some space for the current directory. But + /* We can always save some space for the current directory. But this does not mean it will be enough to justify adding the directory. */ savehere[i] = dirs[i].length; @@ -6234,18 +6125,18 @@ output_file_names () dirs[j] path. */ int k; - k = dirs[j].prefix; - while (k != -1 && k != i) - k = dirs[k].prefix; - - if (k == i) - { - /* Yes it is. We can possibly safe some memory but - writing the filenames in dirs[j] relative to - dirs[i]. */ - savehere[j] = dirs[i].length; - total += (savehere[j] - saved[j]) * dirs[j].count; - } + k = dirs[j].prefix; + while (k != -1 && k != i) + k = dirs[k].prefix; + + if (k == i) + { + /* Yes it is. We can possibly safe some memory but + writing the filenames in dirs[j] relative to + dirs[i]. */ + savehere[j] = dirs[i].length; + total += (savehere[j] - saved[j]) * dirs[j].count; + } } } @@ -6253,7 +6144,7 @@ output_file_names () directory. */ if (total > dirs[i].length + 1) { - /* It's worthwhile adding. */ + /* It's worthwhile adding. */ for (j = i; j < ndirs; ++j) if (savehere[j] > 0) { @@ -6266,12 +6157,12 @@ output_file_names () } } - /* We have to emit them in the order they appear in the line_file_table + /* We have to emit them in the order they appear in the file_table array since the index is used in the debug info generation. To do this efficiently we generate a back-mapping of the indices first. */ - backmap = (int *) alloca (line_file_table.in_use * sizeof (int)); - for (i = 1; i < (int) line_file_table.in_use; ++i) + backmap = (int *) alloca (file_table.in_use * sizeof (int)); + for (i = 1; i < (int) file_table.in_use; ++i) { backmap[files[i].file_idx] = i; /* Mark this directory as used. */ @@ -6301,7 +6192,7 @@ output_file_names () dirs[0].used = 0; /* Now write all the file names. */ - for (i = 1; i < (int) line_file_table.in_use; ++i) + for (i = 1; i < (int) file_table.in_use; ++i) { int file_idx = backmap[i]; int dir_idx = dirs[files[file_idx].dir_idx].dir_idx; @@ -6328,7 +6219,7 @@ output_file_names () static void output_line_info () { - char l1[20], l2[20]; + char l1[20], l2[20], p1[20], p2[20]; char line_label[MAX_ARTIFICIAL_LABEL_BYTES]; char prev_line_label[MAX_ARTIFICIAL_LABEL_BYTES]; register unsigned opc; @@ -6342,6 +6233,8 @@ output_line_info () ASM_GENERATE_INTERNAL_LABEL (l1, LINE_NUMBER_BEGIN_LABEL, 0); ASM_GENERATE_INTERNAL_LABEL (l2, LINE_NUMBER_END_LABEL, 0); + ASM_GENERATE_INTERNAL_LABEL (p1, LN_PROLOG_AS_LABEL, 0); + ASM_GENERATE_INTERNAL_LABEL (p2, LN_PROLOG_END_LABEL, 0); dw2_asm_output_delta (DWARF_OFFSET_SIZE, l2, l1, "Length of Source Line Info"); @@ -6349,8 +6242,8 @@ output_line_info () dw2_asm_output_data (2, DWARF_VERSION, "DWARF Version"); - dw2_asm_output_data (DWARF_OFFSET_SIZE, size_of_line_prolog (), - "Prolog Length"); + dw2_asm_output_delta (DWARF_OFFSET_SIZE, p2, p1, "Prolog Length"); + ASM_OUTPUT_LABEL (asm_out_file, p1); dw2_asm_output_data (1, DWARF_LINE_MIN_INSTR_LENGTH, "Minimum Instruction Length"); @@ -6389,6 +6282,7 @@ output_line_info () /* Write out the information about the files we use. */ output_file_names (); + ASM_OUTPUT_LABEL (asm_out_file, p2); /* We used to set the address register to the first location in the text section here, but that didn't accomplish anything since we already @@ -6451,7 +6345,7 @@ output_line_info () current_file = line_info->dw_file_num; dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file"); dw2_asm_output_data_uleb128 (current_file, "(\"%s\")", - line_file_table.table[current_file]); + file_table.table[current_file]); } /* Emit debug info for the current line number, choosing the encoding @@ -6562,7 +6456,7 @@ output_line_info () current_file = line_info->dw_file_num; dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file"); dw2_asm_output_data_uleb128 (current_file, "(\"%s\")", - line_file_table.table[current_file]); + file_table.table[current_file]); } /* Emit debug info for the current line number, choosing the encoding @@ -8570,8 +8464,7 @@ add_src_coords_attributes (die, decl) register dw_die_ref die; register tree decl; { - register unsigned file_index = lookup_filename (&decl_file_table, - DECL_SOURCE_FILE (decl)); + register unsigned file_index = lookup_filename (DECL_SOURCE_FILE (decl)); add_AT_unsigned (die, DW_AT_decl_file, file_index); add_AT_unsigned (die, DW_AT_decl_line, DECL_SOURCE_LINE (decl)); @@ -9315,8 +9208,7 @@ gen_subprogram_die (decl, context_die) } else if (old_die) { - register unsigned file_index - = lookup_filename (&decl_file_table, DECL_SOURCE_FILE (decl)); + unsigned file_index = lookup_filename (DECL_SOURCE_FILE (decl)); if (!get_AT_flag (old_die, DW_AT_declaration) /* We can have a normal definition following an inline one in the @@ -9577,8 +9469,7 @@ gen_variable_die (decl, context_die) add_AT_die_ref (var_die, DW_AT_specification, old_die); if (DECL_NAME (decl)) { - register unsigned file_index - = lookup_filename (&decl_file_table, DECL_SOURCE_FILE (decl)); + unsigned file_index = lookup_filename (DECL_SOURCE_FILE (decl)); if (get_AT_unsigned (old_die, DW_AT_decl_file) != file_index) add_AT_unsigned (var_die, DW_AT_decl_file, file_index); @@ -10620,7 +10511,7 @@ dwarf2out_add_library_unit_info (filename, context_list) TREE_PUBLIC (context_list_decl) = TRUE; add_name_attribute (unit_die, context_list); - file_index = lookup_filename (&decl_file_table, filename); + file_index = lookup_filename (filename); add_AT_unsigned (unit_die, DW_AT_decl_file, file_index); add_pubname (context_list_decl, unit_die); } @@ -10794,54 +10685,57 @@ dwarf2out_ignore_block (block) was looked up last. This handles the majority of all searches. */ static unsigned -lookup_filename (t, file_name) - struct file_table *t; +lookup_filename (file_name) const char *file_name; { register unsigned i; + /* ??? Why isn't DECL_SOURCE_FILE left null instead. */ + if (strcmp (file_name, "") == 0 + || strcmp (file_name, "") == 0) + return 0; + /* Check to see if the file name that was searched on the previous call matches this file name. If so, return the index. */ - if (t->last_lookup_index != 0) - if (strcmp (file_name, t->table[t->last_lookup_index]) == 0) - return t->last_lookup_index; + if (file_table.last_lookup_index != 0) + if (strcmp (file_name, file_table.table[file_table.last_lookup_index]) == 0) + return file_table.last_lookup_index; /* Didn't match the previous lookup, search the table */ - for (i = 1; i < t->in_use; ++i) - if (strcmp (file_name, t->table[i]) == 0) + for (i = 1; i < file_table.in_use; ++i) + if (strcmp (file_name, file_table.table[i]) == 0) { - t->last_lookup_index = i; + file_table.last_lookup_index = i; return i; } /* Prepare to add a new table entry by making sure there is enough space in the table to do so. If not, expand the current table. */ - if (i == t->allocated) + if (i == file_table.allocated) { - t->allocated = i + FILE_TABLE_INCREMENT; - t->table = (char **) - xrealloc (t->table, t->allocated * sizeof (char *)); + file_table.allocated = i + FILE_TABLE_INCREMENT; + file_table.table = (char **) + xrealloc (file_table.table, file_table.allocated * sizeof (char *)); } /* Add the new entry to the end of the filename table. */ - t->table[i] = xstrdup (file_name); - t->in_use = i + 1; - t->last_lookup_index = i; + file_table.table[i] = xstrdup (file_name); + file_table.in_use = i + 1; + file_table.last_lookup_index = i; return i; } static void -init_file_table (t) - struct file_table *t; +init_file_table () { /* Allocate the initial hunk of the file_table. */ - t->table = (char **) xcalloc (FILE_TABLE_INCREMENT, sizeof (char *)); - t->allocated = FILE_TABLE_INCREMENT; + file_table.table = (char **) xcalloc (FILE_TABLE_INCREMENT, sizeof (char *)); + file_table.allocated = FILE_TABLE_INCREMENT; /* Skip the first entry - file numbers begin at 1. */ - t->in_use = 1; - t->last_lookup_index = 0; + file_table.in_use = 1; + file_table.last_lookup_index = 0; } /* Output a label to mark the beginning of a source code line entry @@ -10859,28 +10753,10 @@ dwarf2out_line (filename, line) if (DWARF2_ASM_LINE_DEBUG_INFO) { -#if 0 - unsigned old_in_use = line_file_table.in_use; -#endif - unsigned file_num = lookup_filename (&line_file_table, filename); + unsigned file_num = lookup_filename (filename); - /* Emit the .file and .loc directives understood by GNU as. */ -#if 0 - /* ??? As of 2000-11-25, gas has a bug in which it doesn't - actually use the file number argument. It merely remembers - the last .file directive emitted. */ - if (file_num >= old_in_use) - fprintf (asm_out_file, "\t.file %d \"%s\"\n", file_num, filename); + /* Emit the .loc directive understood by GNU as. */ fprintf (asm_out_file, "\t.loc %d %d 0\n", file_num, line); -#else - static unsigned int last_file_num; - if (file_num != last_file_num) - { - last_file_num = file_num; - fprintf (asm_out_file, "\t.file 0 \"%s\"\n", filename); - } - fprintf (asm_out_file, "\t.loc 0 %d 0\n", line); -#endif /* Indicate that line number info exists. */ ++line_info_table_in_use; @@ -10913,7 +10789,7 @@ dwarf2out_line (filename, line) /* Add the new entry at the end of the line_info_table. */ line_info = &separate_line_info_table[separate_line_info_table_in_use++]; - line_info->dw_file_num = lookup_filename (&line_file_table, filename); + line_info->dw_file_num = lookup_filename (filename); line_info->dw_line_num = line; line_info->function = current_funcdef_number; } @@ -10940,7 +10816,7 @@ dwarf2out_line (filename, line) /* Add the new entry at the end of the line_info_table. */ line_info = &line_info_table[line_info_table_in_use++]; - line_info->dw_file_num = lookup_filename (&line_file_table, filename); + line_info->dw_file_num = lookup_filename (filename); line_info->dw_line_num = line; } } @@ -11012,8 +10888,7 @@ dwarf2out_init (asm_out_file, main_input_filename) /* Remember the name of the primary input file. */ primary_filename = main_input_filename; - init_file_table (&decl_file_table); - init_file_table (&line_file_table); + init_file_table (); /* Allocate the initial hunk of the decl_die_table. */ decl_die_table -- 2.30.2