[gnu.utils.bug] perprocess variable diffs to gas

ham@Neon.Stanford.EDU (Peter R. Ham) (09/14/89)

*** /xxV/cmds/gasnew/pgas/mi/a.out.h	Wed Sep 13 17:24:15 1989
--- /xxV/cmds/gasnew/dist/a.out.h	Wed Sep  6 10:36:56 1989
***************
*** 1,310 ****
! #ifndef __A_OUT_GNU_H__
! #define __A_OUT_GNU_H__
  
! #define __GNU_EXEC_MACROS__
  
! #ifndef __STRUCT_EXEC_OVERRIDE__
  
! #ifdef WITH_PERPROCESS_VARIABLES
! struct exec
! {
!   unsigned long a_info;		/* Use macros N_MAGIC, etc for access */
!   unsigned a_text;		/* length of text, in bytes */
!   unsigned a_data;		/* length of data, in bytes */
!   unsigned a_bss;		/* length of uninitialized data area for file, in bytes */
!   unsigned a_perprocess;	/* length of perprocess, in bytes */
!   unsigned a_perprocess_bss; 	/* length of uninitialized perprocess area for file, in bytes */
!   unsigned a_syms;		/* length of symbol table data in file, in bytes */
!   unsigned a_entry;		/* start address */
!   unsigned a_trsize;		/* length of relocation info for text, in bytes */
!   unsigned a_drsize;		/* length of relocation info for data, in bytes */
!   unsigned a_prsize;		/* length of relocation info for perprocess, in bytes */
! };
  
! /*
! ** Macro definitions for V system compatibility.
! */
! #define bhdr exec
! #define tsize a_text
! #define dsize a_data
  
! #else
! struct exec
! {
!   unsigned long a_info;		/* Use macros N_MAGIC, etc for access */
!   unsigned a_text;		/* length of text, in bytes */
!   unsigned a_data;		/* length of data, in bytes */
!   unsigned a_bss;		/* length of uninitialized data area for file, in bytes */
!   unsigned a_syms;		/* length of symbol table data in file, in bytes */
!   unsigned a_entry;		/* start address */
!   unsigned a_trsize;		/* length of relocation info for text, in bytes */
!   unsigned a_drsize;		/* length of relocation info for data, in bytes */
! };
! #endif WITH_PERPROCESS_VARIABLES
  
- #endif /* __STRUCT_EXEC_OVERRIDE__ */
- 
- /* these go in the N_MACHTYPE field */
- enum machine_type {
-   M_OLDSUN2 = 0,
-   M_68010 = 1,
-   M_68020 = 2,
-   M_SPARC = 3,
-   /* skip a bunch so we don't run into any of sun's numbers */
-   M_386 = 100,
- };
- 
- #define N_MAGIC(exec) ((exec).a_info)
- #define N_MACHTYPE(exec) ((enum machine_type)(((exec).a_info >> 16) & 0xff))
- #define N_FLAGS(exec) (((exec).a_info >> 24) & 0xff)
- #define N_SET_INFO(exec, magic, type, flags) \
- 	((exec).a_info = ((magic) & 0xffff) \
- 	 | (((int)(type) & 0xff) << 16) \
- 	 | (((flags) & 0xff) << 24))
- #if 0
- /*
- ** This macro is not used by 
- ** the V system.
- */
- #define N_SET_MAGIC(exec, magic) \
- 	((exec).a_info = (((exec).a_info & 0xffff0000) | ((magic) & 0xffff)))
- #endif
- #define N_SET_MAGIC(exec, magic) \
- 	((exec).a_info = (magic))
- 
- #define N_SET_MACHTYPE(exec, machtype) \
- 	((exec).a_info = \
- 	 ((exec).a_info&0xff00ffff) | ((((int)(machtype))&0xff) << 16))
- 
- #define N_SET_FLAGS(exec, flags) \
- 	((exec).a_info = \
- 	 ((exec).a_info&0x00ffffff) | (((flags) & 0xff) << 24))
- 
- /* Code indicating object file or impure executable.  */
- #ifdef WITH_PERPROCESS_VARIABLES
- #define PERPROCESS_SEGMENT_OBJECT_MAGIC 0420
- #define OMAGIC PERPROCESS_SEGMENT_OBJECT_MAGIC 
- #else
  #define OMAGIC 0407
- #endif WITH_PERPROCESS_VARIABLES
- 
- /* Code indicating pure executable.  */
  #define NMAGIC 0410
! /* Code indicating demand-paged executable.  */
! /*
! ** This is different for the V system.
! */
  
! #define PROC_FAM_68000		0	/* 68000 family */
! #define PROC_FAM_VAX11		1	/* VAX family */
! #define BuildMagic(format, family)  ((0x80|'V')<<24|((format)<<16)|(family))
! #define DEMAND_PAGEABLE	42	/* Text and data aligned on 1k boundaries */
! #define VMAGIC_M68K		BuildMagic(DEMAND_PAGEABLE,PROC_FAM_68000)
! #define VMAGIC_VAX		BuildMagic(DEMAND_PAGEABLE,PROC_FAM_VAX11)
  
! #ifdef WITH_PERPROCESS_VARIABLES
! #define PERPROCESS_SEGMENT (64|DEMAND_PAGEABLE)
! 				/* Additional "perprocess" segment */ 
  
- #define VPERPROCESS_MAGIC_VAX	BuildMagic(PERPROCESS_SEGMENT,PROC_FAM_VAX11)
- #define VPERPROCESS_MAGIC_M68K	BuildMagic(PERPROCESS_SEGMENT,PROC_FAM_68000)
- #define VPERPROCESS_MAGIC_PMAX	BuildMagic(PERPROCESS_SEGMENT,PROC_FAM_MIPSCO)
- 
- #ifdef m68k
- #define ZMAGIC VPERPROCESS_MAGIC_M68K
- #endif
- 
- #ifdef VAX
- #define ZMAGIC VPERPROCESS_MAGIC_VAX
- #endif
- 
- #else WITH_PERPROCESS_VARIABLES
- #ifdef m68k
- #define ZMAGIC VMAGIC_M68K
- #endif
- 
- #ifdef VAX
- #define ZMAGIC VMAGIC_VAX
- #endif
- #endif WITH_PERPROCESS_VARIABLES
- 
- #define N_BADMAG(x)					\
-  (N_MAGIC(x) != OMAGIC && N_MAGIC(x) != NMAGIC		\
-   && N_MAGIC(x) != ZMAGIC)
- 
- #define _N_BADMAG(x)					\
-  (N_MAGIC(x) != OMAGIC && N_MAGIC(x) != NMAGIC		\
-   && N_MAGIC(x) != ZMAGIC)
- 
- #define _N_HDROFF(x) (SEGMENT_SIZE - sizeof (struct exec))
- 
  #define N_TXTOFF(x) \
!  (N_MAGIC(x) == ZMAGIC ? _N_HDROFF((x)) + sizeof (struct exec) : sizeof (struct exec))
  
! #define N_DATOFF(x) (N_TXTOFF(x) + (x).a_text)
  
! #ifdef WITH_PERPROCESS_VARIABLES
! #define N_PEROFF(x) (N_DATOFF(x) + (x).a_data)
  
- #define N_TRELOFF(x) (N_PEROFF(x) + (x).a_perprocess)
- #else
- #define N_TRELOFF(x) (N_DATOFF(x) + (x).a_data)
- #endif WITH_PERPROCESS_VARIABLES
- 
- #define N_DRELOFF(x) (N_TRELOFF(x) + (x).a_trsize)
- 
- #ifdef WITH_PERPROCESS_VARIABLES
- #define N_PRELOFF(x) (N_DRELOFF(x) + (x).a_drsize)
- #define N_SYMOFF(x) (N_PRELOFF(x) + (x).a_prsize)
- #else
- #define N_SYMOFF(x) (N_DRELOFF(x) + (x).a_drsize)
- #endif WITH_PERPROCESS_VARIABLES
- 
- #define N_STROFF(x) (N_SYMOFF(x) + (x).a_syms)
- 
- /* Address of text segment in memory after it is loaded.  */
- #ifndef m68k
- #define N_TXTADDR(x) 0
- #else
- #define N_TXTADDR(x) 0x40000
- #endif
- 
- #define PAGE_SIZE SEGMENT_SIZE
- 
- /* Address of data segment in memory after it is loaded.
-    Note that it is up to you to define SEGMENT_SIZE
-    on machines not listed here.  */
- 
- #ifdef VAX
- #define SEGMENT_SIZE 1024
- #endif
- /* ???? #undef vax Should this be here? */
- #ifdef is68k
- #define SEGMENT_SIZE 0x20000
- #endif
- 
- #ifdef m68k
- #define SEGMENT_SIZE (1024 * 8)
- #endif
- 
- #ifndef N_DATADDR
- #define N_DATADDR(x) \
-     (N_MAGIC(x)==OMAGIC? (N_TXTADDR(x)+(x).a_text) \
-      : (SEGMENT_SIZE + ((N_TXTADDR(x)+(x).a_text-1) & ~(SEGMENT_SIZE-1))))
- #endif
- 
- /* Address of bss segment in memory after it is loaded.  */
- #define N_BSSADDR(x) (N_DATADDR(x) + (x).a_data)
- 
- #ifdef WITH_PERPROCESS_VARIABLES
- #define N_PERPROCESS_ADDR(x) ( N_BSS_ADDR(x) + (x).a_bss  ) 
- 
- #define N_PERPROCESS_BSS_ADDR(x) ( N_PERPROCESS_ADDR(x) + (x).a_perprocess  ) 
- #endif WITH_PERPROCESS_VARIABLES
- 
- 
  struct nlist {
!   union {
!     char *n_name;
!     struct nlist *n_next;
!     long n_strx;
!   } n_un;
!   unsigned char n_type;
!   char n_other;
!   short n_desc;
!   unsigned long n_value;
  };
  
! #define N_UNDF 0
! #define N_ABS 2
! #define N_TEXT 4
! #define N_DATA 6
! #define N_BSS 8
! #define N_FN 15
  
- #ifdef WITH_PERPROCESS_VARIABLES
- #define N_PERPROCESS 0xc    /* These last two defines may overlap with some others. */
- #define N_PERPROCESS_BSS 0xe /* N_INDR is 0xa, I don't know what else follows in
- 				stabs.h or something. I'm pretty sure that the
- 				next one is 0x20 for gensym (sp.) stab or
- 				0x14 for the set symbols. I think that the
- 			        assembler uses these so it will have to be
- 				recompiled. */
- #endif WITH_PERPROCESS_VARIABLES
- 
  #define N_EXT 1
  #define N_TYPE 036
  #define N_STAB 0340
  
! /* The following type indicates the definition of a symbol as being
!    an indirect reference to another symbol.  The other symbol
!    appears as an undefined reference, immediately following this symbol.
! 
!    Indirection is asymmetrical.  The other symbol's value will be used
!    to satisfy requests for the indirect symbol, but not vice versa.
!    If the other symbol does not have a definition, libraries will
!    be searched to find a definition.  */
! #define N_INDR 0xa
! 
! /* The following symbols refer to set elements.
!    All the N_SET[ATDB] symbols with the same name form one set.
!    Space is allocated for the set in the text section, and each set
!    element's value is stored into one word of the space.
!    The first word of the space is the length of the set (number of elements).
! 
!    The address of the set is made into an N_SETV symbol
!    whose name is the same as the name of the set.
!    This symbol acts like a N_DATA global symbol
!    in that it can satisfy undefined external references.  */
! 
! /* These appear as input to LD, in a .o file.  */
! #define	N_SETA	0x14		/* Absolute set element symbol */
! #define	N_SETT	0x16		/* Text set element symbol */
! #define	N_SETD	0x18		/* Data set element symbol */
! #define	N_SETB	0x1A		/* Bss set element symbol */
! #ifdef WITH_PERPROCESS_VARIABLES
! #define	N_SETP	0x1E		/* Peprocess set element symbol */
! #define	N_SETPB	0x20		/* Perprocess bss set element symbol */
! #endif WITH_PERPROCESS_VARIABLES
! 
! /* This is output from LD.  */
! #define N_SETV	0x1C		/* Pointer to set vector in data area.  */
! 
! /* This structure describes a single relocation to be performed.
!    The text-relocation section of the file is a vector of these structures,
!    all of which apply to the text section.
!    Likewise, the data-relocation section applies to the data section.  */
! 
! struct relocation_info
! {
!   /* Address (within segment) to be relocated.  */
!   int r_address;
!   /* The meaning of r_symbolnum depends on r_extern.  */
!   unsigned int r_symbolnum:24;
!   /* Nonzero means value is a pc-relative offset
!      and it should be relocated for changes in its own address
!      as well as for changes in the symbol or section specified.  */
!   unsigned int r_pcrel:1;
!   /* Length (as exponent of 2) of the field to be relocated.
!      Thus, a value of 2 indicates 1<<2 bytes.  */
!   unsigned int r_length:2;
!   /* 1 => relocate with value of symbol.
!           r_symbolnum is the index of the symbol
! 	  in file's the symbol table.
!      0 => relocate with the address of a segment.
!           r_symbolnum is N_TEXT, N_DATA, N_BSS or N_ABS
! 	  (the N_EXT bit may be set also, but signifies nothing).  */
!   unsigned int r_extern:1;
! #ifdef WITH_PERPROCESS_VARIABLES
!   unsigned int r_bsr:1, /* OVE: used on ns32k based systems, if you want */
!  r_disp:1, /* OVE: used on ns32k based systems, if you want */
!  nuthin:2;
! #else WITH_PERPROCESS_VARIABLES
!   /* Four bits that aren't used, but when writing an object file
!      it is desirable to clear them.  */
!   unsigned int r_pad:4;
! #endif WITH_PERPROCESS_VARIABLES
  };
- 
- 
- #endif /* __A_OUT_GNU_H__ */
--- 1,84 ----
! /* This file describes the a.out file format
!    Copyright (C) 1987 Free Software Foundation, Inc.
  
! This file is part of GAS, the GNU Assembler.
  
! GAS is free software; you can redistribute it and/or modify
! it under the terms of the GNU General Public License as published by
! the Free Software Foundation; either version 1, or (at your option)
! any later version.
  
! GAS is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GAS; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
! /* JF I'm not sure where this file came from.  I put the permit.text message in
!    it anyway.  This file came to me as part of the original VAX assembler */
  
  #define OMAGIC 0407
  #define NMAGIC 0410
! #define ZMAGIC 0413
  
! struct exec {
! 	long	a_magic;			/* number identifies as .o file and gives type of such. */
! 	unsigned a_text;		/* length of text, in bytes */
! 	unsigned a_data;		/* length of data, in bytes */
! 	unsigned a_bss;		/* length of uninitialized data area for file, in bytes */
! 	unsigned a_syms;		/* length of symbol table data in file, in bytes */
! 	unsigned a_entry;		/* start address */
! 	unsigned a_trsize;		/* length of relocation info for text, in bytes */
! 	unsigned a_drsize;		/* length of relocation info for data, in bytes */
! };
  
! #define N_BADMAG(x) \
!  (((x).a_magic)!=OMAGIC && ((x).a_magic)!=NMAGIC && ((x).a_magic)!=ZMAGIC)
  
  #define N_TXTOFF(x) \
!  ((x).a_magic == ZMAGIC ? 1024 : sizeof(struct exec))
  
! #define N_SYMOFF(x) \
!  (N_TXTOFF(x) + (x).a_text + (x).a_data + (x).a_trsize + (x).a_drsize)
  
! #define N_STROFF(x) \
!  (N_SYMOFF(x) + (x).a_syms)
  
  struct nlist {
! 	union {
! 		char	*n_name;
! 		struct nlist *n_next;
! 		long	n_strx;
! 	} n_un;
! 	char	n_type;
! 	char	n_other;
! 	short	n_desc;
! 	unsigned n_value;
  };
  
! #define N_UNDF	0
! #define N_ABS	2
! #define N_TEXT	4
! #define N_DATA	6
! #define N_BSS	8
! #define N_FN	31		/* JF: Someone claims this should be 31 instead of
! 			   15.  I just inherited this file; I didn't write
! 			   it.  Who is right? */
  
  #define N_EXT 1
  #define N_TYPE 036
  #define N_STAB 0340
  
! struct relocation_info {
! 	int	 r_address;
! 	unsigned r_symbolnum:24,
! 		 r_pcrel:1,
! 		 r_length:2,
! 		 r_extern:1,
! 		 r_bsr:1, /* OVE: used on ns32k based systems, if you want */
! 		 r_disp:1, /* OVE: used on ns32k based systems, if you want */
! 		 nuthin:2;
  };
*** /xxV/cmds/gasnew/pgas/mi/as.c	Wed Sep 13 17:24:17 1989
--- /xxV/cmds/gasnew/dist/as.c	Tue Aug  8 13:43:51 1989
***************
*** 222,231 ****
  
  	text_fix_root		= NULL;
  	data_fix_root		= NULL;
- #ifdef WITH_PERPROCESS_VARIABLES
- 	perprocess_fix_root	= NULL;
- #endif WITH_PERPROCESS_VARIABLES
- 
  	need_pass_2		= FALSE;
  
  	argv++;			/* skip argv[0] */
--- 222,227 ----
*** /xxV/cmds/gasnew/pgas/mi/as.h	Fri Sep  8 14:28:18 1989
--- /xxV/cmds/gasnew/dist/as.h	Tue Aug  8 13:43:53 1989
***************
*** 130,140 ****
   * SEG_BSS		*			0
   * SEG_UNKNOWN		*			0
   * SEG_DIFFERENCE	0		*	0
- #ifdef WITH_PERPROCESS_VARIABLES
-  * SEG_PERPROCESS	*		     	0
-  * SEG_PERPROCESS_BSS	*		     	0
- #endif WITH_PERPROCESS_VARIABLES
- 
   *
   * The blank fields MUST be 0, and are nugatory.
   * The '0' fields MAY be 0. The '*' fields MAY NOT be 0.
--- 130,135 ----
***************
*** 156,165 ****
  	SEG_TEXT,
  	SEG_DATA,
  	SEG_BSS,
- #ifdef WITH_PERPROCESS_VARIABLES
- 	SEG_PERPROCESS,
- 	SEG_PERPROCESS_BSS,
- #endif WITH_PERPROCESS_VARIABLES
  	SEG_UNKNOWN,
  	SEG_NONE,		/* Mythical Segment: NO expression seen. */
  	SEG_PASS1,		/* Mythical Segment: Need another pass. */
--- 151,156 ----
***************
*** 180,191 ****
  COMMON segT			now_seg;
  				/* Segment our instructions emit to. */
  				/* Only OK values are SEG_TEXT or SEG_DATA. */
- #ifdef WITH_PERPROCESS_VARIABLES
-                                 /* or SEG_PERPROCESS. */
- #endif WITH_PERPROCESS_VARIABLES
  
  
- 
  extern char	*seg_name[];
  extern int	seg_N_TYPE[];
  extern segT	N_TYPE_seg[];
--- 171,178 ----
***************
*** 277,289 ****
  
  COMMON fragS zero_address_frag;	/* For foreign-segment symbol fixups. */
  COMMON fragS  bss_address_frag;	/* For local common (N_BSS segment) fixups. */
- #ifdef WITH_PERPROCESS_VARIABLES
- /*
- ** Is this frag ever used?
- */
- COMMON fragS  perprocess_bss_address_frag;	
- #endif WITH_PERPROCESS_VARIABLES
- 
  
  void		frag_new();
  char *		frag_more();
--- 264,269 ----
*** /xxV/cmds/gasnew/pgas/mi/expr.c	Wed Sep 13 17:24:23 1989
--- /xxV/cmds/gasnew/dist/expr.c	Tue Aug  8 13:44:13 1989
***************
*** 438,447 ****
        case SEG_TEXT:
        case SEG_DATA:
        case SEG_BSS:
- #ifdef WITH_PERPROCESS_VARIABLES
-       case SEG_PERPROCESS:
-       case SEG_PERPROCESS_BSS:
- #endif WITH_PERPROCESS_VARIABLES
        case SEG_PASS1:
        case SEG_UNKNOWN:
  	if(c=='-') {		/* JF I hope this hack works */
--- 438,443 ----
***************
*** 517,526 ****
      case SEG_TEXT:
      case SEG_DATA:
      case SEG_BSS:
- #ifdef WITH_PERPROCESS_VARIABLES
-     case SEG_PERPROCESS:
-     case SEG_PERPROCESS_BSS:
- #endif WITH_PERPROCESS_VARIABLES
      case SEG_UNKNOWN:
        expressionP -> X_subtract_symbol	= NULL;
        break;
--- 513,518 ----
***************
*** 630,641 ****
      }
    know(   return_value == SEG_ABSOLUTE			
         || return_value == SEG_TEXT			
!        || return_value == SEG_DATA
         || return_value == SEG_BSS			
- #ifdef WITH_PERPROCESS_VARIABLES
-        || return_value == SEG_PERPROCESS
-        || return_value == SEG_PERPROCESS_BSS						
- #endif WITH_PERPROCESS_VARIABLES
         || return_value == SEG_UNKNOWN			
         || return_value == SEG_PASS1			
         );
--- 622,629 ----
      }
    know(   return_value == SEG_ABSOLUTE			
         || return_value == SEG_TEXT			
!        || return_value == SEG_DATA			
         || return_value == SEG_BSS			
         || return_value == SEG_UNKNOWN			
         || return_value == SEG_PASS1			
         );
***************
*** 822,833 ****
  	      
  	      know(   resultP -> X_seg == SEG_DATA		
  		   || resultP -> X_seg == SEG_TEXT		
! 		   || resultP -> X_seg == SEG_BSS	
! #ifdef WITH_PERPROCESS_VARIABLES
! 		   || resultP -> X_seg == SEG_PERPROCESS	
! 		   || resultP -> X_seg == SEG_PERPROCESS_BSS	
! #endif WITH_PERPROCESS_VARIABLES
! 	
  		   || resultP -> X_seg == SEG_UNKNOWN		
  		   || resultP -> X_seg == SEG_DIFFERENCE	
  		   || resultP -> X_seg == SEG_ABSOLUTE		
--- 810,816 ----
  	      
  	      know(   resultP -> X_seg == SEG_DATA		
  		   || resultP -> X_seg == SEG_TEXT		
! 		   || resultP -> X_seg == SEG_BSS		
  		   || resultP -> X_seg == SEG_UNKNOWN		
  		   || resultP -> X_seg == SEG_DIFFERENCE	
  		   || resultP -> X_seg == SEG_ABSOLUTE		
***************
*** 836,845 ****
  	      know(     right .  X_seg == SEG_DATA		
  		   ||   right .  X_seg == SEG_TEXT		
  		   ||   right .  X_seg == SEG_BSS		
- #ifdef WITH_PERPROCESS_VARIABLES
- 		   || resultP -> X_seg == SEG_PERPROCESS	
- 		   || resultP -> X_seg == SEG_PERPROCESS_BSS	
- #endif WITH_PERPROCESS_VARIABLES
  		   ||   right .  X_seg == SEG_UNKNOWN		
  		   ||   right .  X_seg == SEG_DIFFERENCE	
  		   ||   right .  X_seg == SEG_ABSOLUTE		
--- 819,824 ----
***************
*** 872,892 ****
  			  && seg2 != SEG_UNKNOWN
  			  && seg1 != seg2)
  			{
- #ifdef WITH_PERPROCESS_VARIABLES
- 			  know( seg1 == SEG_TEXT 
- 			       || seg1 == SEG_DATA 
- 			       || seg1== SEG_BSS 
- 			       || seg1 == SEG_PERPROCESS
- 			       || seg1 == SEG_PERPROCESS);
- 			  know( seg2 == SEG_TEXT 
- 			       || seg2 == SEG_DATA 
- 			       || seg2== SEG_BSS 
- 			       || seg2 == SEG_PERPROCESS
- 			       || seg2 == SEG_PERPROCESS);
- #else  WITH_PERPROCESS_VARIABLES
  			  know( seg1 == SEG_TEXT || seg1 == SEG_DATA || seg1== SEG_BSS );
  			  know( seg2 == SEG_TEXT || seg2 == SEG_DATA || seg2== SEG_BSS );
- #endif WITH_PERPROCESS_VARIABLES
  			  know( resultP -> X_add_symbol      );
  			  know( resultP -> X_subtract_symbol );
  			  as_warn("Expression too complex: forgetting %s - %s",
--- 851,858 ----
*** /xxV/cmds/gasnew/pgas/mi/read.c	Tue Sep  5 17:38:36 1989
--- /xxV/cmds/gasnew/dist/read.c	Thu Aug 17 11:29:38 1989
***************
*** 162,171 ****
  void	s_org(),	s_set(),	s_space(),	s_text();
  void	s_gdbline(),	s_gdblinetab();
  
- #ifdef WITH_PERPROCESS_VARIABLES
- void  	s_perprocess(), s_perprocess_bss(), s_perprocess_comm(), s_perprocess_lcomm();
- #endif WITH_PERPROCESS_VARIABLES
- 
  void	stringer();
  void	cons();
  void	float_cons();
--- 162,167 ----
***************
*** 201,218 ****
    { "lsym",	s_lsym,		0	},
    { "octa",	big_cons,	16	},
    { "org",	s_org,		0	},
- 
- #ifdef WITH_PERPROCESS_VARIABLES
-   { "perprocess",s_perprocess,	0	},
-   { "perprocess_bss",s_perprocess_bss,	0	},
-   { "perprocess_comm",s_perprocess_comm,	0	},
- /*
- ** This directive doesn't seem ever be used by the
- ** compiler.
- ** { "perprocess_lcomm",s_perprocess_lcomm,	0	},
- */
- #endif WITH_PERPROCESS_VARIABLES
- 
    { "quad",	big_cons,	8	},
    { "set",	s_set,		0	},
    { "short",	cons,		2	},
--- 197,202 ----
***************
*** 603,729 ****
  	demand_empty_rest_of_line();
  }
  
- #ifdef WITH_PERPROCESS_VARIABLES
  void
- s_perprocess()
- {
- 	register int temp;
- 
- 	temp = get_absolute_expression ();
- 	subseg_new (SEG_PERPROCESS, (subsegT)temp);
- 	demand_empty_rest_of_line();
- }
- 
- /*
- ** I'm just putting this function in now, so I don't know if it will
- ** work.
- */
- void
- s_perprocess_comm()
- {
- 	register char *name;
- 	register char c;
- 	register char *p;
- 	register int temp;
- 	register symbolS *	symbolP;
- 
- 	name = input_line_pointer;
- 	c = get_symbol_end();
- 	/* just after name is now '\0' */
- 	p = input_line_pointer;
- 	*p = c;
- 	SKIP_WHITESPACE();
- 	if ( * input_line_pointer != ',' ) {
- 		as_warn("Expected comma after symbol-name");
- 		ignore_rest_of_line();
- 		return;
- 	}
- 	input_line_pointer ++; /* skip ',' */
- 	if ( (temp = get_absolute_expression ()) < 0 ) {
- 		as_warn(".PERPROCESS_COMMon length (%d.) <0! Ignored.", temp);
- 		ignore_rest_of_line();
- 		return;
- 	}
- 	*p = 0;
- 	symbolP = symbol_find_or_make (name);
- 	
- 	/*
- 	** This seems like a kludge, but I will try it out.
- 	*/
- 	symbolP->sy_type = N_PERPROCESS_BSS;
- 
- 	*p = c;
- 
- 	/*
- 	** This line always produces complaints and returns, but the 
- 	** thing seems to work so far.
- 	** I'm leaving it for now.  Actually, it doesn't work.
- 	*/
- /*	if (   (symbolP -> sy_type & N_TYPE) != N_UNDF ||
-  symbolP -> sy_other != 0 || symbolP -> sy_desc != 0) {
- 		as_warn( "Ignoring attempt to re-define symbol");
- 		ignore_rest_of_line();
- 		return;
- 	}*/
- 	if (symbolP -> sy_value) {
-  		if (symbolP -> sy_value != temp)
- 			as_warn( "Length of .perprocess_comm \"%s\" is already %d. Not changed to %d.",
-  symbolP -> sy_name, symbolP -> sy_value, temp);
- 	} else {
- 		symbolP -> sy_value = temp;
- 		symbolP -> sy_type |= N_EXT;
- 	}
- 	know( symbolP -> sy_frag == &zero_address_frag );
- 	demand_empty_rest_of_line();
- }
- 
- void
- s_perprocess_bss()
- {
- 	register char *name;
- 	register char c;
- 	register char *p;
- 	register int temp;
- 	register symbolS *	symbolP;
- 
- 	name = input_line_pointer;
- 	c = get_symbol_end();
- 	p = input_line_pointer;
- 	*p = c;
- 	SKIP_WHITESPACE();
- 	if ( * input_line_pointer != ',' ) {
- 		as_warn("Expected comma after name");
- 		ignore_rest_of_line();
- 		return;
- 	}
- 	input_line_pointer ++;
- 	if ( (temp = get_absolute_expression ()) < 0 ) {
- 		as_warn("PERPROCESS_BSS length (%d.) <0! Ignored.", temp);
- 		ignore_rest_of_line();
- 		return;
- 	}
- 	*p = 0;
- 	symbolP = symbol_find_or_make (name);
- 	*p = c;
- 	if (   symbolP -> sy_other == 0
- 	    && symbolP -> sy_desc  == 0
- 	    && (   (   symbolP -> sy_type  == N_PERPROCESS_BSS
- 	    && symbolP -> sy_value == local_perprocess_bss_counter)
- 	    || (   (symbolP -> sy_type & N_TYPE) == N_UNDF
- 	    && symbolP -> sy_value == 0))) {
- 		symbolP -> sy_value = local_perprocess_bss_counter;
- 		symbolP -> sy_type  |=  N_PERPROCESS_BSS;
- 		symbolP -> sy_frag  = & perprocess_bss_address_frag;
- 		local_perprocess_bss_counter += temp;
- 	} else
- 		as_warn( "Ignoring attempt to re-define symbol from %d. to %d.",
-  symbolP -> sy_value, local_perprocess_bss_counter );
- 	demand_empty_rest_of_line();
- }
- 
- #endif WITH_PERPROCESS_VARIABLES
- 
- void
  s_desc()
  {
  	register char *name;
--- 587,593 ----
***************
*** 1537,1546 ****
  	    case SEG_UNKNOWN:
  	    case SEG_TEXT:
  	    case SEG_DATA:
- #ifdef WITH_PERPROCESS_VARIABLES
- 	    case SEG_PERPROCESS:
- 	    case SEG_PERPROCESS_BSS:
- #endif WITH_PERPROCESS_VARIABLES
  #ifdef SPARC
  	      fix_new (frag_now, p - frag_now -> fr_literal, nbytes,
  		       exp . X_add_symbol, exp . X_subtract_symbol,
--- 1401,1406 ----
***************
*** 1951,1959 ****
        expP -> X_add_symbol   = expP -> X_subtract_symbol = 0;
      }
    return (retval);		/* SEG_ ABSOLUTE,UNKNOWN,DATA,TEXT,BSS */
- #ifdef WITH_PERPROCESS_VARIABLES
-                                 /* and SEG_ PERPROCESS, PERPROCESS_BSS */
- #endif WITH_PERPROCESS_VARIABLES
  }
  
  static segT
--- 1811,1816 ----
***************
*** 1983,1995 ****
        expP -> X_add_number   = 0;
        expP -> X_add_symbol   = expP -> X_subtract_symbol = NULL;
      }
- #ifdef WITH_PERPROCESS_VARIABLES
-  know(   retval == SEG_ABSOLUTE || retval == SEG_DATA || retval == SEG_TEXT || 
-       retval == SEG_BSS || retval == SEG_DIFFERENCE || retval == SEG_PERPROCESS ||
-       retval == SEG_PERPROCESS_BSS;)
- #else WITH_PERPROCESS_VARIABLES
   know(   retval == SEG_ABSOLUTE || retval == SEG_DATA || retval == SEG_TEXT || retval == SEG_BSS || retval == SEG_DIFFERENCE );
- #endif WITH_PERPROCESS_VARIABLES
    return (retval);
  }				/* get_known_segmented_expression() */
  
--- 1840,1846 ----
No differences encountered
*** /xxV/cmds/gasnew/pgas/mi/subsegs.c	Wed Sep 13 17:24:31 1989
--- /xxV/cmds/gasnew/dist/subsegs.c	Tue Aug  8 13:46:09 1989
***************
*** 32,42 ****
  	*	frchain_now,	/* Commented in "subsegs.h". */
  	*	data0_frchainP;
  
- #ifdef WITH_PERPROCESS_VARIABLES
- frchainS*	perprocess0_frchainP;
- #endif WITH_PERPROCESS_VARIABLES
  
- 
  int				/* in: segT   out: N_TYPE bits */
  seg_N_TYPE[] = {
    N_ABS,
--- 32,38 ----
***************
*** 43,52 ****
    N_TEXT,
    N_DATA,
    N_BSS,
- #ifdef WITH_PERPROCESS_VARIABLES
-   N_PERPROCESS,
-   N_PERPROCESS_BSS,
- #endif WITH_PERPROCESS_VARIABLES
    N_UNDF,
    N_UNDF,
    N_UNDF,
--- 39,44 ----
***************
*** 62,71 ****
    "text",
    "data",
    "bss",
- #ifdef WITH_PERPROCESS_VARIABLES
-   "perprocess",
-   "perprocess_bss",
- #endif WITH_PERPROCESS_VARIABLES
    "unknown",
    "absent",
    "pass1",
--- 54,59 ----
***************
*** 86,102 ****
    SEG_DATA,			/* N_DATA == 6 */
    SEG_GOOF,
    SEG_BSS,			/* N_BSS == 8 */
- #ifdef WITH_PERPROCESS_VARIABLES
-   SEG_GOOF, 
-   SEG_GOOF, 
-   SEG_GOOF, 
-   SEG_PERPROCESS,                /* N_PERPROCESS = 0xc, 12 */  
-   SEG_GOOF, 
-   SEG_PERPROCESS_BSS,            /* N_PERPROCESS_BSS = 0xe, 14 */
-   SEG_GOOF, SEG_GOOF, 
- #else WITH_PERPROCESS_VARIABLES
    SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF,
! #endif WITH_PERPROCESS_VARIABLES
    SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF
  };
  
--- 74,81 ----
    SEG_DATA,			/* N_DATA == 6 */
    SEG_GOOF,
    SEG_BSS,			/* N_BSS == 8 */
    SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF,
!   SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF,
    SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF
  };
  
***************
*** 108,123 ****
    know( SEG_TEXT    	==1 );
    know( SEG_DATA    	==2 );
    know( SEG_BSS     	==3 );
- #ifdef WITH_PERPROCESS_VARIABLES
-   know( SEG_PERPROCESS 	==4 );
-   know( SEG_PERPROCESS_BSS ==5 );
-   know( SEG_UNKNOWN 	==6 );
-   know( SEG_NONE    	==7 );
-   know( SEG_PASS1	==8 );
-   know( SEG_GOOF	==9 );
-   know( SEG_BIG		==10 );
-   know( SEG_DIFFERENCE	==11 );
- #else  WITH_PERPROCESS_VARIABLES
    know( SEG_UNKNOWN 	==4 );
    know( SEG_NONE    	==5 );
    know( SEG_PASS1	==6 );
--- 87,92 ----
***************
*** 124,130 ****
    know( SEG_GOOF	==7 );
    know( SEG_BIG		==8 );
    know( SEG_DIFFERENCE	==9 );
- #endif WITH_PERPROCESS_VARIABLES
    know( SEG_MAXIMUM_ORDINAL == SEG_DIFFERENCE );
    know( seg_name [(int) SEG_MAXIMUM_ORDINAL + 1] [0] == 0 );
  
--- 93,98 ----
***************
*** 139,148 ****
  				/* This 1st frag will not be in any frchain. */
  				/* We simply give subseg_new somewhere to scribble. */
    now_subseg = 42;		/* Lie for 1st call to subseg_new. */
- #ifdef WITH_PERPROCESS_VARIABLES
-   subseg_new (SEG_PERPROCESS, 0);/* .perprocess 0 */
-   perprocess0_frchainP = frchain_now;
- #endif WITH_PERPROCESS_VARIABLES
    subseg_new (SEG_DATA, 0);	/* .data 0 */
    data0_frchainP = frchain_now;
  }
--- 107,112 ----
***************
*** 164,192 ****
  {
    now_seg	 = seg;
    now_subseg = subseg;
- 
- #ifdef WITH_PERPROCESS_VARIABLES
-   switch (seg)
-     {
- 
-     case    SEG_DATA:
-       seg_fix_rootP = & data_fix_root;
-       break;
- 
-     case SEG_TEXT:
-       seg_fix_rootP = & text_fix_root;
-       break;
- 
-     case    SEG_PERPROCESS:
-       seg_fix_rootP = & perprocess_fix_root;      
-       break;
- 
-     default:
-       BAD_CASE(seg);
-       break;
- 
-     }
- #else WITH_PERPROCESS_VARIABLES
    if (seg == SEG_DATA)
      {
        seg_fix_rootP = & data_fix_root;
--- 128,133 ----
***************
*** 196,203 ****
        know (seg == SEG_TEXT);
        seg_fix_rootP = & text_fix_root;
      }
- #endif WITH_PERPROCESS_VARIABLES
- 
  }
  
  /*
--- 137,142 ----
***************
*** 219,236 ****
  void
  subseg_new (seg, subseg)	/* begin assembly for a new sub-segment */
       register segT	seg;	/* SEG_DATA or SEG_TEXT */
- #ifdef WITH_PERPROCESS_VARIABLES
-                                 /* or SEG_PERPROCESS */
- #endif WITH_PERPROCESS_VARIABLES
       register subsegT	subseg;
  {
    long tmp;		/* JF for obstack alignment hacking */
  
- #ifdef WITH_PERPROCESS_VARIABLES
-   know( seg == SEG_DATA || seg == SEG_TEXT || seg == SEG_PERPROCESS);
- #else WITH_PERPROCESS_VARIABLES
    know( seg == SEG_DATA || seg == SEG_TEXT );
- #endif WITH_PERPROCESS_VARIABLES
  
    if (seg != now_seg || subseg != now_subseg)
      {				/* we just changed sub-segments */
--- 158,168 ----
***************
*** 245,252 ****
  	  frag_now -> fr_fix = obstack_next_free(& frags) - frag_now -> fr_literal;
  	  frag_wane(frag_now);	/* Close off any frag in old subseg. */
  	}
- 
- 
  /*
   * It would be nice to keep an obstack for each subsegment, if we swap
   * subsegments a lot. Hence we would have much fewer frag_wanes().
--- 177,182 ----
***************
*** 302,315 ****
         *		May point to frchain_root.
         *
         */
- #ifdef WITH_PERPROCESS_VARIABLES
- 	/*
- 	** Something has to be done about this code, since the commment
- 	** indicates that this logic only works for two segments, but no
- 	** I have added an additional segment. (I think)
- 	*/
- #endif WITH_PERPROCESS_VARIABLES
- 
        if (   ! frcP
  	  || (   (int)(frcP -> frch_seg) > (int)seg
  	      || frcP->frch_subseg > subseg)) /* Kinky logic only works with 2 segments. */
--- 232,237 ----
*** /xxV/cmds/gasnew/pgas/mi/subsegs.h	Wed Sep 13 17:24:32 1989
--- /xxV/cmds/gasnew/dist/subsegs.h	Tue Aug  8 13:46:12 1989
***************
*** 26,36 ****
   * code number). The chain runs through frch_next of each subsegment.
   * This makes it hard to find a subsegment's frags
   * if programmer uses a lot of them. Most programs only use text0 and
- #ifdef WITH_PERPROCESS_VARIABLES
-  * data0 and perprocess0, so they don't suffer. At least this way:
- #else 
   * data0, so they don't suffer. At least this way:
- #endif WITH_PERPROCESS_VARIABLES
   * (1)	There are no "arbitrary" restrictions on how many subsegments
   *	can be programmed;
   * (2)	Subsegments' frchain-s are (later) chained together in the order in
--- 26,32 ----
***************
*** 46,54 ****
    struct frag *	frch_last;	/* last struct frag in chain, or NULL */
    struct frchain * frch_next;	/* next in chain of struct frchain-s */
    segT		frch_seg;	/* SEG_TEXT or SEG_DATA. */
- #ifdef WITH_PERPROCESS_VARIABLES
-                                 /* or SEG_PERPROCESS */
- #endif WITH_PERPROCESS_VARIABLES
    subsegT	frch_subseg;	/* subsegment number of this chain */
  };
  
--- 42,47 ----
***************
*** 68,81 ****
  				/* Points to the 1st data-segment frchain. */
  				/* (Which is pointed to by the last text- */
  				/* segment frchain.) */
- 
- #ifdef WITH_PERPROCESS_VARIABLES
- extern frchainS * perprocess0_frchainP;
- 				/* Sentinel for frchain crawling. */
- 				/* Points to the 1st perprocess-segment 
- 				   frchain. */
- 				/* (Which is pointed to by the last data- */
- 				/* segment frchain.) */
- #endif WITH_PERPROCESS_VARIABLES
  
  /* end: subsegs.h */
--- 61,65 ----
*** /xxV/cmds/gasnew/pgas/mi/symbols.c	Wed Sep 13 17:24:35 1989
--- /xxV/cmds/gasnew/dist/symbols.c	Tue Aug  8 13:46:15 1989
***************
*** 35,43 ****
  
  				/* Below are commented in "symbols.h". */
  unsigned int local_bss_counter;
- #ifdef WITH_PERPROCESS_VARIABLES
- unsigned int local_perprocess_bss_counter;
- #endif WITH_PERPROCESS_VARIABLES
  symbolS * symbol_rootP;
  symbolS * symbol_lastP;
  symbolS	abs_symbol;
--- 35,40 ----
*** /xxV/cmds/gasnew/pgas/mi/symbols.h	Tue Sep  5 17:38:40 1989
--- /xxV/cmds/gasnew/dist/symbols.h	Tue Aug  8 13:46:18 1989
***************
*** 24,38 ****
  extern unsigned int local_bss_counter; /* Zeroed before a pass. */
  				/* Only used by .lcomm directive. */
  
- #ifdef WITH_PERPROCESS_VARIABLES
- /*
- ** Is this really used?
- ** Do I need an .lcomm equivalent for the perprocess segment?
- ** What does .lcomm do, anyway?
- */
- extern unsigned int local_perprocess_bss_counter; /* Zeroed before a pass. */
- #endif WITH_PERPROCESS_VARIABLES
- 
  
  extern symbolS * symbol_rootP;	/* all the symbol nodes */
  extern symbolS * symbol_lastP;	/* last struct symbol we made, or NULL */
--- 24,29 ----
*** /xxV/cmds/gasnew/pgas/mi/write.c	Wed Sep 13 17:24:41 1989
--- /xxV/cmds/gasnew/dist/write.c	Tue Aug  8 13:46:52 1989
***************
*** 62,79 ****
  
  static struct frag *	text_frag_root;
  static struct frag *	data_frag_root;
- #ifdef WITH_PERPROCESS_VARIABLES
- static struct frag *	perprocess_frag_root;
- #endif WITH_PERPROCESS_VARIABLES
  
- 
  static struct frag *	text_last_frag;	/* Last frag in segment. */
  static struct frag *	data_last_frag;	/* Last frag in segment. */
  
- #ifdef WITH_PERPROCESS_VARIABLES
- static struct frag *	perprocess_last_frag;	/* Last frag in segment. */
- #endif WITH_PERPROCESS_VARIABLES
- 
  static struct exec	the_exec;
  
  static long int string_byte_count;
--- 62,71 ----
***************
*** 158,174 ****
    unsigned
    	text_siz,
  	data_siz,
- #ifdef WITH_PERPROCESS_VARIABLES
-     	perprocess_siz,
- #endif WITH_PERPROCESS_VARIABLES
  	syms_siz,
  	tr_siz,
- #ifdef WITH_PERPROCESS_VARIABLES
- 	dr_siz,
-         pr_siz;
- #else
  	dr_siz;
- #endif WITH_PERPROCESS_VARIABLES
    void output_file_create();
    void output_file_append();
    void output_file_close();
--- 150,158 ----
***************
*** 225,236 ****
     * Build one frag chain for each segment. Linked thru fr_next.
     * We know that there is at least 1 text frchain & at least 1 data frchain.
     */
- #ifdef WITH_PERPROCESS_VARIABLES
-   /*
-    * and at least one perprocess frchain.
-    */
- #endif WITH_PERPROCESS_VARIABLES
- 
    prev_fragPP = &text_frag_root;
    for ( frchainP=frchain_root; frchainP; frchainP=next_frchainP )
      {
--- 209,214 ----
***************
*** 237,311 ****
        know( frchainP -> frch_root );
        * prev_fragPP = frchainP -> frch_root;
        prev_fragPP = & frchainP -> frch_last -> fr_next;
- 
- #ifdef WITH_PERPROCESS_VARIABLES
- 
- 	/*
- 	** This piece of code is confusing.
- 	** I'm extending this code to have three segments, not just two.
- 	** I don't think that data0_frchainP or perprocess0_frchainP
- 	** can be NULL, but these "knows" or asserts will let me know
- 	** if my assumption is wrong.
- 	*/
- 
-       know ( data0_frchainP != NULL );
- 
-       know ( perprocess0_frchainP != NULL );
- 
-       know ( data0_frchainP != perprocess0_frchainP );
- 
-       /*
-       ** Move to the next chain of code fragments.
-       */
-       next_frchainP = frchainP->frch_next;
- 
-       /*
-       ** The case where the end of the text segment code fragment
-       ** chain is started and the data segment code fragment chain
-       ** begins.
-       */
-       if (next_frchainP == data0_frchainP)
- 	{
- 	  /* 
- 	  ** What does this next statement really do?
- 	  */
- 	  prev_fragPP = & data_frag_root;
- 	  
- 	  text_last_frag = frchainP -> frch_last;
- 	}
- 
-       /*
-       ** The case where the end of the data segment code fragment
-       ** chain is started and the peprocess segment code fragment chain
-       ** begins.
-       */
-       if (next_frchainP == perprocess0_frchainP)
- 	{
- 	  /* 
- 	  ** What does this next statement really do?
- 	  */
- 	  prev_fragPP = & perprocess_frag_root;
- 	  
- 	  data_last_frag = frchainP -> frch_last;
- 	}
- 
-       /*
-       ** This is the case where we have traveled down to the
-       ** end of all the code fragment chains.  This is also
-       ** the end of the peprocess segment code fragment chain.
-       */
-       if (next_frchainP == NULL)
- 	{
- 	  /* 
- 	  ** What does this next statement really do?
- 	  */
- 	  prev_fragPP = NULL;
- 
- 	  
- 	  perprocess_last_frag = frchainP -> frch_last;
- 	}
- #else
- 
        if (   ((next_frchainP = frchainP->frch_next) == NULL)
  	  || next_frchainP == data0_frchainP)
  	{
--- 215,220 ----
***************
*** 319,325 ****
  	      data_last_frag = frchainP -> frch_last;
  	    }
  	}
- #endif WITH_PERPROCESS_VARIABLES
      }				/* for(each struct frchain) */
  
    /*
--- 228,233 ----
***************
*** 346,355 ****
  
    relax_segment (text_frag_root, SEG_TEXT);
    relax_segment (data_frag_root, SEG_DATA);
- #ifdef WITH_PERPROCESS_VARIABLES
-   relax_segment (perprocess_frag_root, SEG_PERPROCESS);
- #endif WITH_PERPROCESS_VARIABLES
- 
    /*
     * Now the addresses of frags are correct within the segment.
     */
--- 254,259 ----
***************
*** 363,381 ****
    md_number_to_chars((char *)&the_exec.a_text,text_siz, sizeof(the_exec.a_text));
    /* the_exec . a_text = text_last_frag -> fr_address; */
  
- #ifdef WITH_PERPROCESS_VARIABLES
    /*
-    * Join the 3 segments into 1 huge segment.
-    * To do this, re-compute every rn_address in the SEG_DATA and SEG_PERPROCESS
-    * frags.
-    * Then join the perprocess frags after the data frags 
-    * and the data frags after the text frags.
-    *
-    * Determine a_data [length of data segment].
-    * Determine a_perprocess_segment [length of perprocess segment].
-    */
- #else WITH_PERPROCESS_VARIABLES
-   /*
     * Join the 2 segments into 1 huge segment.
     * To do this, re-compute every rn_address in the SEG_DATA frags.
     * Then join the data frags after the text frags.
--- 267,273 ----
***************
*** 382,389 ****
     *
     * Determine a_data [length of data segment].
     */
- #endif WITH_PERPROCESS_VARIABLES
- 
    if (data_frag_root)
      {
        register relax_addressT	slide;
--- 274,279 ----
***************
*** 401,412 ****
  	   fragP;
  	   fragP = fragP -> fr_next)
  	{
- #ifdef WITH_PERPROCESS_VARIABLES
- 	  if (fragP == perprocess_frag_root)
- 	    {
- 	      printf("OOPS, we shouldn't be here.");
- 	    }
- #endif WITH_PERPROCESS_VARIABLES
  	  fragP -> fr_address += slide;
  	}
        know( text_last_frag );
--- 291,296 ----
***************
*** 423,471 ****
  #endif
    md_number_to_chars((char *)&the_exec.a_bss,local_bss_counter,sizeof(the_exec.a_bss));
  
- #ifdef WITH_PERPROCESS_VARIABLES
- 
-   if (perprocess_frag_root)
-     {
-       register relax_addressT	slide;
- 
-       know(   data_last_frag -> fr_type   == rs_fill && data_last_frag -> fr_offset == 0 );
-       perprocess_siz=perprocess_last_frag->fr_address;
-       md_number_to_chars((char *)&the_exec.a_perprocess, perprocess_siz, sizeof(the_exec.a_perprocess));
-       /* the_exec . a_perprocess = perprocess_last_frag -> fr_address; */
- 
-       /* Address in file of the perprocess segment. */
- /*
- ** Let's not do this and see how it turns out, maybe it will mess up
- ** things.
-       slide = bss_address_frag.fr_address + local_bss_counter ; 
- 
-       for (fragP = perprocess_frag_root;
- 	   fragP;
- 	   fragP = fragP -> fr_next)
- 	{
- 	  fragP -> fr_address += slide;
- 	}
- */
-       know( data_last_frag );
-       data_last_frag -> fr_next = perprocess_frag_root;
-     }
-   else {
-       md_number_to_chars((char *)&the_exec.a_perprocess,0,
- 			 sizeof(the_exec.a_perprocess));
-       perprocess_siz = 0;
-   }
- 
- /*
- ** Here's where I think that the bug is.  The perprocess bss stuff is 
- ** just relative to the perpocess segment and nothing else.
- */
-   perprocess_bss_address_frag . fr_address = perprocess_siz;
- 
-   md_number_to_chars((char *)&the_exec.a_perprocess_bss,
- 		     local_perprocess_bss_counter,
- 		     sizeof(the_exec.a_perprocess_bss));
- #endif WITH_PERPROCESS_VARIABLES
  	      
    /*
     *
--- 307,312 ----
***************
*** 698,719 ****
      = sizeof(struct relocation_info) * fixup_segment (text_fix_root, N_TEXT);
    the_exec . a_drsize
      = sizeof(struct relocation_info) * fixup_segment (data_fix_root, N_DATA); */
- #ifdef WITH_PERPROCESS_VARIABLES
-   /* the_exec . a_prsize
-     = sizeof(struct relocation_info) * 
-     fixup_segment (perprocess_fix_root, PERPROCESS); */
- #endif WITH_PERPROCESS_VARIABLES
  
    tr_siz=sizeof(struct relocation_info) * fixup_segment (text_fix_root, N_TEXT);
    md_number_to_chars((char *)&the_exec.a_trsize, tr_siz ,sizeof(the_exec.a_trsize));
    dr_siz=sizeof(struct relocation_info) * fixup_segment (data_fix_root, N_DATA);
    md_number_to_chars((char *)&the_exec.a_drsize, dr_siz, sizeof(the_exec.a_drsize));
- #ifdef WITH_PERPROCESS_VARIABLES
-   pr_siz=sizeof(struct relocation_info) * fixup_segment (perprocess_fix_root, N_PERPROCESS);
-   md_number_to_chars((char *)&the_exec.a_prsize, pr_siz, sizeof(the_exec.a_perprocess));
- #define a_magic a_info
- #endif WITH_PERPROCESS_VARIABLES
- 
  #ifdef EXEC_MACHINE_TYPE
    md_number_to_chars((char *)&the_exec.a_machtype, EXEC_MACHINE_TYPE, sizeof(the_exec.a_machtype));
  #endif
--- 539,549 ----
***************
*** 726,740 ****
      sizeof( the_exec ) +
        text_siz +
          data_siz +
- #ifdef WITH_PERPROCESS_VARIABLES
- 	  perprocess_siz +
- #endif WITH_PERPROCESS_VARIABLES
  	  syms_siz +
  	    tr_siz +
  	      dr_siz +
- #ifdef WITH_PERPROCESS_VARIABLES
- 		pr_siz +
- #endif WITH_PERPROCESS_VARIABLES
  		string_byte_count;
  	
    next_object_file_charP
--- 556,564 ----
***************
*** 768,784 ****
     */
    emit_relocations (text_fix_root, (relax_addressT)0);
    emit_relocations (data_fix_root, text_last_frag -> fr_address);
- #ifdef WITH_PERPROCESS_VARIABLES
- /*
- ** Something that is special about the perprocess segment makes 
- ** passing 0 in work.  I'm not sure what exactly, but this works so far
- ** and maybe it's because the perprocess variable symbols are offset
- ** from the beginning of the perprocess segment and not from the 
- ** beginning of the file.
- */
-   emit_relocations (perprocess_fix_root, (relax_addressT) 0);
- #endif WITH_PERPROCESS_VARIABLES
- 
    /*
     * Emit all symbols left in the symbol chain.
     * Any symbol still undefined is made N_EXT.
--- 592,597 ----
***************
*** 856,864 ****
  relax_segment (segment_frag_root, segment_type)
       struct frag *	segment_frag_root;
       segT		segment_type; /* N_DATA or N_TEXT */
- #ifdef WITH_PERPROCESS_VARIABLES
-      				      /* or N_PERPROCESS */
- #endif WITH_PERPROCESS_VARIABLES
  {
    register struct frag *	fragP;
    register relax_addressT	address;
--- 669,674 ----
***************
*** 865,879 ****
    /* register relax_addressT	old_address; JF unused */
    /* register relax_addressT	new_address; JF unused */
  
- #ifdef WITH_PERPROCESS_VARIABLES
-   know( segment_type == SEG_DATA || segment_type == SEG_TEXT ||
-        segment_type == SEG_PERPROCESS );
- #else  WITH_PERPROCESS_VARIABLES
    know( segment_type == SEG_DATA || segment_type == SEG_TEXT );
- #endif WITH_PERPROCESS_VARIABLES
  
- 
- 
    /* In case md_estimate_size_before_relax() wants to make fixSs. */
    subseg_change (segment_type, 0);
  
--- 675,682 ----
***************
*** 1010,1024 ****
  		target = offset;
  		if (symbolP)
  		  {
- #ifdef WITH_PERPROCESS_VARIABLES
- 		    know(   ((symbolP -> sy_type & N_TYPE) == N_ABS) || 
- 			 ((symbolP -> sy_type & N_TYPE) == N_DATA) || 
- 			 ((symbolP -> sy_type & N_TYPE) == N_TEXT) ||
- 			 ((symbolP -> sy_type & N_TYPE) == N_PERPROCESS));
- #else WITH_PERPROCESS_VARIABLES
  		    know(   ((symbolP -> sy_type & N_TYPE) == N_ABS) || ((symbolP -> sy_type & N_TYPE) == N_DATA) || ((symbolP -> sy_type & N_TYPE) == N_TEXT));
- #endif WITH_PERPROCESS_VARIABLES
- 
  		    know( symbolP -> sy_frag );
  		    know( (symbolP->sy_type&N_TYPE)!=N_ABS || symbolP->sy_frag==&zero_address_frag );
  		    target +=
--- 813,819 ----
***************
*** 1048,1062 ****
   know(   ((symbolP -> sy_type & N_TYPE) == N_ABS) || ((symbolP -> sy_type &
   N_TYPE) == N_DATA) || ((symbolP -> sy_type & N_TYPE) == N_TEXT));
  		    know( symbolP -> sy_frag );
! #ifdef WITH_PERPROCESS_VARIABLES
!  know(   ((symbolP -> sy_type & N_TYPE) == N_ABS) || 
!       ((symbolP -> sy_type & N_TYPE) == N_DATA) || 
!       ((symbolP -> sy_type & N_TYPE) == N_TEXT) ||
!       ((symbolP -> sy_type & N_TYPE) == N_PERPROCESS) );
! #else  WITH_PERPROCESS_VARIABLES
!  		    know( (symbolP->sy_type&N_TYPE)!=N_ABS || symbolP->sy_frag==&zero_address_frag );
! #endif WITH_PERPROCESS_VARIABLES
! 
  		    target +=
  		      symbolP -> sy_value
  			+ symbolP -> sy_frag -> fr_address;
--- 843,849 ----
   know(   ((symbolP -> sy_type & N_TYPE) == N_ABS) || ((symbolP -> sy_type &
   N_TYPE) == N_DATA) || ((symbolP -> sy_type & N_TYPE) == N_TEXT));
  		    know( symbolP -> sy_frag );
! 		    know( (symbolP->sy_type&N_TYPE)!=N_ABS || symbolP->sy_frag==&zero_address_frag );
  		    target +=
  		      symbolP -> sy_value
  			+ symbolP -> sy_frag -> fr_address;
***************
*** 1202,1211 ****
  	  else if (   ((sub_symbolP -> sy_type ^ add_symbol_N_TYPE) & N_TYPE) == 0
  	      && (   add_symbol_N_TYPE == N_DATA
  		  || add_symbol_N_TYPE == N_TEXT
- #ifdef WITH_PERPROCESS_VARIABLES
- 		  || add_symbol_N_TYPE == N_PERPROCESS
- 		  || add_symbol_N_TYPE == N_PERPROCESS_BSS
- #endif WITH_PERPROCESS_VARIABLES
  		  || add_symbol_N_TYPE == N_BSS
  		  || add_symbol_N_TYPE == N_ABS))
  	    {
--- 989,994 ----
***************
*** 1264,1279 ****
  		case N_BSS:
  		case N_DATA:
  		case N_TEXT:
- #ifdef WITH_PERPROCESS_VARIABLES
- 		  /*
- 		  ** There must be cases here to handle N_PERPROCESS and
- 		  ** N_PERPROCESS_BSS, but I am not sure if these are the
- 		  ** correct steps to take since relocating  a peprocess symbol
- 		  ** is different than relocating other symbols.
- 		  */
- 		case N_PERPROCESS_BSS:
- 		case N_PERPROCESS:
- #endif WITH_PERPROCESS_VARIABLES
  		  seg_reloc_count ++;
  		  add_number += add_symbolP -> sy_value;
  		  break;
--- 1047,1052 ----
*** /xxV/cmds/gasnew/pgas/mi/write.h	Wed Sep 13 17:24:43 1989
--- /xxV/cmds/gasnew/dist/write.h	Tue Aug  8 13:46:55 1989
***************
*** 70,78 ****
  
  COMMON fixS *	text_fix_root;	/* Chains fixSs. */
  COMMON fixS *	data_fix_root;	/* Chains fixSs. */
- #ifdef WITH_PERPROCESS_VARIABLES
- COMMON fixS *	perprocess_fix_root;	/* Chains fixSs. */
- #endif WITH_PERPROCESS_VARIABLES
  COMMON fixS **	seg_fix_rootP;	/* -> one of above. */
  
  bit_fixS *bit_fix_new();
--- 70,75 ----
*** /xxV/cmds/gasnew/pgas/pgasvax/mi/vax.c	Wed Sep  6 16:36:44 1989
--- /xxV/cmds/gasnew/dist/vax.c	Tue Aug  8 13:46:37 1989
***************
*** 463,472 ****
  	    case SEG_TEXT:
  	    case SEG_DATA:
  	    case SEG_BSS:
- #ifdef WITH_PERPROCESS_VARIABLES
- 	    case SEG_PERPROCESS:
- 	    case SEG_PERPROCESS_BSS:
- #endif WITH_PERPROCESS_VARIABLES
  	    case SEG_ABSOLUTE:
  	    case SEG_UNKNOWN:
  	      break;
--- 463,468 ----
***************
*** 710,736 ****
  	  this_subtract_symbol = expP -> X_subtract_symbol;
  	  to_seg               = expP -> X_seg;
  	  is_undefined = (to_seg == SEG_UNKNOWN);
- #ifdef WITH_PERPROCESS_VARIABLES 
  	  know(   to_seg == SEG_UNKNOWN		\
  	       || to_seg == SEG_ABSOLUTE	\
  	       || to_seg == SEG_DATA		\
  	       || to_seg == SEG_TEXT		\
  	       || to_seg == SEG_BSS		\
- 	       || to_seg == SEG_PERPROCESS	\
- 	       || to_seg == SEG_PERPROCESS_BSS	\
  	       || to_seg == SEG_BIG		\
  	       );
- #else  WITH_PERPROCESS_VARIABLES
- 	  know(   to_seg == SEG_UNKNOWN		\
- 	       || to_seg == SEG_ABSOLUTE	\
- 	       || to_seg == SEG_DATA		\
- 	       || to_seg == SEG_TEXT		\
- 	       || to_seg == SEG_BSS		\
- 	       || to_seg == SEG_PERPROCESS	\
- 	       || to_seg == SEG_PERPROCESS_BSS	\
- 	       || to_seg == SEG_BIG		\
- 	       );
- #endif WITH_PERPROCESS_VARIABLES
  	  at = operandP -> vop_mode & 1;
  	  length = operandP->vop_short=='b' ? 1 : operandP->vop_short=='w' ? 2 : operandP->vop_short=='l' ? 4 : 0;
  	  nbytes = operandP -> vop_nbytes;
--- 706,718 ----
--
Peter Ham			PO Box 3430	(h)(415) 324-9645
MS Computer Science Student	Stanford, CA	ham@polya.stanford.edu
Stanford University 		94309		(o)(415) 723-2067