This is the mail archive of the gas2@sourceware.cygnus.com mailing list for the gas2 project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

patch for listing.c


I found that listings in gas (dd. 940823) can get thoroughly confused
about line numbers when processing included files (or cpp generated
directives).

-pk


*** /usr/local/src/gnu/ARCHIVE/gas-940823/gas/listing.c	Fri May 27 18:55:56 1994
--- ./listing.c	Mon Aug 29 15:58:51 1994
***************
*** 301,312 ****
    char *file;
    unsigned int line;
    static unsigned int last_line = 0xffff;
    list_info_type *new;
  
    as_where (&file, &line);
!   if (line != last_line)
      {
        last_line = line;
        new_frag ();
  
        new = (list_info_type *) xmalloc (sizeof (list_info_type));
--- 249,262 ----
    char *file;
    unsigned int line;
    static unsigned int last_line = 0xffff;
+   static char *last_file = NULL;
    list_info_type *new;
  
    as_where (&file, &line);
!   if (line != last_line || last_file && file && strcmp(file, last_file))
      {
        last_line = line;
+       last_file = file;
        new_frag ();
  
        new = (list_info_type *) xmalloc (sizeof (list_info_type));
***************
*** 728,734 ****
--- 678,688 ----
        if (S_GET_NAME (ptr) && strlen (S_GET_NAME (ptr)) != 0)
  	{
  	  if (ptr->sy_frag->line == 0
+ #ifdef notyet
  	      && S_GET_SEGMENT (ptr) != reg_section)
+ #else
+ 	      && !S_IS_REGISTER(ptr))
+ #endif
  	    {
  	      if (!got_some)
  		{
***************
*** 885,896 ****
  	      print_source (current_hll_file, list, buffer, width);
  	    }
  
! 	  p = buffer_line (list->file, buffer, width);
  
! 	  if (!((listing & LISTING_NODEBUG) && debugging_pseudo (p)))
! 	    {
! 	      print_lines (list, p, calc_hex (list));
! 	    }
  
  	  if (list->edict == EDICT_EJECT)
  	    {
--- 839,853 ----
  	      print_source (current_hll_file, list, buffer, width);
  	    }
  
! 	  while (list->file->file &&
! 		 list->file->linenum < list->line && !list->file->end_pending) {
! 		  p = buffer_line (list->file, buffer, width);
  
! 		  if (!((listing & LISTING_NODEBUG) && debugging_pseudo (p)))
! 		    {
! 		      print_lines (list, p, calc_hex (list));
! 		    }
! 	  }
  
  	  if (list->edict == EDICT_EJECT)
  	    {
***************
*** 900,906 ****
        else
  	{
  
! 	  p = buffer_line (list->file, buffer, width);
  	}
  
        list = list->next;
--- 857,865 ----
        else
  	{
  
! 	  while (list->file->file &&
! 		 list->file->linenum < list->line && !list->file->end_pending)
! 		  p = buffer_line (list->file, buffer, width);
  	}
  
        list = list->next;