From: Jan-Benedict G. <jb...@us...> - 2004-05-27 14:40:43
|
Update of /cvsroot/linux-vax/toolchain/experimental_toolchain In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11830 Added Files: README experimental_toolchain.sh vax-linux-gcc.patch vax-linux-libc.patch Log Message: - Moving script + readme into own directory. - Also adding both applied patchsets for easier access (they're perfectly fine on lug-owl.de where they used to be, but I think it's better if you've got access to them, too :) --- NEW FILE: experimental_toolchain.sh --- #!/bin/sh # # This script will attempt to # # - Download a lot of things # - Create releases of gcc + binutils # - Unpack gcc / binutils # - Patch everything # - Build most of a toolchain from it # # Bugs: # # - This script is highly sub-optimal wrt. download size. # - It doesn't finish completely because vax-linux isn't yet # fully supported :-( # - To checkout binutils, you (once) have to run # cvs -d :pserver:an...@so...:/cvs/src login # Password is "anoncvs". # - Checkouts of GCC are only available via ssh transport. So # ssh may ask you (once) to confirm FSF's host key with "yes". # - To checkout binutils, you (once) have to run # cvs -d :pserver:an...@so...:/cvs/glibc login # Password is "anoncvs". # - To checkout the Linux kernel, you (once) have to run # cvs -d:pserver:ano...@cv...:/cvsroot/linux-vax login # Password is empty, "", nada, ... # - You need to have /usr/share/misc/config.guess . Get that from # GNU's config package... # - You may want to set MAKE_FLAGS to "-j2" if you're the happy # owner of a dual CPU machine... # # # # $Id: experimental_toolchain.sh,v 1.1 2004/05/27 14:40:28 jbglaw Exp $ # # $Log: experimental_toolchain.sh,v $ # Revision 1.1 2004/05/27 14:40:28 jbglaw # - Moving script + readme into own directory. # - Also adding both applied patchsets for easier access (they're perfectly # fine on lug-owl.de where they used to be, but I think it's better if # you've got access to them, too :) # # Revision 1.2 2004/05/27 12:45:35 jbglaw # - For now, also copy config.guess because currently, Dan hardcoded it's # path into crosstool.sh. However, the plan is to supply $BUILD from # outside, so I've already sent a patch... # - Also, I'm just putting in a small patch to the gcc patchset (still on # my website, I'd really check it into CVS RSN!) to not let the SIGSEGV # during compilation of check_fds.c happen. This was due to wrong code # in ./gcc-HEAD/gcc/config/vax/vax.c, at round line 709. The second line # after the opening '{' makes it die, bt a fast 'return c+5;' makes it # survive. # # Andy, could you have a look at that? # # Revision 1.1 2004/05/19 09:15:02 jbglaw # - Script and README to build a vax-linux toolchain from all HEAD sources. # - Currently capable of creating a Kernel-only cross-compiler, but glibc # is not yet built fully (due to glibc/gcc bugs). # - I suppose that this GCC isn't all _that_ useful, but the generated .o # files at least contain VAX assembly:) Maybe some parts are even really # useable. I'll try to verify that by linking 2.95.2 code with 3.5.0 # code (just by adding more and more gcc-HEAD compiled .o files into # kernel link run) to see if it instantly breaks... # # # MAKE_FLAGS="-j2" MAKE_FLAGS="" GLOBAL_BASE_DIR= INSTALL_DIR= DO_PREPARE=0 DO_BUILD=0 set -e # set -x while [ $# -ne 0 ]; do case "${1}" in -d|--download|-p|--prepare) DO_PREPARE=1;; -b|--build|-i|--install) DO_BUILD=1;; *) if [ -z "${GLOBAL_BASE_DIR}" ]; then GLOBAL_BASE_DIR="${1}" else INSTALL_DIR="${1}" fi;; esac shift done [ "${DO_PREPARE}" -eq 1 ] && echo "$0: Will download and prepare sources" [ "${DO_BUILD}" -eq 1 ] && echo "$0: Will create a cross-compiler and install it" [ -n "${GLOBAL_BASE_DIR}" ] && echo "$0: Will use ${GLOBAL_BASE_DIR} for temporary storage" [ -n "${INSTALL_DIR}" ] && echo "$0: Will install to ${INSTALL_DIR}" if [ -z "${GLOBAL_BASE_DIR}" -o -z "${INSTALL_DIR}" ]; then echo "$0 [--prepare] [--install] <tempdir> <installdir>" >&2 exit 1 fi GLOBAL_BASE_DIR="`cd "${GLOBAL_BASE_DIR}"; pwd`" INSTALL_DIR="`cd "${INSTALL_DIR}"; pwd`" # # Where do we find things? # PREP_DIR="${GLOBAL_BASE_DIR}/prepare" LOCAL_SRC_DIR="${GLOBAL_BASE_DIR}/source" BLD_DIR="${GLOBAL_BASE_DIR}/build" if [ "${DO_PREPARE}" -eq 1 ]; then # # Prepare directories # mkdir -p "${PREP_DIR}" mkdir -p "${LOCAL_SRC_DIR}" mkdir -p "${BLD_DIR}" # # Prepare binutils. # # I had a hard time trying to directly build a binutils CVS co. I failed. # My current approach is to do a checkout, then build a release tar-bz2 from # it and unpack this. *That* actually will work. # cd "${PREP_DIR}" cvs -z 9 -d :pserver:an...@so...:/cvs/src co binutils cd src make -f src-release binutils.tar.bz2 cd "${LOCAL_SRC_DIR}" tar xjf ${PREP_DIR}/src/binutils-*.tar.bz2 mv binutils-* binutils-HEAD # # Prepare GCC. # # GCC is quite like binutils. I haven't figured out how to build it off a # checked-out CVS tree. So I first build a release from it. # # The release script does have another problem: it doesn't use the local # CVS sandbox, but calls cvs on it's own to create a fresh sandbox. To save # some bandwidth, I first download the release script, then call it. # # Additionally, the release script uses wrong CVS server name and repository # path... # cd "${PREP_DIR}" wget -O gcc_release.0 'http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/gcc/gcc/maintainer-scripts/gcc_release?rev=HEAD&content-type=text/plain' cat gcc_release.0 | sed -e 's#^CVS_SERVER.*#CVS_SERVER="savannah.gnu.org"#' > gcc_release.1 cat gcc_release.1 | sed -e 's#^CVS_REPOSITORY.*#CVS_REPOSITORY="/cvsroot/gcc"#' > gcc_release chmod +x gcc_release mkdir -p "${PREP_DIR}/gcc" ./gcc_release -s HEAD:HEAD -d "${PREP_DIR}/gcc" -u anoncvs sources tarfiles cd "${LOCAL_SRC_DIR}" tar xjf ${PREP_DIR}/gcc/*/gcc-HEAD-*.tar.bz2 mv gcc-* gcc-HEAD # # Prepare glibc. # # Preparing glibc sources is actually an easy task. Just check it out, # then remove the nptl* directories (these won't probably work yet for # vax-linux, but I may need to verify that again. It's from ages where # we had no current GCC at hand...). # cd "${PREP_DIR}" cvs -z 9 -d :pserver:an...@so...:/cvs/glibc co libc mkdir -p "${LOCAL_SRC_DIR}/glibc-HEAD" (cd libc && tar cf - . ;) | (cd "${LOCAL_SRC_DIR}/glibc-HEAD" && tar xf -;) cd "${LOCAL_SRC_DIR}/glibc-HEAD" rm -rf nptl* # # Download current crosstool scripts. We only need crosstool.sh, though... # cd "${PREP_DIR}" wget -O crosstool_website.html http://www.kegel.com/crosstool/ CT_URL="`cat crosstool_website.html | grep crosstool- | tail -n 1 | sed -e 's#.*\(http://[a-z0-9./-]*\).*#\1#'`" wget -O crosstool_current.tar.gz "${CT_URL}" tar xzf crosstool_current.tar.gz cp crosstool-*/crosstool.sh "${GLOBAL_BASE_DIR}" chmod +x "${GLOBAL_BASE_DIR}/crosstool.sh" # # This'll go away after Dan applied the patch I sent him:) # cp crosstool-*/config.guess "${GLOBAL_BASE_DIR}" # # Get current VAX Linux Kernel v2.6.x from CVS # cd "${PREP_DIR}" cvs -z9 -d:pserver:ano...@cv...:/cvsroot/linux-vax co kernel-2.5 mkdir -p "${LOCAL_SRC_DIR}/linux-HEAD" (cd kernel-2.5 && tar cf - . ;) | (cd "${LOCAL_SRC_DIR}/linux-HEAD" && tar xf -;) cd "${LOCAL_SRC_DIR}/linux-HEAD" make ARCH=vax defconfig # # Now patch gcc and libc with current patches. binutils already work # out of the box:) # cd "${PREP_DIR}" wget -O vax-linux-gcc.patch 'http://cvs.sourceforge.net/viewcvs.py/linux-vax/toolchain/experimental_toolchain/vax-linux-gcc.patch?rev=HEAD&view=auto' wget -O vax-linux-libc 'http://cvs.sourceforge.net/viewcvs.py/linux-vax/toolchain/experimental_toolchain/vax-linux-libc.patch?rev=HEAD&view=auto' # wget http://lug-owl.de/~jbglaw/vax-linux-gcc.patch # wget http://lug-owl.de/~jbglaw/vax-linux-libc.patch cd "${LOCAL_SRC_DIR}/gcc-HEAD" patch -p1 < "${PREP_DIR}/vax-linux-gcc.patch" cd "${LOCAL_SRC_DIR}/glibc-HEAD" patch -p1 < "${PREP_DIR}/vax-linux-libc.patch" fi # if [ "${DO_PREPARE}" -eq 1 ]; then # # This was the fun part. Now everything should (at least partially) # build:) Yeppee!!! # # This last step takes about 11min on my Athlon (2x 1.4GHz, 1.5GB RAM) # until building of GLIBC breaks due to compiler errors. # if [ "${DO_BUILD}" -eq 1 ]; then cd "${GLOBAL_BASE_DIR}" PREFIX="${INSTALL_DIR}" \ BUILD_DIR="${BLD_DIR}" \ SRC_DIR="${LOCAL_SRC_DIR}" \ BINUTILS_DIR=binutils-HEAD \ GCC_DIR=gcc-HEAD \ GLIBC_DIR=glibc-HEAD \ LINUX_DIR=linux-HEAD \ TARGET=vax-linux \ TARGET_CFLAGS="-O -g" \ BUILD=`/usr/share/misc/config.guess` \ USE_SYSROOT=yes \ PARALLELMFLAGS="${MAKE_FLAGS}" ./crosstool.sh fi # if [ "${DO_BUILD}" -eq 1 ]; then --- NEW FILE: vax-linux-libc.patch --- diff -Nur -x texis -x Entries -x Entries.Log -x Root -x Repository some_libc/elf/elf.h libc-work/elf/elf.h --- some_libc/elf/elf.h 2004-05-07 03:56:25.000000000 +0200 +++ libc-work/elf/elf.h 2004-05-15 18:37:28.000000000 +0200 @@ -2462,6 +2462,29 @@ #define R_X86_64_NUM 24 +/* DEC VAX relocations. */ +#define R_VAX_32 1 /* Direct 32 bit */ +#define R_VAX_16 2 /* Direct 16 bit */ +#define R_VAX_8 3 /* Direct 8 bit */ +#define R_VAX_PC32 4 /* PC relative 32 bit */ +#define R_VAX_PC16 5 /* PC relative 16 bit */ +#define R_VAX_PC8 6 /* PC relative 8 bit */ +#define R_VAX_GOT32 7 /* 32 bit PC relative GOT entry */ +#define R_VAX_PLT32 13 /* 32 bit PC relative PLT address */ +#define R_VAX_COPY 19 /* Copy symbol at runtime */ +#define R_VAX_GLOB_DAT 20 /* Create GOT entry */ +#define R_VAX_JMP_SLOT 21 /* Create PLT entry */ [...7452 lines suppressed...] +/* FIXME -maybe*/ +#define CALL_MCOUNT .data; 1:; .long 0; .text; moval 1b,%r0; jsb mcount; +#else +#define CALL_MCOUNT /* Do nothing. */ +#endif + +#ifdef NO_UNDERSCORES +/* Since C identifiers are not normally prefixed with an underscore + on this system, the asm identifier `syscall_error' intrudes on the + C name space. Make sure we use an innocuous name. */ +#define syscall_error __syscall_error +#define mcount _mcount +#endif + +#endif /* __ASSEMBLER__ */ --- /dev/null 2004-02-01 01:00:40.000000000 +0100 +++ glibc-HEAD/sysdeps/vax/abort-instr.h 2004-05-27 00:20:39.000000000 +0200 @@ -0,0 +1,2 @@ +/* An instruction which should crash any program is a breakpoint. */ +#define ABORT_INSTRUCTION asm ("bugw $0") --- NEW FILE: README --- Quick-Start ~~~~~~~~~~~ ~$ mkdir opt ~$ mkdir /tmp/to_be_removed ~$ ./experimental_toolchain.sh -d -i /tmp/to_be_removed opt Space Requirements ~~~~~~~~~~~~~~~~~~ As far as the build process proceeds right now, you have to have about 60MB free space in the install directory (~/opt in the example above) and about 1.6GB for the temporary directory. Needed space will raise somewhat while glibc (or GCC) gets fixed, of course... Theory fo Operation ~~~~~~~~~~~~~~~~~~~ If you call it with -d/--download/-p/--prepare, the script will try to download all current HEAD versions of binutils, gcc, glibc and the vax-linux kernel, as well as patches to gcc and glibc and the crosstool scripts (by Dan Kegel). If called with -i/--install/-b/--build, it'll take the prepared sources and try to build a vax-linux toolchain. Currently, it breaks while compiling parts of glibc, but you'll see that it build a vax-linux-gcc up to that point, that can be used (somewhat) to compile the Linux kernel. Please note that this GCC is of quite limited use right now. It omits some (serious?) warnings during kernel compile, can't actually compile glibc and I suppose that it contains quite a lot of bugs. However, it's a *start* (albeit hackish), but I hope that others help to finish this task:) Additional Notes ~~~~~~~~~~~~~~~~ Dan Kegel started to investigate in how to do a Canadian Cross. This means that this script should, at some point of time, be capable of also generating a vax-linux hosted native compiler for vax-linux. But prior that, we need to fix bugs in GCC and glibc... May 19, 2004, Jan-Benedict Glaw <jb...@lu...> --- NEW FILE: vax-linux-gcc.patch --- diff -Nur some_gcc/gcc-HEAD-20040515/gcc/config/vax/linux.h gcc-HEAD-20040515/gcc/config/vax/linux.h --- some_gcc/gcc-HEAD-20040515/gcc/config/vax/linux.h 1970-01-01 01:00:00.000000000 +0100 +++ gcc-HEAD-20040515/gcc/config/vax/linux.h 2004-05-15 21:31:00.000000000 +0200 @@ -0,0 +1,134 @@ +/* Definitions for VAX running Linux-based GNU systems with ELF format. + Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999 Free Software Foundation, Inc. + Contributed by Andy Phillips. + Based heavily on i386 version by Eric Youngdale, + with modifications by H.J. Lu. + +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, 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + + +/* temporary*/ +#define inhibit_libc + +#define LINUX_DEFAULT_ELF +/* FIXME: check this with the gas sources */ +#define LPREFIX ".L" + +/* Keeps gcc quiet. This is defined in terms of the vaxc structure + * alignment flag. Only really applicable to VMS. For this target we + * will be getting a definition from svr4.h */ + +#ifdef PCC_BITFIELD_TYPE_MATTERS +#undef PCC_BITFIELD_TYPE_MATTERS +#endif + +#undef TARGET_VERSION +#define TARGET_VERSION fprintf (stderr, " (VAX Linux/ELF)"); + +#define TARGET_OS_CPP_BUILTINS() \ + do \ + { \ + LINUX_TARGET_OS_CPP_BUILTINS(); \ + if (flag_pic) \ + { \ + builtin_define ("__PIC__"); \ + builtin_define ("__pic__"); \ + } \ + } \ + while (0) + +#undef CPP_SPEC +#define CPP_SPEC "%(cpp_cpu) %{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}" + +#undef CC1_SPEC +#define CC1_SPEC "%{profile:-p}" +#warning "Ignoring original CC1 spec" +#if 0 +#define CC1_SPEC "%(cc1_cpu) %{profile:-p} %{!fno-pic: \ + %{!mno-pic: %{!fpic: %{!fPIC:-fPIC}}} \ + %{!mindirect: %{!mno-indirect:-mNO-INDIREct}}} \ + %{mno-pic: -fno-pic -mindirect} \ + %{fno-pic: \ + %{!mindirect: %{!mno-indirect:-mindirect}}}" +#endif /* 0 */ + +#define CC1PLUS_SPEC CC1_SPEC + +/* Provide a LINK_SPEC appropriate for Linux. Here we provide support + for the special GCC options -static and -shared, which allow us to + link things in one of these three modes by applying the appropriate + combinations of options at link-time. We like to support here for + as many of the other GNU linker options as possible. But I don't + have the time to search for those flags. I am sure how to add + support for -soname shared_object_name. H.J. + + I took out %{v:%{!V:-V}}. It is too much :-(. They can use + -Wl,-V. + + When the -shared link option is used a final link is not being + done. */ + +/* If ELF is the default format, we should not use /lib/elf. */ +/* we do not support libc5 */ + +#undef LINK_SPEC +#define LINK_SPEC "-m elf32vax %{shared:-shared} \ + %{!shared: \ + %{!ibcs: \ + %{!static: \ + %{rdynamic:-export-dynamic} \ + %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \ + %{static:-static}}}" + + +/* Make gcc agree with <machine/ansi.h> */ + +#undef SIZE_TYPE +#define SIZE_TYPE "unsigned int" + +#undef PTRDIFF_TYPE +#define PTRDIFF_TYPE "int" + +#undef WCHAR_TYPE +#define WCHAR_TYPE "int" + +#undef WCHAR_TYPE_SIZE +#define WCHAR_TYPE_SIZE 32 + +/* Until they use ELF or something that handles dwarf2 unwinds + and initialization stuff better. */ +#undef DWARF2_UNWIND_INFO +#define DWARF2_UNWIND_INFO 0 + +#undef ASM_COMMENT_START +#define ASM_COMMENT_START "#" + +/* svr4.h defines ASM_OUTPUT_CASE_LABEL as calling the + ASM_OUTPUT_BEFORE_CASE_LABEL and ASM_OUTPUT_INTERNAL_LABEL + macros in turn. This causes a .align 2 to be inserted between the + CASEx instruction and the jump table. This is Not Good. + Undefining ASM_OUTPUT_CASE_LABEL altogether, causes the compiler + to fallback to ASM_OUPUT_INTERNAL_LABEL which is what we want. */ + +#undef ASM_OUTPUT_CASE_LABEL + +/* How to renumber registers for dbx and gdb. + Vax needs no change in the numeration. */ +/* This is repeated here, because it gets undefined in <svr4.h> */ + +#define DBX_REGISTER_NUMBER(REGNO) (REGNO) diff -Nur some_gcc/gcc-HEAD-20040515/gcc/config/vax/pic.h gcc-HEAD-20040515/gcc/config/vax/pic.h --- some_gcc/gcc-HEAD-20040515/gcc/config/vax/pic.h 1970-01-01 01:00:00.000000000 +0100 +++ gcc-HEAD-20040515/gcc/config/vax/pic.h 2004-05-15 18:54:54.000000000 +0200 @@ -0,0 +1,55 @@ +/* pic support routines Contributed by Andy Phillips, + atp at mssl.ucl.ac.uk March 1999 + + i386 implementation used as template + +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, 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#undef REGISTER_PREFIX +#define REGISTER_PREFIX "%" + +#undef VAX_ISTREAM_SYNC +#define VAX_ISTREAM_SYNC "movpsl -(%sp)\n\tpushal 1(%pc)\n\trei" + +#undef TARGET_GAS +#define TARGET_GAS (1) + +#undef TARGET_DEFAULT +#define TARGET_DEFAULT 0 + +#define TARGET_MEM_FUNCTIONS + +/* Function CSE screws up PLT .vs. GOT usage. + * */ +#define NO_FUNCTION_CSE + +/* This makes use of a hook in varasm.c to mark all external functions + * for us. We use this to make sure that external functions are correctly + * referenced from the PLT. */ + +#define NO_EXTERNAL_INDIRECT_ADDRESS + +/* Output assembler code to FILE to increment profiler label # LABELNO + for profiling a function entry. */ +/* overrides default definition in vax.h */ + +#undef FUNCTION_PROFILER +#define FUNCTION_PROFILER(FILE, LABELNO) \ + asm_fprintf (FILE, "\tmovab .LP%d,%Rr0\n\tjsb __mcount\n", (LABELNO)) + +#define TARGET_DEBUG_ADDR 0 diff -Nur some_gcc/gcc-HEAD-20040515/gcc/config/vax/vax.c gcc-HEAD-20040515/gcc/config/vax/vax.c --- some_gcc/gcc-HEAD-20040515/gcc/config/vax/vax.c 2004-03-06 22:14:50.000000000 +0100 +++ gcc-HEAD-20040515/gcc/config/vax/vax.c 2004-05-15 18:54:54.000000000 +0200 @@ -53,6 +53,7 @@ static int vax_rtx_costs_1 (rtx, enum rtx_code, enum rtx_code); static bool vax_rtx_costs (rtx, int, int, int *); static rtx vax_struct_value_rtx (tree, int); +static void vax_encode_section_info (tree, rtx, int first); /* Initialize the GCC target structure. */ #undef TARGET_ASM_ALIGNED_HI_OP @@ -85,6 +86,9 @@ #undef TARGET_STRUCT_VALUE_RTX #define TARGET_STRUCT_VALUE_RTX vax_struct_value_rtx +#undef TARGET_ENCODE_SECTION_INFO +#define TARGET_ENCODE_SECTION_INFO vax_encode_section_info + struct gcc_target targetm = TARGET_INITIALIZER; /* Set global variables as needed for the options enabled. */ @@ -789,6 +793,25 @@ return gen_rtx_REG (Pmode, VAX_STRUCT_VALUE_REGNUM); } +static void +vax_encode_section_info (tree decl, rtx rtl, int first ATTRIBUTE_UNUSED) +{ + if (!flag_pic) + return; + + if (TARGET_DEBUG_ADDR && TREE_CODE_CLASS (TREE_CODE (decl)) == 'd') { + fprintf (stderr, "Encode %s, public = %d\n", + IDENTIFIER_POINTER (DECL_NAME (decl)), + TREE_PUBLIC (decl)); + } + + if (GET_CODE (rtl) == MEM) { + SYMBOL_REF_FLAG (XEXP (rtl, 0)) = + (TREE_CODE_CLASS (TREE_CODE (decl)) != 'd' || !TREE_PUBLIC (decl)); + } +} + + /* Worker function for NOTICE_UPDATE_CC. */ void diff -Nur some_gcc/gcc-HEAD-20040515/gcc/config.gcc gcc-HEAD-20040515/gcc/config.gcc --- some_gcc/gcc-HEAD-20040515/gcc/config.gcc 2004-05-03 23:27:42.000000000 +0200 +++ gcc-HEAD-20040515/gcc/config.gcc 2004-05-15 18:54:54.000000000 +0200 @@ -2023,6 +2023,11 @@ tm_file="${tm_file} vax/ultrix.h" use_fixproto=yes ;; +vax-*-linux*) # VAXen running Linux + tm_file="${tm_file} elfos.h linux.h vax/elf.h vax/pic.h vax/linux.h" + tmake_file="t-slibgcc-elf-ver t-linux vax/t-linux" + #extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o" + ;; xscale-*-elf) tm_file="arm/xscale-elf.h dbxelf.h elfos.h arm/unknown-elf.h arm/elf.h arm/aout.h arm/arm.h" tmake_file=arm/t-xscale-elf --- gcc-HEAD/gcc/config/vax/vax.c~pre_hack 2004-05-27 14:01:22.000000000 +0200 +++ gcc-HEAD/gcc/config/vax/vax.c 2004-05-27 14:02:09.000000000 +0200 @@ -706,6 +706,8 @@ while (*fmt++ == 'e') { register rtx op = XEXP (x, i++); + if (!op) /* FIXME I think op should NEVER EVER be NULL ... */ + return c + 5; code = GET_CODE (op); /* A NOT is likely to be found as the first operand of an AND |