🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

1 total messages Started by Peter R. Ham Thu, 14 Sep 1989 00:27
perprocess variable diffs to gas
#419
Author: Peter R. Ham
Date: Thu, 14 Sep 1989 00:27
1565 lines
50772 bytes
*** /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
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads