diff options
author | Doug Evans <dje@google.com> | 1998-01-30 19:13:17 +0000 |
---|---|---|
committer | Doug Evans <dje@google.com> | 1998-01-30 19:13:17 +0000 |
commit | d341ae3fefdd4fbd7a02a81ab6d7bb06f68e2517 (patch) | |
tree | 026391c358e64f8de33b0ff5585706944183d4e8 /gas | |
parent | 577e9a32f71bd8593df0ab7b7595f4da171f15b5 (diff) | |
download | gdb-d341ae3fefdd4fbd7a02a81ab6d7bb06f68e2517.zip gdb-d341ae3fefdd4fbd7a02a81ab6d7bb06f68e2517.tar.gz gdb-d341ae3fefdd4fbd7a02a81ab6d7bb06f68e2517.tar.bz2 |
* read.h (include_dirs): Declare.
(include_dir_count,include_dir_maxlen): Declare.
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 5 | ||||
-rw-r--r-- | gas/read.c | 81 |
2 files changed, 75 insertions, 11 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 78ed117..5122637 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +Fri Jan 30 11:02:35 1998 Doug Evans <devans@canuck.cygnus.com> + + * read.h (include_dirs): Declare. + (include_dir_count,include_dir_maxlen): Declare. + Fri Jan 30 11:47:02 1998 Ian Lance Taylor <ian@cygnus.com> * listing.c (buffer_line): If we can't open the file, set at_end. @@ -1,5 +1,5 @@ /* read.c - read a source file - - Copyright (C) 1986, 87, 90, 91, 92, 93, 94, 95, 96, 1997 + Copyright (C) 1986, 87, 90, 91, 92, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -165,12 +165,12 @@ static char *old_buffer; /* JF a hack */ static char *old_input; static char *old_limit; -/* Variables for handling include file directory list. */ +/* Variables for handling include file directory table. */ -char **include_dirs; /* List of pointers to directories to +char **include_dirs; /* Table of pointers to directories to search for .include's */ -int include_dir_count; /* How many are in the list */ -int include_dir_maxlen = 1;/* Length of longest in list */ +int include_dir_count; /* How many are in the table */ +int include_dir_maxlen = 1;/* Length of longest in table */ #ifndef WORKING_DOT_WORD struct broken_word *broken_words; @@ -197,6 +197,15 @@ symbolS *mri_common_symbol; may be needed. */ static int mri_pending_align; +#ifndef NO_LISTING +#ifdef OBJ_ELF +/* This variable is set to be non-zero if the next string we see might + be the name of the source file in DWARF debugging information. See + the comment in emit_expr for the format we look for. */ +static int dwarf_file_string; +#endif +#endif + static void cons_worker PARAMS ((int, int)); static int scrub_from_string PARAMS ((char **)); static void do_align PARAMS ((int, char *, int, int)); @@ -3263,6 +3272,45 @@ emit_expr (exp, nbytes) else dwarf_line = -1; } + + /* When gcc emits DWARF 1 debugging pseudo-ops, a file name will + appear as a 2 byte TAG_compile_unit (0x11) followed by a 2 byte + AT_sibling (0x12) followed by a four byte address of the sibling + followed by a 2 byte AT_name (0x38) followed by the name of the + file. We look for that case here. */ + { + static int dwarf_file = 0; + + if (strcmp (segment_name (now_seg), ".debug") != 0) + dwarf_file = 0; + else if (dwarf_file == 0 + && nbytes == 2 + && exp->X_op == O_constant + && exp->X_add_number == 0x11) + dwarf_file = 1; + else if (dwarf_file == 1 + && nbytes == 2 + && exp->X_op == O_constant + && exp->X_add_number == 0x12) + dwarf_file = 2; + else if (dwarf_file == 2 + && nbytes == 4) + dwarf_file = 3; + else if (dwarf_file == 3 + && nbytes == 2 + && exp->X_op == O_constant + && exp->X_add_number == 0x38) + dwarf_file = 4; + else + dwarf_file = 0; + + /* The variable dwarf_file_string tells stringer that the string + may be the name of the source file. */ + if (dwarf_file == 4) + dwarf_file_string = 1; + else + dwarf_file_string = 0; + } #endif #endif @@ -4328,11 +4376,14 @@ stringer (append_zero) /* Worker to do .ascii etc statements. */ #ifndef NO_LISTING #ifdef OBJ_ELF /* In ELF, when gcc is emitting DWARF 1 debugging output, it - will emit .string with a filename in the .debug_sfnames - section to indicate a file name. I don't know if this - will work for compilers other than gcc, and I don't know - if it will work for DWARF 2. */ - if (strcmp (segment_name (now_seg), ".debug_sfnames") == 0) + will emit .string with a filename in the .debug section + after a sequence of constants. See the comment in + emit_expr for the sequence. emit_expr will set + dwarf_file_string to non-zero if this string might be a + source file name. */ + if (strcmp (segment_name (now_seg), ".debug") != 0) + dwarf_file_string = 0; + else if (dwarf_file_string) { c = input_line_pointer[-1]; input_line_pointer[-1] = '\0'; @@ -4699,7 +4750,15 @@ s_include (arg) char *path; if (! flag_m68k_mri) - filename = demand_copy_string (&i); + { + filename = demand_copy_string (&i); + if (filename == NULL) + { + /* demand_copy_string has already printed an error and + called ignore_rest_of_line. */ + return; + } + } else { SKIP_WHITESPACE (); |