diff -N -c -r gcc-2.7.2/collect2.c gcc-2.7.2-riscbsd/collect2.c
*** gcc-2.7.2/collect2.c	Tue Sep 12 18:08:27 1995
--- gcc-2.7.2-riscbsd/collect2.c	Mon Mar  4 04:32:40 1996
***************
*** 1123,1128 ****
--- 1122,1129 ----
    /* Likewise for `collect-ld'.  */
    if (ld_file_name == 0)
      ld_file_name = find_a_file (&cpath, collect_ld_suffix);
+   if (ld_file_name == 0)
+     ld_file_name = find_a_file (&path, real_ld_suffix);
    /* Search the compiler directories for `ld'.  We have protection against
       recursive calls in find_a_file.  */
    if (ld_file_name == 0)
diff -N -c -r gcc-2.7.2/config/arm/arm.md gcc-2.7.2-riscbsd/config/arm/arm.md
*** gcc-2.7.2/config/arm/arm.md	Wed Nov  8 13:59:00 1995
--- gcc-2.7.2-riscbsd/config/arm/arm.md	Sat Mar  2 04:27:19 1996
***************
*** 3319,3325 ****
  	(if_then_else (match_operand 1 "comparison_operator" "")
  		      (match_operand:SI 2 "arm_not_operand" "")
  		      (match_operand:SI 3 "register_operand" "")))]
!   ""
    "
  {
    enum rtx_code code = GET_CODE (operands[1]);
--- 3319,3325 ----
  	(if_then_else (match_operand 1 "comparison_operator" "")
  		      (match_operand:SI 2 "arm_not_operand" "")
  		      (match_operand:SI 3 "register_operand" "")))]
!   "0"
    "
  {
    enum rtx_code code = GET_CODE (operands[1]);
diff -N -c -r gcc-2.7.2/config/arm/netbsd.h gcc-2.7.2-riscbsd/config/arm/netbsd.h
*** gcc-2.7.2/config/arm/netbsd.h	Thu Jan  1 01:00:00 1970
--- gcc-2.7.2-riscbsd/config/arm/netbsd.h	Sat Mar  2 04:39:47 1996
***************
*** 0 ****
--- 1,141 ----
+ /* Definitions of target machine for GNU compiler.
+    NetBSD/arm (RiscBSD) version.
+    Copyright (C) 1993, 1994 Free Software Foundation, Inc.
+    Contributed by Mark Brinicombe (amb@physig.ph.kcl.ac.uk)
+ 
+ This file is part of GNU CC.
+ 
+ GNU CC 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 2, or (at your option)
+ any later version.
+ 
+ GNU CC 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 GNU CC; see the file COPYING.  If not, write to
+ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+ 
+ /* Ok it either ARM2 or ARM3 code is produced we need to define the
+  * appropriate symbol and delete the ARM6 symbol
+  */
+  
+ /* Run-time Target Specification.  */
+ 
+ #define TARGET_VERSION fputs (" (ARM/NetBSD)", stderr);
+ 
+ /* This is used in ASM_FILE_START */
+ 
+ #define ARM_OS_NAME "NetBSD"
+ 
+ /* Unsigned chars produces much better code than signed.  */
+ 
+ #define DEFAULT_SIGNED_CHAR  0
+ 
+ /* ARM600 default cpu */
+ 
+ #define TARGET_DEFAULT 8
+ 
+ /* Since we always use GAS as our assembler we support stabs */
+ 
+ #define DBX_DEBUGGING_INFO 1
+ 
+ /*#undef ASM_DECLARE_FUNCTION_NAME*/
+ 
+ #include "arm/arm.h"
+ 
+ /* Gets redefined in config/netbsd.h */
+ 
+ #undef TARGET_MEM_FUNCTIONS
+ 
+ #include <netbsd.h>
+ 
+ /* Ok some nice defines for CPP
+    By default we define arm32 __arm32__ and __arm6__
+    However if we are compiling 26 bit code -m2 or -m3 then
+    we remove all these definitions.
+    The arm32 and __arm32__ defines indication that the compiler
+    is generating 32 bit address space code.
+    The __arm2__ __arm3__ and __arm6__ are obvious. */
+ 
+ #undef CPP_PREDEFINES
+ #define CPP_PREDEFINES "-Dunix -Darm32 -D__arm32__ -D__arm6__ -Driscbsd -D__NetBSD__ -Asystem(unix) -Asystem(NetBSD) -Acpu(arm) -Amachine(arm)"
+ 
+ #undef CPP_SPEC
+ #define CPP_SPEC "%{m2:-D__arm2__} %{m3:-D__arm3__} %{m2:-U__arm6__}	\
+ 	%{m3:-U__arm6__} %{m2:-U__arm32__} %{m3:-U__arm32__}		\
+ 	 %{m2:-Uarm32} %{m3:-Uarm32}					\
+ 	%{posix:-D_POSIX_SOURCE}"
+ 
+ #undef SIZE_TYPE
+ #define SIZE_TYPE "unsigned int"
+ 
+ #undef PTRDIFF_TYPE
+ #define PTRDIFF_TYPE "int"
+ 
+ #undef WCHAR_TYPE
+ #define WCHAR_TYPE "int"
+ 
+ #undef WCHAR_UNSIGNED
+ #define WCHAR_UNSIGNED 0
+ 
+ #undef WCHAR_TYPE_SIZE
+ #define WCHAR_TYPE_SIZE 32
+ 
+ #define HANDLE_SYSV_PRAGMA
+ 
+ 
+ /* We don't have any limit on the length as out debugger is GDB */
+ 
+ #undef DBX_CONTIN_LENGTH
+ 
+ /* NetBSD does its profiling differently to the Acorn compiler. We don't need
+    a word following mcount call and to skip if requires an assembly stub of
+    use of fomit-frame-pointer when compiling the profiling functions.
+    Since we break Acorn CC compatibility below a little more won't hurt */
+ 
+ #undef FUNCTION_PROFILER
+ #define FUNCTION_PROFILER(STREAM,LABELNO)  				    \
+ {									    \
+     fprintf(STREAM, "\tmov\t%sip, %slr\n", REGISTER_PREFIX, REGISTER_PREFIX); \
+     fprintf(STREAM, "\tbl\tmcount\n");					    \
+ }
+ 
+ /* VERY BIG NOTE : Change of structure alignment for RiscBSD.
+    There are consequences you should be aware of */
+ 
+ /* Normally GCC/arm uses a structure alignment of 32. This means that
+    structures are padded to a word boundry. However this causes
+    problems with bugged NetBSD kernel code (possible userland code
+    as well - I have not checked every binary).
+    The nature of this the bugged code is to rely on sizeof() returning
+    the correct size of various structures rounded to the nearest byte
+    (SCSI and ether code are two examples, the vm system is another)
+    This code starts to break when the structure alignment is 32 as sizeof()
+    will report a word rounded size.
+    By changing the structure alignment to 8. GCC will conform to what
+    is expected by NetBSD.
+ 
+    This has several side effects that should be considered.
+    1. Structures will only be aligned to the size of the largest member.
+       i.e. structures containing only bytes will be byte aligned.
+            structures containing shorts will be half word alinged.
+            structures containing ints will be word aligned.
+ 
+       This means structures should be padded to a word boundry if
+       alignment of 32 is require for byte structures etc.
+       
+    2. A potential performance penalty may exist if strings are no longer
+       word aligned. GCC will not be able to use word load/stores for copy
+       short strings.
+       
+    This modification is not encouraged but with the present state of the
+    NetBSD source tree it is currently the only solution to meet the
+    requirements.
+ */
+ 
+ #undef STRUCTURE_SIZE_BOUNDARY
+ #define STRUCTURE_SIZE_BOUNDARY 8
diff -N -c -r gcc-2.7.2/config/arm/t-netbsd gcc-2.7.2-riscbsd/config/arm/t-netbsd
*** gcc-2.7.2/config/arm/t-netbsd	Thu Jan  1 01:00:00 1970
--- gcc-2.7.2-riscbsd/config/arm/t-netbsd	Sat Mar  2 03:57:21 1996
***************
*** 0 ****
--- 1,11 ----
+ # Just for these, we omit the frame pointer since it makes such a big
+ # difference.  It is then pointless adding debugging.
+ LIBGCC2_CFLAGS=-O2 -fomit-frame-pointer $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) -g0
+ #	-Dinhibit_libc
+ 
+ # Don't build enquire
+ ENQUIRE=
+ 
+ CROSS_LIBGCC1 = libgcc1-asm.a
+ LIB1ASMSRC = arm/lib1funcs.asm
+ LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls
diff -N -c -r gcc-2.7.2/config/arm/xm-netbsd.h gcc-2.7.2-riscbsd/config/arm/xm-netbsd.h
*** gcc-2.7.2/config/arm/xm-netbsd.h	Thu Jan  1 01:00:00 1970
--- gcc-2.7.2-riscbsd/config/arm/xm-netbsd.h	Sat Mar  2 04:39:09 1996
***************
*** 0 ****
--- 1,10 ----
+ /* Configuration for GCC for ARM running NetBSD as host.  */
+ 
+ #include <arm/xm-arm.h>
+ 
+ /* xm-netbsd.h defines this */
+ #ifdef HAVE_VPRINTF
+ #undef HAVE_VPRINTF
+ #endif
+ 
+ #include <xm-netbsd.h>
diff -N -c -r gcc-2.7.2/config.status gcc-2.7.2-riscbsd/config.status
*** gcc-2.7.2/config.status	Thu Jan  1 01:00:00 1970
--- gcc-2.7.2-riscbsd/config.status	Sat Mar  2 05:07:30 1996
***************
*** 0 ****
--- 1,4 ----
+ #!/bin/sh
+ # GCC was configured as follows:
+ ./configure --verbose --with-gnu-ld --with-gnu-as --with-stabs --host=arm-riscpc-netbsd1.1A --target=arm-riscpc-netbsd1.1A
+ echo host=arm-riscpc-netbsd1.1A target=arm-riscpc-netbsd1.1A build=arm-riscpc-netbsd1.1A
diff -N -c -r gcc-2.7.2/config.sub gcc-2.7.2-riscbsd/config.sub
*** gcc-2.7.2/config.sub	Thu Jun 15 22:01:49 1995
--- gcc-2.7.2-riscbsd/config.sub	Sat Mar  2 04:31:04 1996
***************
*** 145,151 ****
  		;;
  	# Recognize the basic CPU types with company name.
  	vax-* | tahoe-* | i[345]86-* | i860-* | m68k-* | m68000-* | m88k-* \
! 	      | sparc-* | ns32k-* | fx80-* | arm-* | c[123]* \
  	      | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* | power-* \
  	      | none-* | 580-* | cray2-* | h8300-* | i960-* | xmp-* | ymp-* \
  	      | hppa1.0-* | hppa1.1-* | alpha-* | we32k-* | cydra-* | ns16k-* \
--- 145,151 ----
  		;;
  	# Recognize the basic CPU types with company name.
  	vax-* | tahoe-* | i[345]86-* | i860-* | m68k-* | m68000-* | m88k-* \
! 	      | sparc-* | ns32k-* | fx80-* | arm-* | arm32-* | c[123]* \
  	      | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* | power-* \
  	      | none-* | 580-* | cray2-* | h8300-* | i960-* | xmp-* | ymp-* \
  	      | hppa1.0-* | hppa1.1-* | alpha-* | we32k-* | cydra-* | ns16k-* \
diff -N -c -r gcc-2.7.2/configure gcc-2.7.2-riscbsd/configure
*** gcc-2.7.2/configure	Sun Nov 26 19:39:15 1995
--- gcc-2.7.2-riscbsd/configure	Sat Mar  2 04:29:35 1996
***************
*** 619,624 ****
--- 619,633 ----
  		tmake_file=arm/t-semi
  		fixincludes=Makefile.in # There is nothing to fix
  		;;
+ 	arm-*-netbsd* | arm32-*-netbsd*)	# Acorn RISC machine running NetBSD
+ 		tm_file=arm/netbsd.h
+ 		xm_file=arm/xm-netbsd.h
+ 		# On NetBSD, the headers are already okay.
+ 		fixincludes=Makefile.in
+ 		tmake_file=arm/t-netbsd
+ 		xmake_file=x-netbsd
+ 		use_collect2=yes
+ 		;;
  	arm-*-*)			# generic version
  		;;
  	c1-convex-*)			# Convex C1
