GDB for Xenix 386 with GCC (part 2 of 4)

Steve.Bleazard at RoboBar.Co.UK Steve.Bleazard at RoboBar.Co.UK
Tue May 8 21:18:06 AEST 1990


This is part two of a coordinated set of 4 patches for Xenix GCC, GAS and GDB.
Please collect all parts before you start hacking :-)

This is part 2 which patches GAS, say |patch -p -d /usr/local/src/gas-1.35
or whatever.   Please ensure that ALL my patches for GAS under Xenix 386
(original + 1 bugfix == 2 prior patches) have already been applied.

#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
#	gas-dbxpch.01
# This archive created: Tue May  8 09:39:30 1990
export PATH; PATH=/bin:$PATH
echo shar: extracting "'gas-dbxpch.01'" '(13414 characters)'
if test -f 'gas-dbxpch.01'
then
	echo shar: will not over-write existing file "'gas-dbxpch.01'"
else
sed 's/^X//' << \SHAR_EOF > 'gas-dbxpch.01'
X*** ../gas-1.35.old/i386.c	Mon Mar  5 20:11:07 1990
X--- ./i386.c	Mon May  7 17:29:27 1990
X***************
X*** 1042,1046 ****
X  	/* I caught it failing with obstack_room == 6,
X  	   so I changed to <=   pace */
X! 	if (obstack_room (&frags) <= 6) frag_new (0);
X  	p = frag_more (1);
X  	p[0] = t->base_opcode;
X--- 1042,1046 ----
X  	/* I caught it failing with obstack_room == 6,
X  	   so I changed to <=   pace */
X! 	if (obstack_room (&frags) <= 6) { frag_wane(frag_now);  frag_new (0); }
X  	p = frag_more (1);
X  	p[0] = t->base_opcode;
X*** ../gas-1.35.old/msomf.h	Mon May  7 17:26:26 1990
X--- ./msomf.h	Tue May  1 10:01:23 1990
X***************
X*** 6,10 ****
X--- 6,13 ----
X  #define SDEF_CONST	3
X  #define SDEF_BSS	4
X+ #define SDEF_SYMBOLS	5
X+ #define SDEF_TYPES	6
X  #define SDEF_SIZE	4
X+ #define SDEF_G_SIZE	6
X  
X  #define GDEF_DGROUP	1
X*** ../gas-1.35.old/write.c	Mon May  7 17:28:28 1990
X--- ./write.c	Tue May  1 16:45:59 1990
X***************
X*** 48,51 ****
X--- 48,57 ----
X  #endif /* M_XENIX */
X  
X+ #if __STDC__
X+ #include <stddef.h>
X+ #else
X+ #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
X+ #endif
X+ 
X  void	append();
X  
X***************
X*** 87,90 ****
X--- 93,99 ----
X  
X  static long int string_byte_count;
X+ #ifdef M_XENIX
X+ static long int stab_symbol_count;
X+ #endif /* M_XENIX */
X  
X  static char *		the_object_file;
X***************
X*** 154,157 ****
X--- 163,195 ----
X  }
X  
X+ #ifdef M_XENIX
X+ threads(type, trgt_thrd, frm_thrd)
X+ int type;
X+ int *trgt_thrd, *frm_thrd;
X+ {
X+ 	  switch (type)
X+ 	  {
X+ 	    case PRIVDATA:	*trgt_thrd = DATA_TGT_THREAD;
X+ 				*frm_thrd = DGROUP_FRAME_THREAD;
X+ 				break;
X+ 	    case PRIVBSS:	*trgt_thrd = BSS_TGT_THREAD;
X+ 				*frm_thrd = DGROUP_FRAME_THREAD;
X+ 				break;
X+ 	    case PRIVTEXT:	*trgt_thrd = TEXT_TGT_THREAD;
X+ 				*frm_thrd = TEXT_FRAME_THREAD;
X+ 				break;
X+ 	    case PUBLICDATA:	*trgt_thrd = DATA_TGT_THREAD;
X+ 				*frm_thrd = DGROUP_FRAME_THREAD;
X+ 				break;
X+ 	    case PUBLICTEXT:	*trgt_thrd = TEXT_TGT_THREAD;
X+ 				*frm_thrd = TEXT_FRAME_THREAD;
X+ 				break;
X+ 	    default:		*trgt_thrd = CONST_TGT_THREAD;
X+ 				*frm_thrd = DGROUP_FRAME_THREAD;
X+ 				break;
X+ 	  }
X+ }
X+ #endif /* M_XENIX */
X+ 
X  void
X  write_object_file()
X***************
X*** 377,381 ****
X      symbol_number = 0;
X  #else /* M_XENIX */
X!     symbol_number = 1;
X  #endif /* M_XENIX */
X  
X--- 415,419 ----
X      symbol_number = 0;
X  #else /* M_XENIX */
X!     symbol_number = 1;  stab_symbol_count = 0;
X  #endif /* M_XENIX */
X  
X***************
X*** 409,418 ****
X  	    else
X  	    	symbolP -> sy_number = 0;
X  #else /* M_XENIX */
X  	    symbolP -> sy_number = symbol_number ++;
X  #endif /* M_XENIX */
X- #ifndef M_XENIX
X  #ifndef	VMS
X  	    if (name)
X  	      {			/* Ordinary case. */
X  		symbolP -> sy_name_offset = string_byte_count;
X--- 447,461 ----
X  	    else
X  	    	symbolP -> sy_number = 0;
X+ 	    if (symbolP->sy_nlist.n_type&N_STAB)
X+ 		stab_symbol_count++;
X  #else /* M_XENIX */
X  	    symbolP -> sy_number = symbol_number ++;
X  #endif /* M_XENIX */
X  #ifndef	VMS
X+ #ifndef M_XENIX
X  	    if (name)
X+ #else /* M_XENIX */
X+ 	    if (name && symbolP->sy_nlist.n_type&N_STAB)
X+ #endif /* M_XENIX */
X  	      {			/* Ordinary case. */
X  		symbolP -> sy_name_offset = string_byte_count;
X***************
X*** 421,425 ****
X  	    else			/* .Stabd case. */
X  #endif	/* not VMS */
X- #endif /* not M_XENIX */
X  		symbolP -> sy_name_offset = 0;
X  	    symbolPP = & (symbolP -> sy_next);
X--- 464,467 ----
X***************
X*** 757,761 ****
X    output_file_create (out_file_name);
X    omf_initialize_a_out(output_file_desc(), module_name, text_siz, data_siz,
X! 		       (long) local_bss_counter, 0L);
X  
X  /*  Traverse the symbol chain emitting external symbol definitions
X--- 799,805 ----
X    output_file_create (out_file_name);
X    omf_initialize_a_out(output_file_desc(), module_name, text_siz, data_siz,
X! 		       (long) local_bss_counter, 0L,
X! 		       flagseen['g'], stab_symbol_count * sizeof(struct nlist),
X! 		       string_byte_count);
X  
X  /*  Traverse the symbol chain emitting external symbol definitions
X***************
X*** 783,787 ****
X    for (   symbolP = symbol_rootP;   symbolP;   symbolP = symbolP -> sy_next   )
X    {
X!       if (PUBLIC(symbolP->sy_type))
X      {
X          unsigned int group = 0, segment = 0;
X--- 827,831 ----
X    for (   symbolP = symbol_rootP;   symbolP;   symbolP = symbolP -> sy_next   )
X    {
X!     if (PUBLIC(symbolP->sy_type))
X      {
X          unsigned int group = 0, segment = 0;
X***************
X*** 867,891 ****
X  		  int external = EXTDEF(symbolP->sy_type);
X  
X! 		  switch (symbolP->sy_type)
X! 		  {
X! 		    case PRIVDATA:	trgt_thrd = DATA_TGT_THREAD;
X! 					frm_thrd = DGROUP_FRAME_THREAD;
X! 					break;
X! 		    case PRIVBSS:	trgt_thrd = BSS_TGT_THREAD;
X! 					frm_thrd = DGROUP_FRAME_THREAD;
X! 					break;
X! 		    case PRIVTEXT:	trgt_thrd = TEXT_TGT_THREAD;
X! 					frm_thrd = TEXT_FRAME_THREAD;
X! 					break;
X! 		    case PUBLICDATA:	trgt_thrd = DATA_TGT_THREAD;
X! 					frm_thrd = DGROUP_FRAME_THREAD;
X! 					break;
X! 		    case PUBLICTEXT:	trgt_thrd = TEXT_TGT_THREAD;
X! 					frm_thrd = TEXT_FRAME_THREAD;
X! 					break;
X! 		    default:		trgt_thrd = CONST_TGT_THREAD;
X! 					frm_thrd = DGROUP_FRAME_THREAD;
X! 					break;
X! 		  }
X  		  if (fixP->fx_pcrel)
X  			frm_thrd = TEXT_FRAME_THREAD;
X--- 911,915 ----
X  		  int external = EXTDEF(symbolP->sy_type);
X  
X! 		  threads(symbolP->sy_type, &trgt_thrd, &frm_thrd);
X  		  if (fixP->fx_pcrel)
X  			frm_thrd = TEXT_FRAME_THREAD;
X***************
X*** 959,983 ****
X  		  int external = EXTDEF(symbolP->sy_type);
X  
X! 		  switch (symbolP->sy_type)
X! 		  {
X! 		    case PRIVDATA:	trgt_thrd = DATA_TGT_THREAD;
X! 					frm_thrd = DGROUP_FRAME_THREAD;
X! 					break;
X! 		    case PRIVBSS:	trgt_thrd = BSS_TGT_THREAD;
X! 					frm_thrd = DGROUP_FRAME_THREAD;
X! 					break;
X! 		    case PRIVTEXT:	trgt_thrd = TEXT_TGT_THREAD;
X! 					frm_thrd = TEXT_FRAME_THREAD;
X! 					break;
X! 		    case PUBLICDATA:	trgt_thrd = DATA_TGT_THREAD;
X! 					frm_thrd = DGROUP_FRAME_THREAD;
X! 					break;
X! 		    case PUBLICTEXT:	trgt_thrd = TEXT_TGT_THREAD;
X! 					frm_thrd = TEXT_FRAME_THREAD;
X! 					break;
X! 		    default:		trgt_thrd = CONST_TGT_THREAD;
X! 					frm_thrd = DGROUP_FRAME_THREAD;
X! 					break;
X! 		  }
X  		  if (fixP->fx_pcrel)
X  			frm_thrd = TEXT_FRAME_THREAD;
X--- 983,987 ----
X  		  int external = EXTDEF(symbolP->sy_type);
X  
X! 		  threads(symbolP->sy_type, &trgt_thrd, &frm_thrd);
X  		  if (fixP->fx_pcrel)
X  			frm_thrd = TEXT_FRAME_THREAD;
X***************
X*** 1004,1007 ****
X--- 1008,1140 ----
X        }
X    }
X+ 
X+ /*  Traverse the symbol chain emitting stabs.
X+  */
X+ 
X+ #define VAL_OFF offsetof(struct nlist, n_value)
X+ 
X+   if (flagseen['g'] && stab_symbol_count)
X+   {   
X+       long count = 0, ncount = 0;
X+       symbolS *last_startP;
X+       char *temp;
X+       symbolS *fsymP;
X+       int i;
X+       int start_fixup = 0;
X+ 
X+       omf_start_ledata(I386, SDEF_SYMBOLS, 0);
X+       last_startP = symbol_rootP;
X+       for (symbolP = symbol_rootP; symbolP; symbolP = symbolP -> sy_next)
X+       {
X+ 	 if (symbolP->sy_nlist.n_type & N_STAB)
X+ 	 {
X+             if ((ncount + 1) * sizeof(struct nlist) >= 1016)
X+             {
X+                omf_end_ledata();
X+ 
X+                /* emit relocations */
X+ 
X+                start_fixup = 0;
X+ 	       for (i = 0, fsymP=last_startP; i < ncount; fsymP=fsymP->sy_next)
X+ 	       {
X+ 	          if (fsymP->sy_nlist.n_type & N_STAB)
X+ 		  {
X+                      if (fsymP->sy_type & N_TYPE) /* if relocation required */
X+ 		     {
X+ 		       int trgt_thrd, frm_thrd;
X+ 		       int external = EXTDEF(fsymP->sy_type & N_TYPE);
X+ 
X+ 		       threads(fsymP->sy_type & N_TYPE,&trgt_thrd,&frm_thrd);
X+ 		       if (!start_fixup)
X+ 		       {
X+                            omf_start_fixup(I386);
X+ 			   start_fixup++;
X+ 		       }
X+ 		       omf_fixup(I386, 1, /* segment relative */
X+ 		          LOC_OFFSET32, i * sizeof(struct nlist) + VAL_OFF,
X+     			  external ? 0 : 1,
X+     			  external ? FRM_TRGT : frm_thrd,
X+     			  external ? 0 : 1,
X+     			  external ? TGT_EI : trgt_thrd,
X+     			  1, /* No offset */
X+ 			  0, /* No frame required */
X+     			  external ? fsymP->sy_number : 0,
X+ 			  0);
X+ 		     }
X+ 		     i++;
X+ 		  }
X+ 	       }
X+ 	       if (start_fixup)
X+                   omf_end_fixup();
X+ 
X+                /* start new segment */
X+ 
X+                ncount = 0;  last_startP = symbolP;
X+                omf_start_ledata(I386, SDEF_SYMBOLS, count*sizeof(struct nlist));
X+             }
X+             temp = symbolP->sy_nlist.n_un.n_name;
X+             symbolP->sy_nlist.n_un.n_strx = symbolP->sy_name_offset;
X+             omf_ledata(&(symbolP->sy_nlist), sizeof(struct nlist));
X+             symbolP->sy_nlist.n_un.n_name = temp;
X+    	    ncount++;  count++;
X+ 	 }
X+       }
X+       omf_end_ledata();
X+       start_fixup = 0;
X+       for (i = 0, fsymP = last_startP; i < ncount; fsymP = fsymP->sy_next)
X+       {
X+          if (fsymP->sy_nlist.n_type & N_STAB)
X+ 	 {
X+             if (fsymP->sy_type & N_TYPE) /* if relocation required */
X+ 	    {
X+ 	      int trgt_thrd, frm_thrd;
X+ 	      int external = EXTDEF(fsymP->sy_type & N_TYPE);
X+ 
X+ 	      threads(fsymP->sy_type & N_TYPE,&trgt_thrd,&frm_thrd);
X+ 	      if (!start_fixup)
X+               {
X+                  omf_start_fixup(I386);
X+                  start_fixup++;
X+               }
X+ 	      omf_fixup(I386, 1, /* segment relative */
X+ 	         LOC_OFFSET32, i * sizeof(struct nlist) + VAL_OFF,
X+    		  external ? 0 : 1,
X+    		  external ? FRM_TRGT : frm_thrd,
X+    		  external ? 0 : 1,
X+    		  external ? TGT_EI : trgt_thrd,
X+    		  1, /* No offset */
X+                   0, /* No frame required */
X+    		  external ? fsymP->sy_number : 0,
X+ 		  0);
X+ 	    }
X+ 	    i++;
X+ 	 }
X+       }
X+       if (start_fixup)
X+          omf_end_fixup();
X+ 
X+       count = sizeof(string_byte_count);  ncount = count;
X+       omf_start_ledata(I386, SDEF_TYPES, 0);
X+       omf_ledata(&string_byte_count, sizeof(string_byte_count));
X+       for (symbolP = symbol_rootP; symbolP; symbolP = symbolP -> sy_next)
X+       {
X+          if (symbolP->sy_nlist.n_type & N_STAB && symbolP -> sy_name)
X+ 	 {
X+ 	    int len = strlen(symbolP -> sy_name) + 1;
X+ 
X+ 	    if (ncount + len > 1016)
X+ 	    {
X+ 	       omf_end_ledata();
X+                omf_start_ledata(I386, SDEF_TYPES, count);
X+ 	       ncount = 0;
X+ 	    }
X+             omf_ledata(symbolP->sy_name, len);
X+ 	    count += len;  ncount += len;
X+ 	 }
X+       }
X+       omf_end_ledata();
X+   }
X+   
X+ 
X    omf_modend(I386);
X    output_file_close (out_file_name);
X*** ../gas-1.35.old/xenixomf.c	Mon May  7 17:26:26 1990
X--- ./xenixomf.c	Wed May  2 11:03:47 1990
X***************
X*** 544,548 ****
X--- 544,553 ----
X  #define L_UBSS		8
X  #define L_BSS		9
X+ #define L_TYPES		10
X+ #define L_DEBTYP	11
X+ #define L_SYMBOLS	12
X+ #define L_DEBSYM	13
X  #define L_TSIZE		9
X+ #define L_G_TSIZE	13
X  
X  char *lnames_tab[] = {
X***************
X*** 556,560 ****
X  	"CONST",
X  	"_BSS",
X! 	"BSS"
X  };
X  
X--- 561,569 ----
X  	"CONST",
X  	"_BSS",
X! 	"BSS",
X! 	"$$TYPES",
X! 	"DEBTYP",
X! 	"$$SYMBOLS",
X! 	"DEBSYM"
X  };
X  
X***************
X*** 573,577 ****
X  	{SD_DWORD|SD_PUBLIC|SD_PGRES, 0, L_UDATA, L_DATA},
X  	{SD_DWORD|SD_PUBLIC|SD_PGRES, 0, L_CONST, L_CONST},
X! 	{SD_DWORD|SD_PUBLIC|SD_PGRES, 0, L_UBSS, L_BSS}
X  };
X  
X--- 582,588 ----
X  	{SD_DWORD|SD_PUBLIC|SD_PGRES, 0, L_UDATA, L_DATA},
X  	{SD_DWORD|SD_PUBLIC|SD_PGRES, 0, L_CONST, L_CONST},
X! 	{SD_DWORD|SD_PUBLIC|SD_PGRES, 0, L_UBSS, L_BSS},
X! 	{SD_BYTE|SD_PGRES, 0, L_SYMBOLS, L_DEBSYM},
X! 	{SD_BYTE|SD_PGRES, 0, L_TYPES, L_DEBTYP}
X  };
X  
X***************
X*** 592,596 ****
X  #define NUMFIXEDCOMMENTS 4
X  
X! static unsigned char gas_comment[] = "gas-1.34";
X  static unsigned char lib_comment[] = "SLIBCE";
X  static unsigned char model_comment[] = "3s";
X--- 603,607 ----
X  #define NUMFIXEDCOMMENTS 4
X  
X! static unsigned char gas_comment[] = "gas-1.35c";
X  static unsigned char lib_comment[] = "SLIBCE";
X  static unsigned char model_comment[] = "3s";
X***************
X*** 604,611 ****
X  };
X  
X! void omf_initialize_a_out(fd, name, text_size, data_size, bss_size, const_size)
X  int fd;
X  unsigned char *name;
X  long text_size, data_size, bss_size, const_size;
X  {
X  	int i;
X--- 615,625 ----
X  };
X  
X! void omf_initialize_a_out(fd, name, text_size, data_size, bss_size, const_size,
X! 			  gdb, syms_size, str_size)
X  int fd;
X  unsigned char *name;
X  long text_size, data_size, bss_size, const_size;
X+ int gdb;
X+ long syms_size, str_size;
X  {
X  	int i;
X***************
X*** 622,626 ****
X  
X  	omf_start_lnames();
X! 	for (i = 1; i <= L_TSIZE; i++)
X  		omf_lnames(lnames_tab[i]);
X  	omf_end_lnames();
X--- 636,640 ----
X  
X  	omf_start_lnames();
X! 	for (i = 1; i <= (gdb ? L_G_TSIZE : L_TSIZE); i++)
X  		omf_lnames(lnames_tab[i]);
X  	omf_end_lnames();
X***************
X*** 632,636 ****
X  	segt[SDEF_BSS].length = bss_size;
X  	segt[SDEF_CONST].length = const_size;
X! 	for (i = 1; i <= SDEF_SIZE; i++)
X  		omf_segdef(I386, segt[i].attrib, 0, 0L, segt[i].length,
X  			   segt[i].nameindex, segt[i].classindex);
X--- 646,655 ----
X  	segt[SDEF_BSS].length = bss_size;
X  	segt[SDEF_CONST].length = const_size;
X! 	if (gdb)
X! 	{
X! 		segt[SDEF_SYMBOLS].length = syms_size;
X! 		segt[SDEF_TYPES].length = str_size;
X! 	}
X! 	for (i = 1; i <= (gdb ? SDEF_G_SIZE : SDEF_SIZE); i++)
X  		omf_segdef(I386, segt[i].attrib, 0, 0L, segt[i].length,
X  			   segt[i].nameindex, segt[i].classindex);
SHAR_EOF
if test 13414 -ne "`wc -c < 'gas-dbxpch.01'`"
then
	echo shar: error transmitting "'gas-dbxpch.01'" '(should have been 13414 characters)'
fi
fi # end of overwriting check
#	End of shell archive
exit 0



More information about the Alt.sources mailing list