aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>1998-01-14 19:39:37 +0000
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>1998-01-14 19:39:37 +0000
commit16aedcbd2d5546ceb2e80616ba738a8edd577064 (patch)
tree5399874d74e14de73a5baf61938cc8e81787046d
parentd721838658d4ee24af66c16dd8c42911b7cfd523 (diff)
Import of real gcc-2.8.0 sources.gcc-2_8_0-release
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc3@17354 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog299
-rw-r--r--gcc/INSTALL54
-rw-r--r--gcc/Makefile.in4
-rw-r--r--gcc/NEWS47
-rw-r--r--gcc/SERVICE25
-rw-r--r--gcc/acconfig.h3
-rw-r--r--gcc/cccp.c6
-rw-r--r--gcc/collect2.c29
-rw-r--r--gcc/combine.c16
-rw-r--r--gcc/config.in9
-rw-r--r--gcc/config/alpha/vms.h5
-rw-r--r--gcc/config/arm/arm.c1
-rw-r--r--gcc/config/i386/bsd386.h8
-rw-r--r--gcc/config/i386/i386.h5
-rw-r--r--gcc/config/i386/sco5.h7
-rw-r--r--gcc/config/i386/sol2.h2
-rw-r--r--gcc/config/i386/x-sco53
-rw-r--r--gcc/config/i386/xm-sco5.h6
-rw-r--r--gcc/config/i960/i960.c4
-rw-r--r--gcc/config/m68k/m68k.h6
-rw-r--r--gcc/config/m68k/mot3300-crt0.S27
-rw-r--r--gcc/config/m68k/mot3300.h36
-rw-r--r--gcc/config/m68k/mot3300Mcrt0.S47
-rw-r--r--gcc/config/m68k/xm-mot3300.h4
-rw-r--r--gcc/config/m88k/m88k.c8
-rw-r--r--gcc/config/m88k/xm-sysv3.h6
-rw-r--r--gcc/config/mips/mips.h9
-rw-r--r--gcc/config/mips/mips.md12
-rw-r--r--gcc/config/mips/news4.h6
-rw-r--r--gcc/config/mips/ultrix.h12
-rw-r--r--gcc/config/mips/xm-iris5.h8
-rw-r--r--gcc/config/ptx4.h6
-rw-r--r--gcc/config/rs6000/rs6000.c27
-rw-r--r--gcc/config/rs6000/rs6000.h9
-rw-r--r--gcc/config/rs6000/sysv4.h8
-rw-r--r--gcc/config/rs6000/x-rs60001
-rw-r--r--gcc/config/sh/sh.md2
-rw-r--r--gcc/config/sparc/sol2.h4
-rw-r--r--gcc/config/sparc/sparc.c88
-rw-r--r--gcc/config/sparc/sparc.md25
-rw-r--r--gcc/config/svr4.h12
-rw-r--r--gcc/config/vax/xm-vms.h3
-rwxr-xr-xgcc/configure158
-rw-r--r--gcc/configure.in2
-rw-r--r--gcc/cp/ChangeLog15
-rw-r--r--gcc/cp/Make-lang.in5
-rw-r--r--gcc/cp/method.c8
-rw-r--r--gcc/cppexp.c3
-rw-r--r--gcc/crtstuff.c19
-rw-r--r--gcc/cse.c17
-rw-r--r--gcc/dwarf2out.c11
-rw-r--r--gcc/dwarfout.c12
-rw-r--r--gcc/except.c19
-rw-r--r--gcc/expr.c67
-rw-r--r--gcc/extend.texi228
-rwxr-xr-xgcc/fixincludes57
-rw-r--r--gcc/flags.h2
-rw-r--r--gcc/fold-const.c12
-rw-r--r--gcc/frame.c6
-rw-r--r--gcc/frame.h9
-rw-r--r--gcc/function.c10
-rw-r--r--gcc/gcc.info554
-rw-r--r--gcc/gcc.info-14
-rw-r--r--gcc/gcc.info-10138
-rw-r--r--gcc/gcc.info-114
-rw-r--r--gcc/gcc.info-124
-rw-r--r--gcc/gcc.info-134
-rw-r--r--gcc/gcc.info-144
-rw-r--r--gcc/gcc.info-154
-rw-r--r--gcc/gcc.info-164
-rw-r--r--gcc/gcc.info-174
-rw-r--r--gcc/gcc.info-1813
-rw-r--r--gcc/gcc.info-194
-rw-r--r--gcc/gcc.info-24
-rw-r--r--gcc/gcc.info-204
-rw-r--r--gcc/gcc.info-214
-rw-r--r--gcc/gcc.info-224
-rw-r--r--gcc/gcc.info-234
-rw-r--r--gcc/gcc.info-244
-rw-r--r--gcc/gcc.info-254
-rw-r--r--gcc/gcc.info-264
-rw-r--r--gcc/gcc.info-274
-rw-r--r--gcc/gcc.info-287
-rw-r--r--gcc/gcc.info-34
-rw-r--r--gcc/gcc.info-44
-rw-r--r--gcc/gcc.info-59
-rw-r--r--gcc/gcc.info-644
-rw-r--r--gcc/gcc.info-710
-rw-r--r--gcc/gcc.info-815
-rw-r--r--gcc/gcc.info-94
-rw-r--r--gcc/gcc.texi4
-rw-r--r--gcc/genattrtab.c4
-rw-r--r--gcc/install.texi73
-rw-r--r--gcc/integrate.c15
-rw-r--r--gcc/invoke.texi2
-rw-r--r--gcc/jump.c9
-rw-r--r--gcc/libgcc2.c82
-rw-r--r--gcc/make-cc1.com2
-rw-r--r--gcc/make-cccp.com3
-rw-r--r--gcc/make-gcc.com75
-rw-r--r--gcc/make-l2.com89
-rw-r--r--gcc/md.texi9
-rw-r--r--gcc/objc/Make-lang.in17
-rw-r--r--gcc/objc/init.c2
-rw-r--r--gcc/pexecute.c11
-rw-r--r--gcc/sched.c11
-rw-r--r--gcc/sdbout.c8
-rw-r--r--gcc/stmt.c11
-rw-r--r--gcc/texinfo.tex37
-rw-r--r--gcc/toplev.c10
-rw-r--r--gcc/unroll.c18
111 files changed, 1988 insertions, 937 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2eccf3e2c96..108f95a354f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,7 +1,304 @@
-Fri Dec 5 07:29:26 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+Wed Jan 7 18:02:42 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* Version 2.8.0 released.
+Wed Jan 7 17:54:41 1998 J. Kean Johnston <jkj@sco.com>
+
+ * i386/sco5.h ({END,START}FILE_SPEC): Link with correct crtbegin.o
+ and crtend.o when using -static.
+
+Wed Jan 7 17:49:14 1998 Jan Christiaan van Winkel <Jan.Christiaan.van.Winkel@ATComputing.nl>
+
+ * cppexp.c (gansidecl.h): Include.
+
+Wed Jan 7 17:45:07 1998 Tristan Gingold <gingold@puccini.enst.fr>
+
+ * expr.c (get_push_address): Use copy_to_reg instead of force_operand.
+ (emit_push_insn): Avoid null pointer deference if aggregate has no
+ types.
+ (expand_expr): Avoid finite but useless recursion.
+ (expand_builtin): Fix typo in calling function.
+ * function.c (assign_parms): Avoid useless call to chkr_set_right.
+
+Wed Jan 7 17:31:13 1998 Christian Iseli <Christian.Iseli@lslsun.epfl.ch>
+
+ * combine.c (force_to_mode): Return if operand is a CLOBBER.
+
+Wed Jan 7 17:23:24 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * x-rs6000 (INSTALL): Remove.
+
+ * jump.c (jump_optimize): Don't use a hard reg as an operand
+ of a conditional move if small register classes.
+
+Wed Jan 7 17:09:28 1998 Jim Wilson <wilson@cygnus.com>
+
+ * cse.c (max_insn_uid): New variable.
+ (cse_around_loop): Use it.
+ (cse_main): Set it.
+
+Wed Dec 31 18:40:26 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * stmt.c (expand_asm_operands): Treat ASM with no outputs as volatile.
+
+Wed Dec 31 08:03:45 1997 Paul Eggert <eggert@twinsun.com>
+
+ * toplev.c (flag_verbose_asm): Default to 0, not 1.
+
+ * i386/bsd386.h (ASM_COMMENT_START): Define to " #".
+
+Tue Dec 30 17:38:55 1997 Jim Wilson <wilson@cygnus.com>
+
+ * unroll.c (find_splittable_givs): Handle givs with
+ dest_reg created by loop.
+
+Tue Dec 30 14:21:33 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * svr4.h (LINK_SPEC): Never specify -h.
+ * ptx4.h (LINK_SPEC): Likewise.
+ * rs6000/sysv4.h (LINK_SPEC): Likewise.
+ * sparc/sol2.h (LINK_SPEC): Likewise.
+
+Tue Dec 30 06:15:23 1997 Philippe De Muyter <phdm@macqel.be>
+
+ * libgcc2.c (_eh_compat): Do not include stdlib.h, but provide a
+ private extern declaration for malloc.
+
+Mon Dec 29 06:56:41 1997 Laurent Guerby <guerby@gnat.com>
+
+ * Makefile.in (stmp-int-hdrs): Add "touch".
+
+Sun Dec 28 19:36:05 1997 Stephen L Moshier <moshier@mediaone.net>
+
+ * mips.h (CACHE_FLUSH_FUNC): New, defaults to _flush_cache.
+ (INITIALIZE_TRAMPOLINE): Use it.
+ * mips/ultrix.h (CACHE_FLUSH_FUNC): Define as cacheflush.
+ * mips/news4.h (CACHE_FLUSH_FUNC): Likewise.
+
+Sun Dec 28 08:19:13 1997 Paul Eggert <eggert@twinsun.com>
+
+ * arm.c: Don't include assert.h.
+ * i960.c: Likewise.
+ (i960_arg_size_and_align): Rewrite to avoid assert.
+ * m88k.c: Don't include assert.h.
+ (expand_block_move): Rewrite to avoid assert.
+ * except.c: Don't include assert.h.
+ (scan_region): Rewrite to avoid assert.
+ (save_eh_status, restore_eh_status, scan_region): Don't bother
+ testing whether pointer is null.
+ * dwarfout.c, dwarf2out.c: Do not include assert.h.
+ (assert): New macro, since we can't use system assert.
+
+Sat Dec 27 19:08:17 1997 Stephen L Moshier <moshier@mediaone.net>
+
+ * mips/ultrix.h (DWARF2_UNWIND_INFO): Define as 0.
+
+Fri Dec 26 05:57:06 1997 Philippe De Muyter <phdm@macqel.be>
+
+ * m68k/mot3300.h (FINALIZE_TRAMPOLINE): Macro defined.
+ * libgcc2.c (__clear_insn_cache): New sysV68-specific helper function
+ for trampolines.
+
+Thu Dec 25 15:22:43 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * rs6000.c (function_arg_padding): All aggregates pad upward.
+
+Wed Dec 24 18:05:13 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * sparc.c: Add prototypes for static functions.
+ (check_pic): Check for form of pic_pc_rtx, not it itself.
+ (pic_setup_code): New function, from finalize_pic.
+ (finalize_pic): Call pic_setup_code and insert after nonlocal_receiver.
+ * sparc.md (nonlocal_goto_receiver): New pattern.
+
+Tue Dec 23 05:54:38 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * expr.c (expand_builtin_setjmp): Call builtin_setjmp_receiver.
+ * mips.md (builtin_setjmp_receiver): New pattern.
+
+ * crtstuff.c (__do_global_ctors_aux): Add missing call to
+ FORCE_INIT_SECTION_ALIGN and go back to text section.
+ * i386/sol2.h (FORCE_INIT_SECTION_ALIGN): Remove loop.
+
+ * expr.c (do_store_flag): For shift, get bit count using tree_pow2.
+
+Tue Dec 23 05:21:18 1997 Paul Eggert <eggert@twinsun.com>
+
+ * genattrtab.c (main): Check HAVE_{G,S}ETRLIMIT too.
+
+Mon Dec 22 19:30:59 1997 Michael P. Hayes <michaelh@ongaonga.chch.cri.nz>
+
+ * sdbout.c (plain_type_1): Add missing checks for named types "char"
+ and "int" and check for int by size first.
+
+Mon Dec 22 19:13:58 1997 Manfred Hollstein <manfred@s-direktnet.de>
+
+ * m68k/xm-mot3300.h (ADD_MISSING_{POSIX,XOPEN}): Define.
+ * m88k/xm-sysv3.h: Likewise.
+
+ * configure.in (getrlimit, setrlimit): Call AC_CHECK_FUNCS.
+ * cccp.c (main): Check HAVE_{G,S}ETRLIMIT in addition to RLIMIT_STACK.
+ * toplev.c (main): Likewise.
+
+ * fixincludes (target_canonical): New variable.
+ (size_t): Add support for Motorola's stdlib.h which fails to provide
+ a definition for size_t.
+ (str{len,spn,cspn} return value): Handle different layout on sysV88.
+ (fabs/hypot): Provide a fake for hypot which is broken on
+ m88k-motorola-sysv3; emit a prototype for fabs on m88k-motorola-sysv3.
+
+ * m68k/mot3300.h (ASM_BYTE_OP): Don't include '\t' in definition.
+ (ASM_OUTPUT_ASCII): Prefix ASM_BYTE_OP by one single '\t'.
+
+Mon Dec 22 19:05:49 1997 Richard Henderson <rth@cygnus.com>
+
+ * sparc.md (jump): Don't use the annul bit around an empty loop.
+
+Mon Dec 22 18:52:56 1997 Robert Lipe <robertl@dgii.com>
+
+ * i386/x-sco5 (CLIB) Deleted.
+ (ALLOCA) Added.
+ * i386/xm-sco5.h (USE_C_ALLOCA) Added.
+
+Mon Dec 22 18:42:16 1997 Philippe De Muyter <phdm@macqel.be>
+
+ * m68k/mot3300Mcrt0.S (mcount): Function removed.
+ (__stop_monitor): New function.
+ * m68k/mot3300-crt0.S (__stop_monitor): New (empty) function.
+ (mcount, mcount%, monitor): Common symbols removed.
+ * m68k/mot3300.h (FUNCTION_PROFILER): USE_GAS and !USE_GAS versions
+ fixed and merged.
+ (EXIT_BODY): Always call __stop_monitor without tricky tests.
+
+Mon Dec 22 18:35:05 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * objc/Make-lang.in (runtime-info.h, libobjc_entry.o): Create in
+ build directory.
+ (libobjc.a): Update dependency list.
+ (libobjc.dll): Likewise. Use libobjc_entry.o from build directory.
+ (objc/sendmsg.o): Add -Iobjc to find runtime-info.h.
+ (objc.mostlyclean): Remove runtime-info.h.
+
+Mon Dec 22 18:27:47 1997 Paul Eggert <eggert@twinsun.com>
+
+ * libgcc2.c (_eh_compat): New section.
+ * Makefile.in (LIB2FUNCS): Add _eh_compat.
+
+Mon Dec 22 17:52:37 1997 Marcus G. Daniels <mgd@wijiji.santafe.edu>
+
+ * objc/init.c (_objc_load_callback): Don't initialize.
+
+Sun Dec 21 15:06:00 1997 Paul Eggert <eggert@twinsun.com>
+
+ * mips/xm-iris5.h (HAVE_INTTYPES_H): Force undefined.
+
+Sun Dec 21 14:51:51 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * dwarf2out.c (add_bound_info, case COMPONENT_REF): New case.
+
+Sun Dec 14 06:49:05 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * expr.c (expand_expr, case PLACEHOLDER_EXPR): Use placeholder_list
+ expression in preference to any other if correct type.
+
+ * i386.h (INITIAL_ELIMINATION_OFFSET): Correctly test for PIC
+ register used.
+
+Sat Dec 13 06:11:32 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * frame.h (__register_frame_info_table): Fix typo in declaration.
+
+Fri Dec 12 07:55:18 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * function.c (purge_addressof_1): For (mem (address (mem ...)),
+ when collapsing, preserve mode of outer MEM.
+
+ * frame.c (__register_frame_info): Renamed from __register_frame.
+ (__register_frame_info_table, __deregister_frame_info): Similarly.
+ * frame.h (__{,de}register_frame_info): Likewise.
+ (__register_frame_info_table): New declaration.
+ * crtstuff.c (__do_global_dtors{,_aux}): Rename __deregister_frame.
+ (frame_dummy, __do_global_ctors): Likewise for __register_frame.
+ * collect2.c (write_c_file_{stat,glob}): Rename __register_frame
+ to __register_frame_info and similarly for __deregister_frame and
+ __register_frame_table.
+
+ * sched.c (remove_dependencies): Set RTX_INTEGRATED_P on dependency
+ we delete. Properly update prev for multiple consecutive deletions.
+ (priority): Skip deleted dependence.
+
+ * integrate.c (initialize_for_inline): In DECL_RTL of a PARM_DECL,
+ look inside a (mem (addressof (mem ...))).
+
+Fri Dec 12 05:49:58 1997 Paul Eggert <eggert@twinsun.com>
+
+ * collect2.c (write_c_file_glob):
+ Allocate initial frame object in static storage and pass its address.
+
+Thu Dec 11 18:01:31 1997 Philippe De Muyter <phdm@macqel.be>
+
+ * acconfig.h (NEED_DECLARATION_GETENV): Define slot added.
+
+Thu Dec 11 17:54:23 1997 Paul Eggert <eggert@twinsun.com>
+
+ * crtstuff.c (__do_global_ctors): Fix typo in last change.
+
+Wed Dec 10 18:38:28 1997 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * libgcc2.c (__bb_exit_func): Fix test of return value of fopen.
+
+Wed Dec 10 07:07:37 1997 Bernd Schmidt <crux@starsky.Informatik.RWTH-Aachen.DE>
+ * combine.c (simplify_rtx, case ABS): Don't get confused by a
+ VOIDmode operand.
+
+Tue Dec 9 17:44:14 1997 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * rs6000.h (FUNCTION_ARG_PADDING): Define.
+ * rs6000.c (function_arg_padding): New function.
+
+Tue Dec 9 08:53:56 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * integrate.c (save_for_inline_copying): Make a new reg_parm_stack_loc.
+
+Mon Dec 8 19:23:58 1997 Pat Rankin <rankin@eql.caltech.edu>
+
+ * toplev.c (get_run_time): [#if VMS] Cast arg in times call.
+
+ * vax/xm-vms.h (HAVE_UNISTD_H): Define for DEC C.
+ * make-cccp.com [CC]: Add /Prefix=All for DEC C.
+
+Mon Dec 8 08:09:17 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * stmt.c (expand_decl_cleanup_no_eh): Properly return a value.
+
+ * fold-const.c (fold_convert): Don't flag overflow when converting
+ pointer to integer.
+
+Sun Dec 7 09:42:05 1997 Pat Rankin <rankin@eql.caltech.edu>
+
+ * make-gcc.com (@make-l2): Pass along any command line arguments.
+ * make-l2.com: Add latent support to compile cp/inc/* if `cc1plus'
+ is specified [currently disabled].
+ * make-cc1.com: When building with GNU C, use -O2.
+ * make-cccp.com: Likewise.
+
+Sun Dec 7 06:56:48 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * crtstuff.c (__do_global_ctors): Add missing arg to __register_frame.
+
+ * collect2.c (write_c_file_stat): Fix error in last change;
+ use __SIZE_TYPE__, not size_t.
+
+Sun Dec 7 05:50:43 1997 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c (strings.h): Fix misspelling of `include' introduced
+ in last change to this file.
+
+Sat Dec 6 18:54:11 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * alpha/vms.h (CPP_PREDEFINES): Remove redundant setting
+ of GCC version and unneeded setting of __VMS_VER.
+
Fri Dec 5 07:24:36 1997 Richard Stallman <rms@gnu.org>
* sparc/linux64.h (TARGET_VERSION): Write "GNU/Linux".
diff --git a/gcc/INSTALL b/gcc/INSTALL
index 7dfb73d9e73..edbdef6496f 100644
--- a/gcc/INSTALL
+++ b/gcc/INSTALL
@@ -161,7 +161,7 @@ and includes all the necessary compilation tools and libraries.
`--nfp' currently has no effect, though perhaps there are
other systems where it could usefully make a difference.
- `--enable-objcthreads=TYPE'
+ `--enable-threads=TYPE'
Certain systems, notably Linux-based GNU systems, can't be
relied on to supply a threads facility for the Objective C
runtime and so will default to single-threaded runtime. They
@@ -449,11 +449,39 @@ and includes all the necessary compilation tools and libraries.
some other compiler.)
16. If you're going to use C++, it's likely that you need to also
- install the libg++ distribution. It should be available from the
- same place where you got the GNU C distribution. Just as GNU C
- does not distribute a C runtime library, it also does not include
- a C++ run-time library. All I/O functionality, special class
- libraries, etc., are available in the libg++ distribution.
+ install a C++ runtime library. Just as GNU C does not distribute
+ a C runtime library, it also does not include a C++ runtime
+ library. All I/O functionality, special class libraries, etc., are
+ provided by the C++ runtime library.
+
+ Here's one way to build and install a C++ runtime library for GNU
+ CC:
+
+ * Build and install GNU CC, so that invoking `gcc' obtains the
+ GNU CC that was just built.
+
+ * Obtain a copy of a compatible `libstdc++' distribution. For
+ example, the `libstdc++-2.8.0.tar.gz' distribution should be
+ compatible with GCC 2.8.0. GCC distributors normally
+ distribute `libstdc++' as well.
+
+ * Set the `CXX' environment variable to `gcc' while running the
+ `libstdc++' distribution's `configure' command. Use the same
+ `configure' options that you used when you invoked GCC's
+ `configure' command.
+
+ * Invoke `make' to build the C++ runtime.
+
+ * Invoke `make install' to install the C++ runtime.
+
+ To summarize, after building and installing GNU CC, invoke the
+ following shell commands in the topmost directory of the C++
+ library distribution. For CONFIGURE-OPTIONS, use the same options
+ that you used to configure GNU CC.
+
+ $ CXX=gcc ./configure CONFIGURE-OPTIONS
+ $ make
+ $ make install
17. GNU CC includes a runtime library for Objective-C because it is an
integral part of the language. You can find the files associated
@@ -684,7 +712,11 @@ special things you must know:
you must specify the version number during configuration. Note
that the assembler shipped with RISC iX does not support stabs
debugging information; a new version of the assembler, with stabs
- support included, is now available from Acorn.
+ support included, is now available from Acorn and via ftp
+ `ftp.acorn.com:/pub/riscix/as+xterm.tar.Z'. To enable stabs
+ debugging, pass `--with-gnu-as' to configure.
+
+ You will need to install GNU `sed' before you can run configure.
`a29k'
AMD Am29k-family processors. These are normally used in embedded
@@ -1779,8 +1811,8 @@ perform the following steps:
disk:[gcc.gxx_include.] gnu_gxx_include
with the appropriate disk and directory name. If you are going to
- be using libg++, this is where the libg++ install procedure will
- install the libg++ header files.
+ be using a C++ runtime library, this is where its install
+ procedure will install its header files.
2. Obtain the file `gcc-cc1plus.exe', and place this in the same
directory that `gcc-cc1.exe' is kept.
@@ -2013,8 +2045,8 @@ before GNU CC is built. If the cross compilation header files are
already suitable for ANSI C and GNU CC, nothing special need be done).
`GPLUS_INCLUDE_DIR' means the same thing for native and cross. It
-is where `g++' looks first for header files. `libg++' installs only
-target independent header files in that directory.
+is where `g++' looks first for header files. The C++ library installs
+only target independent header files in that directory.
`LOCAL_INCLUDE_DIR' is used only for a native compiler. It is
normally `/usr/local/include'. GNU CC searches this directory so that
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index b91a308ee67..cd34a029556 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -623,7 +623,7 @@ LIB2FUNCS = _muldi3 _divdi3 _moddi3 _udivdi3 _umoddi3 _negdi2 \
_fixtfdi _fixunstfdi _floatditf \
__gcc_bcmp _varargs __dummy _eprintf _op_new _op_vnew _new_handler \
_op_delete _op_vdel _bb _shtab _clear_cache _trampoline __main _exit \
- _ctors _eh _pure
+ _ctors _eh _eh_compat _pure
# The files that "belong" in CONFIG_H are deliberately omitted
# because having them there would not be useful in actual practice.
@@ -1866,9 +1866,11 @@ stmp-int-hdrs: stmp-fixinc $(USER_H) xlimits.h
# The sed command gets just the last file name component;
# this is necessary because VPATH could add a dirname.
# Using basename would be simpler, but some systems don't have it.
+# The touch command is here to workaround an AIX/Linux NFS bug.
for file in .. $(USER_H); do \
if [ X$$file != X.. ]; then \
realfile=`echo $$file | sed -e 's|.*/\([^/]*\)$$|\1|'`; \
+ touch include/$$realfile; \
rm -f include/$$realfile; \
cp $$file include; \
chmod a+r include/$$realfile; \
diff --git a/gcc/NEWS b/gcc/NEWS
index 93dfa8eb012..dd0b422cc76 100644
--- a/gcc/NEWS
+++ b/gcc/NEWS
@@ -7,6 +7,28 @@ optimization improvements have been made. These increase the
maintainability and portability of GCC. GCC now uses autoconf to
compute many host parameters.
+A new project, egcs (pronounced ``eggs''), is maintaining an
+experimental version of the GNU C compiler. The egcs compiler
+contains features that are candidates for inclusion in future versions
+of GCC. The standard GCC distribution is intended to contain a mature
+compiler that is stable and reliable; egcs aims at making experimental
+changes available to interested users at an earlier stage in their
+development process than would be appropriate for a production
+compiler. Please see <http://www.cygnus.com/egcs/> for more
+information about egcs. A major motivation for the egcs project was
+the long release cycle for GCC 2.8.0. This was due to changes for
+exception handling that took a long time to complete. In the future,
+changes of this nature can be developed in the egcs framework and not
+interfere with the frequent releases of the standard GCC distribution.
+
+Due to a bug fix related to exception handling, if you have previously
+built a sharable library with some recent unofficial versions of GCC
+on some systems and then rebuild the library with GCC 2.8.0, programs
+previously linked with that library may fail during initialization
+with a message about an undefined symbols __register_frame. If that
+happens, you must either relink the application or rebuild the
+sharable library with "-Wl,-u,__register_frame" on the command line.
+
The following lists changes that add new features or targets.
See cp/NEWS for new features of C++ in this release.
@@ -45,7 +67,8 @@ New features in configuration, installation and specs file handling:
New option --enable-c-cpplib to configure script.
- Allow --with-cpu on configure command to specify a default CPU.
+ You can use --with-cpu on the configure command to specify the default
+ CPU that GCC should generate code for.
The -specs=file switch allows you to override default specs used in
invoking programs like cc1, as, etc.
@@ -213,28 +236,6 @@ New feature for Solaris systems:
GCC installation no longer makes a copy of system include files,
thus insulating GCC better from updates to the operating system.
-Changes in Objective-C:
-
- The Objective-C Runtime Library has been made thread-safe.
-
- The Objective-C Runtime Library contains an interface for creating
- mutexes, condition mutexes, and threads; it requires a back-end
- implementation for the specific platform and/or thread package.
- Currently supported are DEC/OSF1, IRIX, Mach, OS/2, POSIX, PCThreads,
- Solaris, and Windows32. The --enable-threads parameter can be used
- when configuring GCC to enable and select a thread back-end.
-
- Objective-C is now configured as separate front-end language to GCC,
- making it more convenient to conditionally build it.
-
- The internal structures of the Objective-C Runtime Library have
- changed sufficiently to warrant a new version number; now version 8.
- Programs compiled with an older version must be recompiled.
-
- The Objective-C Runtime Library can be built as a DLL on Windows 95
- and Windows NT systems.
-
- The Objective-C Runtime Library implements +load.
Noteworthy changes in GCC version 2.7.2
---------------------------------------
diff --git a/gcc/SERVICE b/gcc/SERVICE
index 680f2a2628f..46441675fd0 100644
--- a/gcc/SERVICE
+++ b/gcc/SERVICE
@@ -672,24 +672,31 @@ Bradley M. Kuhn
<bkuhn@acm.org>
http://www.ebb.org/bkuhn
-I am available for primarily Unix system administration consulting, including
-but not limited to installation, configuration and integration of GNU tools
-and other copy-lefted software such as GNU/Linux.
+I am available for Unix system administration consulting, including but not
+limited to installation, configuration and integration of GNU tools and other
+copy-lefted software such as GNU/Linux and the various distributions of
+GNU/Linux.
I am particularly skilled at integration of GNU and other copy-lefted software
into new environments that have not used such tools in the past, and porting
the GNU software to new Unix-based platforms.
-Please visit my homepage for more information on my background and skills.
+Please visit my homepage for more information on my background and skills. My
+resume is also available there.
I am available for both 1099 (preferred) and W2 on-site contracting in the
-Cincinnati, OH metropolitan area, as well as remote consulting via dialup or
-Internet connection anywhere in the US.
+Cincinnati, OH, USA metropolitan area, as well as remote consulting via dialup
+or Internet connection anywhere in the USA. I have no interest in permanent
+relocation at this time.
-My rate is in the $40/hour range, depending on the circumstances. Rates for
-non-profit organizations are substantially lower, and possibly free.
+My rate varies greatly between $25-$40/hour, depending on the circumstances.
+Rates for non-profit organizations are substantially lower, and possibly free.
-Updated: 1997-08-03
+Please note that I have no interest in working with any Micro$oft related
+products! I want the primary focus of my work to be contributing
+to the free software community.
+
+Updated: 1997-12-04

Fen Labalme <fen@comedia.com>
CoMedia Consulting http//www.comedia.com/comedia/
diff --git a/gcc/acconfig.h b/gcc/acconfig.h
index 2b6c1442c97..41c0cf8b1d6 100644
--- a/gcc/acconfig.h
+++ b/gcc/acconfig.h
@@ -18,4 +18,7 @@
/* Whether rindex must be declared even if <stdlib.h> is included. */
#undef NEED_DECLARATION_RINDEX
+
+/* Whether getenv must be declared even if <stdlib.h> is included. */
+#undef NEED_DECLARATION_GETENV
@TOP@
diff --git a/gcc/cccp.c b/gcc/cccp.c
index 776597394f9..368298b90cb 100644
--- a/gcc/cccp.c
+++ b/gcc/cccp.c
@@ -62,7 +62,7 @@ Boston, MA 02111-1307, USA. */
# include <string.h>
#else
# ifdef HAVE_STRINGS_H
-# inclued <strings.h>
+# include <strings.h>
#endif
#endif
@@ -1230,7 +1230,7 @@ main (argc, argv)
/* Target-name to write with the dependency information. */
char *deps_target = 0;
-#ifdef RLIMIT_STACK
+#if defined (RLIMIT_STACK) && defined (HAVE_GETRLIMIT) && defined (HAVE_SETRLIMIT)
/* Get rid of any avoidable limit on stack size. */
{
struct rlimit rlim;
@@ -1241,7 +1241,7 @@ main (argc, argv)
rlim.rlim_cur = rlim.rlim_max;
setrlimit (RLIMIT_STACK, &rlim);
}
-#endif /* RLIMIT_STACK defined */
+#endif
#ifdef SIGPIPE
signal (SIGPIPE, pipe_closed);
diff --git a/gcc/collect2.c b/gcc/collect2.c
index aa17ecf6016..7730eccf52e 100644
--- a/gcc/collect2.c
+++ b/gcc/collect2.c
@@ -1783,20 +1783,20 @@ write_c_file_stat (stream, name)
fprintf (stream, " void *pc_end;\n");
fprintf (stream, " void *fde_begin;\n");
fprintf (stream, " void *fde_array;\n");
- fprintf (stream, " size_t count;\n");
+ fprintf (stream, " __SIZE_TYPE__ count;\n");
fprintf (stream, " struct object *next;\n");
fprintf (stream, "};\n");
- fprintf (stream, "extern void __register_frame_table (void *, struct object *);\n");
- fprintf (stream, "extern void __deregister_frame (void *);\n");
+ fprintf (stream, "extern void __register_frame_info_table (void *, struct object *);\n");
+ fprintf (stream, "extern void __deregister_frame_info (void *);\n");
fprintf (stream, "static void reg_frame () {\n");
fprintf (stream, "\tstatic struct object ob;\n");
- fprintf (stream, "\t__register_frame_table (frame_table, &ob);\n");
+ fprintf (stream, "\t__register_frame_info_table (frame_table, &ob);\n");
fprintf (stream, "\t}\n");
fprintf (stream, "static void dereg_frame () {\n");
- fprintf (stream, "\t__deregister_frame (frame_table);\n");
+ fprintf (stream, "\t__deregister_frame_info (frame_table);\n");
fprintf (stream, "\t}\n");
}
@@ -1863,15 +1863,26 @@ write_c_file_glob (stream, name)
write_list (stream, "\t\t&", frame_tables.first);
fprintf (stream, "\t0\n};\n");
- fprintf (stream, "extern void __register_frame_table (void *);\n");
- fprintf (stream, "extern void __deregister_frame (void *);\n");
+ /* This must match what's in frame.h. */
+ fprintf (stream, "struct object {\n");
+ fprintf (stream, " void *pc_begin;\n");
+ fprintf (stream, " void *pc_end;\n");
+ fprintf (stream, " void *fde_begin;\n");
+ fprintf (stream, " void *fde_array;\n");
+ fprintf (stream, " __SIZE_TYPE__ count;\n");
+ fprintf (stream, " struct object *next;\n");
+ fprintf (stream, "};\n");
+
+ fprintf (stream, "extern void __register_frame_info_table (void *, struct object *);\n");
+ fprintf (stream, "extern void __deregister_frame_info (void *);\n");
fprintf (stream, "static void reg_frame () {\n");
- fprintf (stream, "\t__register_frame_table (frame_table);\n");
+ fprintf (stream, "\tstatic struct object ob;\n");
+ fprintf (stream, "\t__register_frame_info_table (frame_table, &ob);\n");
fprintf (stream, "\t}\n");
fprintf (stream, "static void dereg_frame () {\n");
- fprintf (stream, "\t__deregister_frame (frame_table);\n");
+ fprintf (stream, "\t__deregister_frame_info (frame_table);\n");
fprintf (stream, "\t}\n");
}
diff --git a/gcc/combine.c b/gcc/combine.c
index ff50cb5e714..0888113cf6a 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -1,5 +1,5 @@
/* Optimize by combining instructions for GNU compiler.
- Copyright (C) 1987, 88, 92-96, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1987, 88, 92-97, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -4080,11 +4080,16 @@ simplify_rtx (x, op0_mode, last, in_dest)
case XOR:
return simplify_logical (x, last);
- case ABS:
+ case ABS:
/* (abs (neg <foo>)) -> (abs <foo>) */
if (GET_CODE (XEXP (x, 0)) == NEG)
SUBST (XEXP (x, 0), XEXP (XEXP (x, 0), 0));
+ /* If the mode of the operand is VOIDmode (i.e. if it is ASM_OPERANDS),
+ do nothing. */
+ if (GET_MODE (XEXP (x, 0)) == VOIDmode)
+ break;
+
/* If operand is something known to be positive, ignore the ABS. */
if (GET_CODE (XEXP (x, 0)) == FFS || GET_CODE (XEXP (x, 0)) == ABS
|| ((GET_MODE_BITSIZE (GET_MODE (XEXP (x, 0)))
@@ -6047,8 +6052,11 @@ force_to_mode (x, mode, mask, reg, just_select)
/* If this is a CALL or ASM_OPERANDS, don't do anything. Some of the
code below will do the wrong thing since the mode of such an
- expression is VOIDmode. */
- if (code == CALL || code == ASM_OPERANDS)
+ expression is VOIDmode.
+
+ Also do nothing if X is a CLOBBER; this can happen if X was
+ the return value from a call to gen_lowpart_for_combine. */
+ if (code == CALL || code == ASM_OPERANDS || code == CLOBBER)
return x;
/* We want to perform the operation is its present mode unless we know
diff --git a/gcc/config.in b/gcc/config.in
index 25bbe566ed8..a99b05fc19c 100644
--- a/gcc/config.in
+++ b/gcc/config.in
@@ -20,6 +20,9 @@
/* Whether rindex must be declared even if <stdlib.h> is included. */
#undef NEED_DECLARATION_RINDEX
+/* Whether getenv must be declared even if <stdlib.h> is included. */
+#undef NEED_DECLARATION_GETENV
+
/* Define if you have the ANSI C header files. */
#undef STDC_HEADERS
@@ -38,6 +41,9 @@
/* Define if you have the bzero function. */
#undef HAVE_BZERO
+/* Define if you have the getrlimit function. */
+#undef HAVE_GETRLIMIT
+
/* Define if you have the index function. */
#undef HAVE_INDEX
@@ -53,6 +59,9 @@
/* Define if you have the rindex function. */
#undef HAVE_RINDEX
+/* Define if you have the setrlimit function. */
+#undef HAVE_SETRLIMIT
+
/* Define if you have the strerror function. */
#undef HAVE_STRERROR
diff --git a/gcc/config/alpha/vms.h b/gcc/config/alpha/vms.h
index 01663e342b9..8e4fd6dc858 100644
--- a/gcc/config/alpha/vms.h
+++ b/gcc/config/alpha/vms.h
@@ -29,13 +29,10 @@ Boston, MA 02111-1307, USA. */
#include "alpha/alpha.h"
-/* Predefine this in CPP because VMS limits the size of command options
- and GNU CPP is not used on VMS except with GNU C. */
#undef CPP_PREDEFINES
#define CPP_PREDEFINES \
"-Dalpha -D__ALPHA -Dvms -DVMS -D__alpha__ -D__alpha -D__vms__ -D__VMS__\
- -D__VMS_VER=70000022 \
- -D__GNUC__=2 -D__GNUC_MINOR__=7 -Asystem(vms) -Acpu(alpha) -Amachine(alpha)"
+ -Asystem(vms) -Acpu(alpha) -Amachine(alpha)"
#undef CPP_SPEC
#define CPP_SPEC "\
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index b73da5b1f37..5e12e8d30f6 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -24,7 +24,6 @@ Boston, MA 02111-1307, USA. */
#include "config.h"
#include <stdio.h>
#include <string.h>
-#include "assert.h"
#include "rtl.h"
#include "regs.h"
#include "hard-reg-set.h"
diff --git a/gcc/config/i386/bsd386.h b/gcc/config/i386/bsd386.h
index 935a2e06404..d64fe59e2ac 100644
--- a/gcc/config/i386/bsd386.h
+++ b/gcc/config/i386/bsd386.h
@@ -1,5 +1,5 @@
-/* Configuration for an i386 running BSDI's BSD/386 1.1 as the target
- machine. */
+/* Configuration for an i386 running BSDI's BSD/OS (formerly known as BSD/386)
+ as the target machine. */
#include "i386/386bsd.h"
@@ -16,3 +16,7 @@
#undef WCHAR_TYPE_SIZE
#define WCHAR_TYPE_SIZE 32
+
+/* This is suitable for BSD/OS 3.0; we don't know about earlier releases. */
+#undef ASM_COMMENT_START
+#define ASM_COMMENT_START " #"
diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
index 9bfef4e98b2..6fb08a120d2 100644
--- a/gcc/config/i386/i386.h
+++ b/gcc/config/i386/i386.h
@@ -1524,8 +1524,9 @@ do { \
\
for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) \
if ((regs_ever_live[regno] && ! call_used_regs[regno]) \
- || (current_function_uses_pic_offset_table \
- && regno == PIC_OFFSET_TABLE_REGNUM)) \
+ || ((current_function_uses_pic_offset_table \
+ || current_function_uses_const_pool) \
+ && flag_pic && regno == PIC_OFFSET_TABLE_REGNUM)) \
offset += 4; \
\
(OFFSET) = offset + get_frame_size (); \
diff --git a/gcc/config/i386/sco5.h b/gcc/config/i386/sco5.h
index 6474faeff10..5306000e2a0 100644
--- a/gcc/config/i386/sco5.h
+++ b/gcc/config/i386/sco5.h
@@ -1,5 +1,5 @@
/* Definitions for Intel 386 running SCO Unix System V 3.2 Version 5.
- Copyright (C) 1992, 1995, 1996, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1992, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
Contributed by Kean Johnston (hug@netcom.com)
This file is part of GNU CC.
@@ -828,12 +828,11 @@ dtors_section () \
%{!Xc:%{Xk:values-Xk.o%s} \
%{!Xk:%{Xt:values-Xt.o%s} \
%{!Xt:values-Xa.o%s}}}}}} \
- %{mcoff:crtbeginS.o%s} \
- %{!mcoff:%{!static:crtbegin.o%s}%{static:crtbeginS.o%s}}"
+ %{mcoff:crtbeginS.o%s} %{!mcoff:crtbegin.o%s}"
#undef ENDFILE_SPEC
#define ENDFILE_SPEC \
- "%{!mcoff:%{!static:crtend.o%s}%{static:crtendS.o%s}} \
+ "%{!mcoff:crtend.o%s} \
%{mcoff:crtendS.o%s} \
%{pg:gcrtn.o%s}%{!pg:crtn.o%s}"
diff --git a/gcc/config/i386/sol2.h b/gcc/config/i386/sol2.h
index ccf4a949307..64172359c4e 100644
--- a/gcc/config/i386/sol2.h
+++ b/gcc/config/i386/sol2.h
@@ -30,7 +30,7 @@ Boston, MA 02111-1307, USA. */
executed. This macro forces the assembler to do the padding, since
it knows what it is doing. */
-#define FORCE_INIT_SECTION_ALIGN do { asm (ALIGN_ASM_OP ## " 16"); } while (0)
+#define FORCE_INIT_SECTION_ALIGN asm (ALIGN_ASM_OP ## " 16")
#define FORCE_FINI_SECTION_ALIGN FORCE_INIT_SECTION_ALIGN
/* Add "sun" to the list of symbols defined for SVR4. */
diff --git a/gcc/config/i386/x-sco5 b/gcc/config/i386/x-sco5
index ada44eda382..276d74045ed 100644
--- a/gcc/config/i386/x-sco5
+++ b/gcc/config/i386/x-sco5
@@ -3,7 +3,8 @@ RANLIB_TEST = false
CC = cc
OLDCC = cc
CCLIBFLAGS =
-CLIB = -lPW
+# We avoid the ALLOCA in -lPW becuase it gives us an evil index()
+ALLOCA = alloca.o
# See all the declarations.
FIXPROTO_DEFINES = -D_XOPEN_SOURCE -D_POSIX_C_SOURCE=2
diff --git a/gcc/config/i386/xm-sco5.h b/gcc/config/i386/xm-sco5.h
index 78c66a87bc5..99bc53c2bc5 100644
--- a/gcc/config/i386/xm-sco5.h
+++ b/gcc/config/i386/xm-sco5.h
@@ -10,3 +10,9 @@
#define sys_siglist _sys_siglist
#undef SYS_SIGLIST_DECLARED
#define SYS_SIGLIST_DECLARED
+
+/* If not compiled with GNU C, use the portable alloca. */
+#ifndef __GNUC__
+#define USE_C_ALLOCA
+#endif
+
diff --git a/gcc/config/i960/i960.c b/gcc/config/i960/i960.c
index 6adb2c30d6f..6e86645fe61 100644
--- a/gcc/config/i960/i960.c
+++ b/gcc/config/i960/i960.c
@@ -35,7 +35,6 @@ Boston, MA 02111-1307, USA. */
#include "flags.h"
#include "tree.h"
#include "insn-codes.h"
-#include "assert.h"
#include "expr.h"
#include "except.h"
#include "function.h"
@@ -2241,7 +2240,8 @@ i960_arg_size_and_align (mode, type, size_out, align_out)
else if (mode == VOIDmode)
{
/* End of parm list. */
- assert (type != 0 && TYPE_MODE (type) == VOIDmode);
+ if (type == 0 || TYPE_MODE (type) != VOIDmode)
+ abort ();
size = 1;
}
else
diff --git a/gcc/config/m68k/m68k.h b/gcc/config/m68k/m68k.h
index 486ca781408..654f24c7b57 100644
--- a/gcc/config/m68k/m68k.h
+++ b/gcc/config/m68k/m68k.h
@@ -1223,7 +1223,11 @@ while(0)
/* Emit RTL insns to initialize the variable parts of a trampoline.
FNADDR is an RTX for the address of the function's pure code.
- CXT is an RTX for the static chain value for the function. */
+ CXT is an RTX for the static chain value for the function.
+
+ We generate a two-instructions program at address TRAMP :
+ movea.l &CXT,%a0
+ jmp FNADDR */
#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \
{ \
diff --git a/gcc/config/m68k/mot3300-crt0.S b/gcc/config/m68k/mot3300-crt0.S
index e9fc1d463b5..3c1648fe053 100644
--- a/gcc/config/m68k/mot3300-crt0.S
+++ b/gcc/config/m68k/mot3300-crt0.S
@@ -26,7 +26,7 @@ Boston, MA 02111-1307, USA. */
# define FILE(n) file n
# define GLOBAL_SYM(s) global s
# define LOCAL_LABEL(l) L%##l
-# define SECTION(n) section n
+# define IDENT(s) ident s
# define TEXT text
#else /* Assume we are using GNU as. */
# define COMM .comm
@@ -35,8 +35,7 @@ Boston, MA 02111-1307, USA. */
# define FILE(name) .file name
# define GLOBAL_SYM(s) .globl s
# define LOCAL_LABEL(l) .L.##l
-# define SECTION(n) .section n
-# define STRING(s) .asciz s
+# define IDENT(s) .section .comment;.asciz s
# define TEXT .text
#endif
@@ -86,24 +85,14 @@ LOCAL_LABEL(isatty):
trap &0
nop
+ GLOBAL_SYM (__stop_monitor)
+__stop_monitor:
+ rts
EVEN
COMM splimit%,4
COMM environ,4
- COMM mcount,4
- COMM mcount%,4
- COMM monitor,4
-
-#ifdef STRING
- SECTION (.comment)
- STRING ("$Id: mot3300-crt0.S,v 1.1 1997/08/11 15:57:32 law Exp $\n")
- STRING ("Contributed by manfred@lts.sel.alcatel.de (Manfred Hollstein, Germany)\n")
-#else
- byte 'C,'o,'n,'t,'r,'i,'b,'u,'t,'e,'d,' ,'b,'y
- byte ' ,'m,'a,'n,'f,'r,'e,'d,'@,'l,'t,'s,'.,'s
- byte 'e,'l,'.,'a,'l,'c,'a,'t,'e,'l,'.,'d,'e,'
- byte '(,'M,'a,'n,'f,'r,'e,'d,' ,'H,'o,'l,'l,'s
- byte 't,'e,'i,'n,',,' ,'G,'e,'r,'m,'a,'n,'y,')
- byte 10,0
-#endif
+ IDENT ("$Id: mot3300-crt0.S,v 1.2 1997/12/22 23:41:12 kenner Exp $")
+ IDENT ("Contributed by Manfred Hollstein (manfred@lts.sel.alcatel.de)")
+ IDENT ("Corrections by Philippe De Muyter (phdm@macqel.be)")
diff --git a/gcc/config/m68k/mot3300.h b/gcc/config/m68k/mot3300.h
index f7d35847b26..65c2f476043 100644
--- a/gcc/config/m68k/mot3300.h
+++ b/gcc/config/m68k/mot3300.h
@@ -147,13 +147,8 @@ Boston, MA 02111-1307, USA. */
asm_fprintf (FILE, "\tmov.l %Ra0,%Rd0\n"); }
#undef FUNCTION_PROFILER
-#ifndef USE_GAS
-#define FUNCTION_PROFILER(FILE, LABEL_NO) \
- asm_fprintf (FILE, "\tmov.l %ILP%%%d,%Ra0\n\tjsr mcount%%\n", (LABEL_NO))
-#else /* USE_GAS */
#define FUNCTION_PROFILER(FILE, LABEL_NO) \
- asm_fprintf (FILE, "\tmov.l %I%.LP%d,%Ra0\n\tjsr mcount%%\n", (LABEL_NO))
-#endif /* USE_GAS */
+ asm_fprintf (FILE, "\tmov.l %I%LLP%d,%Ra0\n\tjsr mcount%%\n", (LABEL_NO))
/* This is how to output an insn to push a register on the stack.
It need not be very fast code. */
@@ -356,7 +351,7 @@ dtors_section () \
#undef ASM_BYTE
#define ASM_BYTE ".byte"
#undef ASM_BYTE_OP
-#define ASM_BYTE_OP "\t.byte"
+#define ASM_BYTE_OP ".byte"
#else
#undef ASM_LONG
#define ASM_LONG "long"
@@ -367,7 +362,7 @@ dtors_section () \
#undef ASM_BYTE
#define ASM_BYTE "byte"
#undef ASM_BYTE_OP
-#define ASM_BYTE_OP "\tbyte"
+#define ASM_BYTE_OP "byte"
#endif /* USE_GAS */
/* The sysV68 as doesn't know about double's and float's. */
@@ -476,7 +471,7 @@ do { long l; \
#undef ASM_OUTPUT_ASCII
#define ASM_OUTPUT_ASCII(FILE,PTR,LEN) \
do { register int sp = 0, lp = 0; \
- fprintf ((FILE), "%s\t", ASM_BYTE_OP); \
+ fprintf ((FILE), "\t%s\t", ASM_BYTE_OP); \
loop: \
if ((PTR)[sp] > ' ' && ! ((PTR)[sp] & 0x80) && (PTR)[sp] != '\\') \
{ lp += 3; \
@@ -797,20 +792,25 @@ do {(CUM).offset = 0;\
#define MATH_LIBRARY "-lm881"
#endif
-/* Currently we do not have the atexit() function;
- * so take that from libgcc2.c
- */
+/* Currently we do not have the atexit() function,
+ so take that from libgcc2.c */
#define NEED_ATEXIT 1
#define HAVE_ATEXIT 1
#define EXIT_BODY \
do \
- { extern void monitor (); \
- extern long mcount asm ("mcount%"); \
- extern long etext; \
- \
- if (&mcount < &etext) \
- monitor (0); \
+ { \
+ __stop_monitor (); \
_cleanup (); \
} while (0)
+
+/* FINALIZE_TRAMPOLINE clears the instruction cache. */
+
+#undef FINALIZE_TRAMPOLINE
+#define FINALIZE_TRAMPOLINE(TRAMP) \
+ if (!TARGET_68040) \
+ ; \
+ else \
+ emit_library_call (gen_rtx (SYMBOL_REF, Pmode, "__clear_insn_cache"), \
+ 0, VOIDmode, 0)
diff --git a/gcc/config/m68k/mot3300Mcrt0.S b/gcc/config/m68k/mot3300Mcrt0.S
index acb317c92fe..3ef6611630c 100644
--- a/gcc/config/m68k/mot3300Mcrt0.S
+++ b/gcc/config/m68k/mot3300Mcrt0.S
@@ -1,5 +1,5 @@
/* The start module mcrt0.s for the SysV68 Motorola 3300 Delta Series.
- Copyright (C) 1996 Free Software Foundation, Inc.
+ Copyright (C) 1996, 1997 Free Software Foundation, Inc.
Contributed by Manfred Hollstein (manfred@lts.sel.alcatel.de).
This file is part of GNU CC.
@@ -26,7 +26,7 @@ Boston, MA 02111-1307, USA. */
# define FILE(n) file n
# define GLOBAL_SYM(s) global s
# define LOCAL_LABEL(l) L%##l
-# define SECTION(n) section n
+# define IDENT(s) ident s
# define TEXT text
#else /* Assume we are using GNU as. */
# define COMM .comm
@@ -35,8 +35,7 @@ Boston, MA 02111-1307, USA. */
# define FILE(name) .file name
# define GLOBAL_SYM(s) .globl s
# define LOCAL_LABEL(l) .L.##l
-# define SECTION(n) .section n
-# define STRING(s) .asciz s
+# define IDENT(s) .section .comment;.asciz s
# define TEXT .text
#endif
@@ -110,30 +109,27 @@ LOCAL_LABEL(isatty):
jsr exit
_exit: moveq &1,%d0
trap &0
-
- GLOBAL_SYM (mcount)
- EVEN
-mcount: bra mcount%
+ GLOBAL_SYM (__stop_monitor)
+__stop_monitor:
+ clr.l -(%sp)
+ jsr monitor
+ add.w &4,%sp
+ rts
LOCAL_LABEL(errtxt):
-#ifdef STRING
- STRING ("No space for monitor buffer\n")
-#else
byte 'N,'o,' ,'s,'p,'a,'c,'e,' ,'f,'o,'r,' ,'m,'o,'n
- byte 'i,'t,'o,'r,' ,'b,'u,'f,'f,'e,'r,'\n,0
-#endif
+ byte 'i,'t,'o,'r,' ,'b,'u,'f,'f,'e,'r,'\n
+LOCAL_LABEL(errtxt_end):
EVEN
LOCAL_LABEL(3):
- mov.l &28,-(%sp)
- mov.l &LOCAL_LABEL(errtxt),-(%sp)
- moveq &2,%d0
- mov.l %d0,-(%sp)
+ pea LOCAL_LABEL(errtxt_end)-LOCAL_LABEL(errtxt)
+ pea LOCAL_LABEL(errtxt)(%pc)
+ pea 2
jsr write
bra.b _exit
LOCAL_LABEL(endofstart):
- nop
EVEN
@@ -141,15 +137,6 @@ LOCAL_LABEL(endofstart):
COMM environ,4
COMM _countbase,4
-#ifdef STRING
- SECTION (.comment)
- STRING ("$Id: mot3300Mcrt0.S,v 1.1 1997/08/11 15:57:32 law Exp $\n")
- STRING ("Contributed by manfred@lts.sel.alcatel.de (Manfred Hollstein, Germany)\n")
-#else
- byte 'C,'o,'n,'t,'r,'i,'b,'u,'t,'e,'d,' ,'b,'y
- byte ' ,'m,'a,'n,'f,'r,'e,'d,'@,'l,'t,'s,'.,'s
- byte 'e,'l,'.,'a,'l,'c,'a,'t,'e,'l,'.,'d,'e,'
- byte '(,'M,'a,'n,'f,'r,'e,'d,' ,'H,'o,'l,'l,'s
- byte 't,'e,'i,'n,',,' ,'G,'e,'r,'m,'a,'n,'y,')
- byte 10,0
-#endif
+ IDENT ("$Id: mot3300Mcrt0.S,v 1.2 1997/12/22 23:39:48 kenner Exp $")
+ IDENT ("Contributed by Manfred Hollstein (manfred@lts.sel.alcatel.de)")
+ IDENT ("Corrections by Philippe De Muyter (phdm@macqel.be)")
diff --git a/gcc/config/m68k/xm-mot3300.h b/gcc/config/m68k/xm-mot3300.h
index 8f4c0a46bf9..c61bd293e25 100644
--- a/gcc/config/m68k/xm-mot3300.h
+++ b/gcc/config/m68k/xm-mot3300.h
@@ -40,3 +40,7 @@ extern char *alloca ();
#define __PTR_TO_INT(P) ((int)(P))
#define __INT_TO_PTR(P) ((char *)(P))
+
+/* We need POSIX/XOPEN symbols; otherwise make check will fail. */
+#define ADD_MISSING_POSIX 1
+#define ADD_MISSING_XOPEN 1
diff --git a/gcc/config/m88k/m88k.c b/gcc/config/m88k/m88k.c
index 5475b5775c7..7c2debe018e 100644
--- a/gcc/config/m88k/m88k.c
+++ b/gcc/config/m88k/m88k.c
@@ -27,7 +27,6 @@ Boston, MA 02111-1307, USA. */
#include <time.h>
#include <ctype.h>
-#include "assert.h"
#include "rtl.h"
#include "regs.h"
#include "hard-reg-set.h"
@@ -501,9 +500,10 @@ expand_block_move (dest_mem, src_mem, operands)
int bytes = (constp ? INTVAL (operands[2]) : 0);
int target = (int) m88k_cpu;
- assert (PROCESSOR_M88100 == 0);
- assert (PROCESSOR_M88110 == 1);
- assert (PROCESSOR_M88000 == 2);
+ if (! (PROCESSOR_M88100 == 0
+ && PROCESSOR_M88110 == 1
+ && PROCESSOR_M88000 == 2))
+ abort ();
if (constp && bytes <= 0)
return;
diff --git a/gcc/config/m88k/xm-sysv3.h b/gcc/config/m88k/xm-sysv3.h
index 05d3e4cf4d4..3e8ab39dc95 100644
--- a/gcc/config/m88k/xm-sysv3.h
+++ b/gcc/config/m88k/xm-sysv3.h
@@ -1,6 +1,6 @@
/* Configuration for GNU C-compiler.
Motorola m88100 running the AT&T/Unisoft/Motorola V.3 reference port.
- Copyright (C) 1990 Free Software Foundation, Inc.
+ Copyright (C) 1990, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -28,3 +28,7 @@ Boston, MA 02111-1307, USA. */
/* for the emacs version of alloca */
#define STACK_DIRECTION -1
+
+/* We need POSIX/XOPEN symbols; otherwise make check will fail. */
+#define ADD_MISSING_POSIX 1
+#define ADD_MISSING_XOPEN 1
diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h
index 348a4250b55..557fb09878c 100644
--- a/gcc/config/mips/mips.h
+++ b/gcc/config/mips/mips.h
@@ -2349,6 +2349,13 @@ typedef struct mips_args {
#define TRAMPOLINE_ALIGNMENT (TARGET_LONG64 ? 64 : 32)
+/* INITIALIZE_TRAMPOLINE calls this library function to flush
+ program and data caches. */
+
+#ifndef CACHE_FLUSH_FUNC
+#define CACHE_FLUSH_FUNC "_flush_cache"
+#endif
+
/* A C statement to initialize the variable parts of a trampoline.
ADDR is an RTX for the address of the trampoline; FNADDR is an
RTX for the address of the nested function; STATIC_CHAIN is an
@@ -2372,7 +2379,7 @@ typedef struct mips_args {
/* Flush both caches. We need to flush the data cache in case \
the system has a write-back cache. */ \
/* ??? Should check the return value for errors. */ \
- emit_library_call (gen_rtx (SYMBOL_REF, Pmode, "_flush_cache"), \
+ emit_library_call (gen_rtx (SYMBOL_REF, Pmode, CACHE_FLUSH_FUNC), \
0, VOIDmode, 3, addr, Pmode, \
GEN_INT (TRAMPOLINE_SIZE), TYPE_MODE (integer_type_node),\
GEN_INT (3), TYPE_MODE (integer_type_node)); \
diff --git a/gcc/config/mips/mips.md b/gcc/config/mips/mips.md
index 1a3e2ce22ce..8b81221ea3f 100644
--- a/gcc/config/mips/mips.md
+++ b/gcc/config/mips/mips.md
@@ -6459,6 +6459,18 @@ move\\t%0,%z4\\n\\
{
emit_insn (gen_blockage ());
}")
+
+;; For n32/n64, we need to restore gp after a builtin setjmp. We do this
+;; by making use of the fact that we've just called __dummy.
+
+(define_expand "builtin_setjmp_receiver"
+ [(const_int 0)]
+ "TARGET_ABICALLS && mips_abi != ABI_32"
+ "
+{
+ emit_insn (gen_loadgp (gen_rtx (SYMBOL_REF, Pmode, \"__dummy\")));
+ emit_insn (gen_blockage ());
+}")
;;
;; ....................
diff --git a/gcc/config/mips/news4.h b/gcc/config/mips/news4.h
index f7c464cf353..9f816c19258 100644
--- a/gcc/config/mips/news4.h
+++ b/gcc/config/mips/news4.h
@@ -1,5 +1,5 @@
/* Definitions of target machine for GNU compiler. Sony RISC NEWS (mips)
- Copyright (C) 1991 Free Software Foundation, Inc.
+ Copyright (C) 1991, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -33,4 +33,8 @@ Boston, MA 02111-1307, USA. */
#define MACHINE_TYPE "RISC NEWS-OS"
+/* INITIALIZE_TRAMPOLINE calls this library function to flush
+ program and data caches. */
+#define CACHE_FLUSH_FUNC "cacheflush"
+
#include "mips/mips.h"
diff --git a/gcc/config/mips/ultrix.h b/gcc/config/mips/ultrix.h
index cb18a5d4eba..7fb101a9151 100644
--- a/gcc/config/mips/ultrix.h
+++ b/gcc/config/mips/ultrix.h
@@ -1,5 +1,5 @@
-/* Definitions of target machine for GNU compiler. DECstation (ultrix) version.
- Copyright (C) 1991 Free Software Foundation, Inc.
+/* Definitions of target machine for GNU compiler; DECstation (Ultrix) version.
+ Copyright (C) 1991, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -46,4 +46,12 @@ Boston, MA 02111-1307, USA. */
/* Generate calls to memcpy, etc., not bcopy, etc. */
#define TARGET_MEM_FUNCTIONS
+/* Work around assembler forward label references generated in exception
+ handling code. */
+#define DWARF2_UNWIND_INFO 0
+
+/* INITIALIZE_TRAMPOLINE calls this library function to flush
+ program and data caches. */
+#define CACHE_FLUSH_FUNC "cacheflush"
+
#include "mips/mips.h"
diff --git a/gcc/config/mips/xm-iris5.h b/gcc/config/mips/xm-iris5.h
index 448b7ac80bb..f3eb9cdb753 100644
--- a/gcc/config/mips/xm-iris5.h
+++ b/gcc/config/mips/xm-iris5.h
@@ -1,3 +1,11 @@
#include "mips/xm-mips.h"
#define USG
+
+/* On SGI IRIX 5.3, inttypes.h clashes with sys/types.h, but the clash
+ (when compiled with GCC) is a warning, so configure.in thinks it's OK
+ to use it. Work around this problem. */
+
+#ifdef HAVE_INTTYPES_H
+#undef HAVE_INTTYPES_H
+#endif
diff --git a/gcc/config/ptx4.h b/gcc/config/ptx4.h
index 64d5e0b5752..db761655674 100644
--- a/gcc/config/ptx4.h
+++ b/gcc/config/ptx4.h
@@ -123,7 +123,7 @@ Boston, MA 02111-1307, USA.
support here for as many of the other svr4 linker options as seems
reasonable, given that some of them conflict with options for other
svr4 tools (e.g. the assembler). In particular, we do support the
- -h*, -z*, -V, -b, -t, -Qy, -Qn, and -YP* options here, and the -e*,
+ -z*, -V, -b, -t, -Qy, -Qn, and -YP* options here, and the -e*,
-l*, -o*, -r, -s, -u*, and -L* options are directly supported
by gcc.c itself. We don't directly support the -m (generate load
map) option because that conflicts with the -m (run m4) option of
@@ -143,8 +143,8 @@ Boston, MA 02111-1307, USA.
#define LINK_SPEC "%{h*} %{v:-V} \
%{b} %{Wl,*:%*} \
%{static:-dn -Bstatic} \
- %{shared:-G -dy -z text %{!h*:%{o*:-h %*}}} \
- %{symbolic:-Bsymbolic -G -dy -z text %{!h*:%{o*:-h %*}}} \
+ %{shared:-G -dy -z text} \
+ %{symbolic:-Bsymbolic -G -dy -z text} \
%{G:-G} \
%{YP,*} \
%{!YP,*:%{p:-Y P,/lib/libp:/usr/lib/libp:/lib:/usr/lib} \
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 2dbdb923538..34964a50fba 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -1167,6 +1167,33 @@ init_cumulative_args (cum, fntype, libname, incoming)
}
}
+/* If defined, a C expression which determines whether, and in which
+ direction, to pad out an argument with extra space. The value
+ should be of type `enum direction': either `upward' to pad above
+ the argument, `downward' to pad below, or `none' to inhibit
+ padding.
+
+ For the AIX ABI structs are always stored left shifted in their
+ argument slot. */
+
+enum direction
+function_arg_padding (mode, type)
+ enum machine_mode mode;
+ tree type;
+{
+ if (type != 0 && AGGREGATE_TYPE_P (type))
+ return upward;
+
+ /* This is the default definition. */
+ return (! BYTES_BIG_ENDIAN
+ ? upward
+ : ((mode == BLKmode
+ ? (type && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
+ && int_size_in_bytes (type) < (PARM_BOUNDARY / BITS_PER_UNIT))
+ : GET_MODE_BITSIZE (mode) < PARM_BOUNDARY)
+ ? downward : upward));
+}
+
/* If defined, a C expression that gives the alignment boundary, in bits,
of an argument with the specified mode and type. If it is not defined,
PARM_BOUNDARY is used for all arguments.
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index d30af75f155..087ac5ad8ce 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -1461,6 +1461,15 @@ typedef struct rs6000_args
#define FUNCTION_ARG_PASS_BY_REFERENCE(CUM, MODE, TYPE, NAMED) \
function_arg_pass_by_reference(&CUM, MODE, TYPE, NAMED)
+/* If defined, a C expression which determines whether, and in which
+ direction, to pad out an argument with extra space. The value
+ should be of type `enum direction': either `upward' to pad above
+ the argument, `downward' to pad below, or `none' to inhibit
+ padding. */
+
+#define FUNCTION_ARG_PADDING(MODE, TYPE) \
+ function_arg_padding (MODE, TYPE)
+
/* If defined, a C expression that gives the alignment boundary, in bits,
of an argument with the specified mode and type. If it is not defined,
PARM_BOUNDARY is used for all arguments. */
diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h
index e9a88a2d15a..1fdd2f032d8 100644
--- a/gcc/config/rs6000/sysv4.h
+++ b/gcc/config/rs6000/sysv4.h
@@ -1035,8 +1035,8 @@ do { \
%{!static: %(link_path) %{!R*:%{L*:-R %*}}} \
%{mshlib: } \
%{static:-dn -Bstatic} \
-%{shared:-G -dy -z text %{!h*:%{o*:-h %*}}} \
-%{symbolic:-Bsymbolic -G -dy -z text %{!h*:%{o*:-h %*}}}"
+%{shared:-G -dy -z text} \
+%{symbolic:-Bsymbolic -G -dy -z text}"
#else
/* Shared libraries are not default. */
@@ -1044,8 +1044,8 @@ do { \
%{mshlib: %(link_path) } \
%{!mshlib: %{!shared: %{!symbolic: -dn -Bstatic}}} \
%{static: } \
-%{shared:-G -dy -z text %{!h*:%{o*:-h %*}} %(link_path) } \
-%{symbolic:-Bsymbolic -G -dy -z text %{!h*:%{o*:-h %*}} %(link_path) }"
+%{shared:-G -dy -z text %(link_path) } \
+%{symbolic:-Bsymbolic -G -dy -z text %(link_path) }"
#endif
/* Override the default target of the linker. */
diff --git a/gcc/config/rs6000/x-rs6000 b/gcc/config/rs6000/x-rs6000
index ecfc0899079..0d8f3113fb5 100644
--- a/gcc/config/rs6000/x-rs6000
+++ b/gcc/config/rs6000/x-rs6000
@@ -1,5 +1,4 @@
# configuration for IBM rs6000 running aix
-INSTALL=/usr/ucb/install -c
# Show we need to use the C version of ALLOCA
ALLOCA=alloca.o
diff --git a/gcc/config/sh/sh.md b/gcc/config/sh/sh.md
index ae49456a966..35432aa665d 100644
--- a/gcc/config/sh/sh.md
+++ b/gcc/config/sh/sh.md
@@ -1,5 +1,5 @@
;;- Machine description for the Hitachi SH.
-;; Copyright (C) 1993, 1994, 1995, 1997Free Software Foundation, Inc.
+;; Copyright (C) 1993, 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
;; Contributed by Steve Chamberlain (sac@cygnus.com).
;; Improved by Jim Wilson (wilson@cygnus.com).
diff --git a/gcc/config/sparc/sol2.h b/gcc/config/sparc/sol2.h
index fe4e98c3c03..ff3339d0f1f 100644
--- a/gcc/config/sparc/sol2.h
+++ b/gcc/config/sparc/sol2.h
@@ -142,8 +142,8 @@ Boston, MA 02111-1307, USA. */
"%{h*} %{v:-V} \
%{b} %{Wl,*:%*} \
%{static:-dn -Bstatic} \
- %{shared:-G -dy %{!mimpure-text:-z text} %{!h*:%{o*:-h %*}}} \
- %{symbolic:-Bsymbolic -G -dy -z text %{!h*:%{o*:-h %*}}} \
+ %{shared:-G -dy %{!mimpure-text:-z text}} \
+ %{symbolic:-Bsymbolic -G -dy -z text} \
%{G:-G} \
%{YP,*} \
%{R*} \
diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c
index 692ba41f790..58da5ac35fc 100644
--- a/gcc/config/sparc/sparc.c
+++ b/gcc/config/sparc/sparc.c
@@ -100,8 +100,16 @@ char leaf_reg_remap[] =
static char *frame_base_name;
static int frame_base_offset;
-static rtx find_addr_reg ();
-static void sparc_init_modes ();
+static rtx pic_setup_code PROTO((void));
+static rtx find_addr_reg PROTO((rtx));
+static void sparc_init_modes PROTO((void));
+static int save_regs PROTO((FILE *, int, int, char *,
+ int, int, int));
+static int restore_regs PROTO((FILE *, int, int, char *, int, int));
+static void build_big_number PROTO((FILE *, int, char *));
+static function_arg_slotno PROTO((const CUMULATIVE_ARGS *,
+ enum machine_mode, tree, int, int,
+ int *, int *));
#ifdef DWARF2_DEBUGGING_INFO
extern char *dwarf2out_cfi_label ();
@@ -1324,9 +1332,8 @@ reg_unused_after (reg, insn)
return 1;
}
-/* The rtx for the global offset table which is a special form
- that *is* a position independent symbolic constant. */
-static rtx pic_pc_rtx;
+/* The table we use to reference PIC data. */
+static rtx global_offset_table;
/* Ensure that we are not using patterns that are not OK with PIC. */
@@ -1339,7 +1346,11 @@ check_pic (i)
case 1:
if (GET_CODE (recog_operand[i]) == SYMBOL_REF
|| (GET_CODE (recog_operand[i]) == CONST
- && ! rtx_equal_p (pic_pc_rtx, recog_operand[i])))
+ && ! (GET_CODE (XEXP (recog_operand[i], 0)) == MINUS
+ && (XEXP (XEXP (recog_operand[i], 0), 0)
+ == global_offset_table)
+ && (GET_CODE (XEXP (XEXP (recog_operand[i], 0), 1))
+ == CONST))))
abort ();
case 2:
default:
@@ -1472,39 +1483,26 @@ initialize_pic ()
{
}
-/* Emit special PIC prologues and epilogues. */
+/* Return the RTX for insns to set the PIC register. */
-void
-finalize_pic ()
+static rtx
+pic_setup_code ()
{
- /* The table we use to reference PIC data. */
- rtx global_offset_table;
- /* Labels to get the PC in the prologue of this function. */
+ rtx pic_pc_rtx;
rtx l1, l2;
rtx seq;
- int orig_flag_pic = flag_pic;
-
- if (current_function_uses_pic_offset_table == 0)
- return;
-
- if (! flag_pic)
- abort ();
-
- flag_pic = 0;
start_sequence ();
l1 = gen_label_rtx ();
- /* Initialize every time through, since we can't easily
- know this to be permanent. */
- global_offset_table = gen_rtx (SYMBOL_REF, Pmode, "_GLOBAL_OFFSET_TABLE_");
pic_pc_rtx = gen_rtx (CONST, Pmode,
gen_rtx (MINUS, Pmode,
global_offset_table,
gen_rtx (CONST, Pmode,
gen_rtx (MINUS, Pmode,
- gen_rtx (LABEL_REF, VOIDmode, l1),
+ gen_rtx (LABEL_REF,
+ VOIDmode, l1),
pc_rtx))));
/* sparc64: the RDPC instruction doesn't pair, and puts 4 bubbles in the
@@ -1543,14 +1541,46 @@ finalize_pic ()
LABEL_PRESERVE_P (l1) = 1;
LABEL_PRESERVE_P (l2) = 1;
- flag_pic = orig_flag_pic;
-
seq = gen_sequence ();
end_sequence ();
- emit_insn_after (seq, get_insns ());
+
+ return seq;
+}
+
+/* Emit special PIC prologues and epilogues. */
+
+void
+finalize_pic ()
+{
+ /* Labels to get the PC in the prologue of this function. */
+ int orig_flag_pic = flag_pic;
+ rtx insn;
+
+ if (current_function_uses_pic_offset_table == 0)
+ return;
+
+ if (! flag_pic)
+ abort ();
+
+ /* Initialize every time through, since we can't easily
+ know this to be permanent. */
+ global_offset_table = gen_rtx (SYMBOL_REF, Pmode, "_GLOBAL_OFFSET_TABLE_");
+ flag_pic = 0;
+
+ emit_insn_after (pic_setup_code (), get_insns ());
+
+ /* Insert the code in each nonlocal goto receiver. */
+ for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
+ if (GET_CODE (insn) == INSN && GET_CODE (PATTERN (insn)) == UNSPEC_VOLATILE
+ && XINT (PATTERN (insn), 1) == 4)
+ emit_insn_after (pic_setup_code (), insn);
+
+ flag_pic = orig_flag_pic;
/* Need to emit this whether or not we obey regdecls,
- since setjmp/longjmp can cause life info to screw up. */
+ since setjmp/longjmp can cause life info to screw up.
+ ??? In the case where we don't obey regdecls, this is not sufficient
+ since we may not fall out the bottom. */
emit_insn (gen_rtx (USE, VOIDmode, pic_offset_table_rtx));
}
diff --git a/gcc/config/sparc/sparc.md b/gcc/config/sparc/sparc.md
index 8ec12f5197a..6efa3320852 100644
--- a/gcc/config/sparc/sparc.md
+++ b/gcc/config/sparc/sparc.md
@@ -5014,7 +5014,21 @@
(define_insn "jump"
[(set (pc) (label_ref (match_operand 0 "" "")))]
""
- "b%* %l0%("
+ "*
+{
+ /* Some implementations are reported to have problems with
+ foo: b,a foo
+ i.e. an empty loop with the annul bit set. The workaround is to use
+ foo: b foo; nop
+ instead. */
+
+ if (flag_delayed_branch
+ && (insn_addresses[INSN_UID (operands[0])]
+ == insn_addresses[INSN_UID (insn)]))
+ return \"b %l0%#\";
+ else
+ return \"b%* %l0%(\";
+}"
[(set_attr "type" "uncond_branch")])
(define_expand "tablejump"
@@ -6136,3 +6150,12 @@
(set (reg:CC 100) (compare (match_dup 0) (const_int 0)))]
""
"subxcc %r1,0,%0")
+
+;; After a nonlocal goto, we need to restore the PIC register, but only
+;; if we need it. So do nothing much here, but we'll check for this in
+;; finalize_pic.
+
+(define_insn "nonlocal_goto_receiver"
+ [(unspec_volatile [(const_int 0)] 4)]
+ "flag_pic"
+ "")
diff --git a/gcc/config/svr4.h b/gcc/config/svr4.h
index d70aa117558..a7f5a37beb8 100644
--- a/gcc/config/svr4.h
+++ b/gcc/config/svr4.h
@@ -1,6 +1,6 @@
/* Operating system specific defines to be used when targeting GCC for some
generic System V Release 4 system.
- Copyright (C) 1991, 1994, 1995, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1991, 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
Contributed by Ron Guilmette (rfg@monkeys.com).
This file is part of GNU CC.
@@ -141,7 +141,7 @@ Boston, MA 02111-1307, USA.
support here for as many of the other svr4 linker options as seems
reasonable, given that some of them conflict with options for other
svr4 tools (e.g. the assembler). In particular, we do support the
- -h*, -z*, -V, -b, -t, -Qy, -Qn, and -YP* options here, and the -e*,
+ -z*, -V, -b, -t, -Qy, -Qn, and -YP* options here, and the -e*,
-l*, -o*, -r, -s, -u*, and -L* options are directly supported
by gcc.c itself. We don't directly support the -m (generate load
map) option because that conflicts with the -m (run m4) option of
@@ -162,8 +162,8 @@ Boston, MA 02111-1307, USA.
#define LINK_SPEC "%{h*} %{v:-V} \
%{b} %{Wl,*:%*} \
%{static:-dn -Bstatic} \
- %{shared:-G -dy -z text %{!h*:%{o*:-h %*}}} \
- %{symbolic:-Bsymbolic -G -dy -z text %{!h*:%{o*:-h %*}}} \
+ %{shared:-G -dy -z text} \
+ %{symbolic:-Bsymbolic -G -dy -z text} \
%{G:-G} \
%{YP,*} \
%{Qy:} %{!Qn:-Qy}"
@@ -171,8 +171,8 @@ Boston, MA 02111-1307, USA.
#define LINK_SPEC "%{h*} %{v:-V} \
%{b} %{Wl,*:%*} \
%{static:-dn -Bstatic} \
- %{shared:-G -dy -z text %{!h*:%{o*:-h %*}}} \
- %{symbolic:-Bsymbolic -G -dy -z text %{!h*:%{o*:-h %*}}} \
+ %{shared:-G -dy -z text} \
+ %{symbolic:-Bsymbolic -G -dy -z text} \
%{G:-G} \
%{YP,*} \
%{!YP,*:%{p:-Y P,/usr/ccs/lib/libp:/usr/lib/libp:/usr/ccs/lib:/usr/lib} \
diff --git a/gcc/config/vax/xm-vms.h b/gcc/config/vax/xm-vms.h
index ba87e656d39..a559a039476 100644
--- a/gcc/config/vax/xm-vms.h
+++ b/gcc/config/vax/xm-vms.h
@@ -26,6 +26,9 @@ Boston, MA 02111-1307, USA. */
#define STDC_HEADERS 1
#define HAVE_STDLIB_H 1
#define HAVE_STRING_H 1
+#ifdef __DECC
+#define HAVE_UNISTD_H 1
+#endif
#if defined(VAXC) || defined(__DECC)
/* if compiling with VAXC, need to fix problem with <stdio.h>
diff --git a/gcc/configure b/gcc/configure
index 9548b878078..a449a2d0c88 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -2032,14 +2032,124 @@ else
fi
done
+for ac_func in getrlimit
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:2039: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 2044 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:2067: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+done
+
+for ac_func in setrlimit
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:2094: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 2099 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:2122: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+done
+
echo $ac_n "checking whether malloc must be declared""... $ac_c" 1>&6
-echo "configure:2038: checking whether malloc must be declared" >&5
+echo "configure:2148: checking whether malloc must be declared" >&5
if eval "test \"`echo '$''{'gcc_cv_decl_needed_malloc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2043 "configure"
+#line 2153 "configure"
#include "confdefs.h"
#include <stdio.h>
@@ -2066,7 +2176,7 @@ int main() {
char *(*pfn) = (char *(*)) malloc
; return 0; }
EOF
-if { (eval echo configure:2070: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2180: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
gcc_cv_decl_needed_malloc=no
else
@@ -2088,12 +2198,12 @@ EOF
fi
echo $ac_n "checking whether realloc must be declared""... $ac_c" 1>&6
-echo "configure:2092: checking whether realloc must be declared" >&5
+echo "configure:2202: checking whether realloc must be declared" >&5
if eval "test \"`echo '$''{'gcc_cv_decl_needed_realloc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2097 "configure"
+#line 2207 "configure"
#include "confdefs.h"
#include <stdio.h>
@@ -2120,7 +2230,7 @@ int main() {
char *(*pfn) = (char *(*)) realloc
; return 0; }
EOF
-if { (eval echo configure:2124: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2234: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
gcc_cv_decl_needed_realloc=no
else
@@ -2142,12 +2252,12 @@ EOF
fi
echo $ac_n "checking whether calloc must be declared""... $ac_c" 1>&6
-echo "configure:2146: checking whether calloc must be declared" >&5
+echo "configure:2256: checking whether calloc must be declared" >&5
if eval "test \"`echo '$''{'gcc_cv_decl_needed_calloc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2151 "configure"
+#line 2261 "configure"
#include "confdefs.h"
#include <stdio.h>
@@ -2174,7 +2284,7 @@ int main() {
char *(*pfn) = (char *(*)) calloc
; return 0; }
EOF
-if { (eval echo configure:2178: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2288: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
gcc_cv_decl_needed_calloc=no
else
@@ -2196,12 +2306,12 @@ EOF
fi
echo $ac_n "checking whether free must be declared""... $ac_c" 1>&6
-echo "configure:2200: checking whether free must be declared" >&5
+echo "configure:2310: checking whether free must be declared" >&5
if eval "test \"`echo '$''{'gcc_cv_decl_needed_free'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2205 "configure"
+#line 2315 "configure"
#include "confdefs.h"
#include <stdio.h>
@@ -2228,7 +2338,7 @@ int main() {
char *(*pfn) = (char *(*)) free
; return 0; }
EOF
-if { (eval echo configure:2232: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2342: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
gcc_cv_decl_needed_free=no
else
@@ -2250,12 +2360,12 @@ EOF
fi
echo $ac_n "checking whether index must be declared""... $ac_c" 1>&6
-echo "configure:2254: checking whether index must be declared" >&5
+echo "configure:2364: checking whether index must be declared" >&5
if eval "test \"`echo '$''{'gcc_cv_decl_needed_index'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2259 "configure"
+#line 2369 "configure"
#include "confdefs.h"
#include <stdio.h>
@@ -2282,7 +2392,7 @@ int main() {
char *(*pfn) = (char *(*)) index
; return 0; }
EOF
-if { (eval echo configure:2286: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2396: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
gcc_cv_decl_needed_index=no
else
@@ -2304,12 +2414,12 @@ EOF
fi
echo $ac_n "checking whether rindex must be declared""... $ac_c" 1>&6
-echo "configure:2308: checking whether rindex must be declared" >&5
+echo "configure:2418: checking whether rindex must be declared" >&5
if eval "test \"`echo '$''{'gcc_cv_decl_needed_rindex'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2313 "configure"
+#line 2423 "configure"
#include "confdefs.h"
#include <stdio.h>
@@ -2336,7 +2446,7 @@ int main() {
char *(*pfn) = (char *(*)) rindex
; return 0; }
EOF
-if { (eval echo configure:2340: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2450: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
gcc_cv_decl_needed_rindex=no
else
@@ -2358,12 +2468,12 @@ EOF
fi
echo $ac_n "checking whether getenv must be declared""... $ac_c" 1>&6
-echo "configure:2362: checking whether getenv must be declared" >&5
+echo "configure:2472: checking whether getenv must be declared" >&5
if eval "test \"`echo '$''{'gcc_cv_decl_needed_getenv'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2367 "configure"
+#line 2477 "configure"
#include "confdefs.h"
#include <stdio.h>
@@ -2390,7 +2500,7 @@ int main() {
char *(*pfn) = (char *(*)) getenv
; return 0; }
EOF
-if { (eval echo configure:2394: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2504: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
gcc_cv_decl_needed_getenv=no
else
@@ -2413,12 +2523,12 @@ fi
echo $ac_n "checking for sys_siglist declaration in signal.h or unistd.h""... $ac_c" 1>&6
-echo "configure:2417: checking for sys_siglist declaration in signal.h or unistd.h" >&5
+echo "configure:2527: checking for sys_siglist declaration in signal.h or unistd.h" >&5
if eval "test \"`echo '$''{'ac_cv_decl_sys_siglist'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2422 "configure"
+#line 2532 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <signal.h>
@@ -2430,7 +2540,7 @@ int main() {
char *msg = *(sys_siglist + 1);
; return 0; }
EOF
-if { (eval echo configure:2434: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2544: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_decl_sys_siglist=yes
else
diff --git a/gcc/configure.in b/gcc/configure.in
index 3dcf22dbca2..dc56c959d63 100644
--- a/gcc/configure.in
+++ b/gcc/configure.in
@@ -161,6 +161,8 @@ AC_CHECK_FUNCS(bcmp)
AC_CHECK_FUNCS(index)
AC_CHECK_FUNCS(rindex)
AC_CHECK_FUNCS(kill)
+AC_CHECK_FUNCS(getrlimit)
+AC_CHECK_FUNCS(setrlimit)
GCC_NEED_DECLARATION(malloc)
GCC_NEED_DECLARATION(realloc)
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 03f3806071d..e20b8af122b 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,11 @@
+Mon Dec 22 17:46:17 1997 Mark Mitchell <mmitchell@usa.net>
+
+ * method.c (build_overload_name): Fix mangling for __null.
+
+Sat Dec 13 09:23:54 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * Make-lang.in (g++.c, cxxmain.o): Use $(LN).
+
Wed Dec 3 08:47:27 1997 Paul Eggert <eggert@twinsun.com>
* pt.c (check_explicit_specialization): Fix misspelling in
@@ -6555,3 +6563,10 @@ Wed Oct 11 16:30:34 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
* parse.y (fn.def1): Call split_specs_attrs in
declmods notype_declarator case.
+
+Use a consistent time stamp format in ChangeLog entries.
+Not everyone has Emacs 20 yet, so stick with Emacs 19 format for now.
+
+Local Variables:
+add-log-time-format: current-time-string
+End:
diff --git a/gcc/cp/Make-lang.in b/gcc/cp/Make-lang.in
index deba6e22bd1..7646cf66bdf 100644
--- a/gcc/cp/Make-lang.in
+++ b/gcc/cp/Make-lang.in
@@ -74,7 +74,7 @@ C++ c++: cc1plus
g++.c: $(srcdir)/gcc.c
-rm -f $@
- ln -s $(srcdir)/gcc.c $@ || cp $(srcdir)/gcc.c $@
+ $(LN) $(srcdir)/gcc.c $@
g++spec.o: $(srcdir)/cp/g++spec.c
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(srcdir)/cp/g++spec.c
@@ -101,8 +101,7 @@ g++-cross$(exeext): g++$(exeext)
cxxmain.o: cplus-dem.c demangle.h
rm -f cxxmain.c
- ln -s $(srcdir)/cplus-dem.c cxxmain.c > /dev/null 2>&1 \
- || cp $(srcdir)/cplus-dem.c cxxmain.c
+ $(LN) $(srcdir)/cplus-dem.c cxxmain.c
$(CC) -c -DMAIN $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
-DVERSION=\"$(version)\" cxxmain.c
rm -f cxxmain.c
diff --git a/gcc/cp/method.c b/gcc/cp/method.c
index 0e407fe1ab8..dc57bc77a46 100644
--- a/gcc/cp/method.c
+++ b/gcc/cp/method.c
@@ -1,6 +1,6 @@
/* Handle the hair of processing (but not expanding) inline functions.
Also manage function and variable name overloading.
- Copyright (C) 1987, 89, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1987, 89, 92-96, 1997 Free Software Foundation, Inc.
Contributed by Michael Tiemann (tiemann@cygnus.com)
This file is part of GNU CC.
@@ -1039,8 +1039,10 @@ build_overload_name (parmtypes, begin, end)
}
case UNKNOWN_TYPE:
- /* This will take some work. */
- OB_PUTC ('?');
+ /* We can get here if __null is defined to have type ({unkown
+ type}*), which it is if -ansi is not used. Treat this
+ like 'void*'. */
+ OB_PUTC ('v');
break;
case TEMPLATE_TYPE_PARM:
diff --git a/gcc/cppexp.c b/gcc/cppexp.c
index 29c7aab26e5..98ad8787877 100644
--- a/gcc/cppexp.c
+++ b/gcc/cppexp.c
@@ -1,5 +1,5 @@
/* Parse C expressions for CCCP.
- Copyright (C) 1987, 1992, 1994, 1995, 1997 Free Software Foundation.
+ Copyright (C) 1987, 1992, 1994, 1995, 1997, 1998 Free Software Foundation.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
@@ -26,6 +26,7 @@ Written by Per Bothner 1994. */
#include "config.h"
#include "cpplib.h"
+#include "gansidecl.h"
extern char *xmalloc PARAMS ((unsigned));
extern char *xrealloc PARAMS ((void *, unsigned));
diff --git a/gcc/crtstuff.c b/gcc/crtstuff.c
index 4fbc9e4f9fb..52a3c048e60 100644
--- a/gcc/crtstuff.c
+++ b/gcc/crtstuff.c
@@ -137,7 +137,7 @@ __do_global_dtors_aux ()
}
#ifdef EH_FRAME_SECTION_ASM_OP
- __deregister_frame (__EH_FRAME_BEGIN__);
+ __deregister_frame_info (__EH_FRAME_BEGIN__);
#endif
}
@@ -155,15 +155,15 @@ fini_dummy ()
}
#ifdef EH_FRAME_SECTION_ASM_OP
-/* Stick a call to __register_frame into the .init section. For some reason
- calls with no arguments work more reliably in .init, so stick the call
- in another function. */
+/* Stick a call to __register_frame_info into the .init section. For some
+ reason calls with no arguments work more reliably in .init, so stick the
+ call in another function. */
static void
frame_dummy ()
{
static struct object object;
- __register_frame (__EH_FRAME_BEGIN__, &object);
+ __register_frame_info (__EH_FRAME_BEGIN__, &object);
}
static void
@@ -247,7 +247,7 @@ __do_global_dtors ()
(*p) ();
#ifdef EH_FRAME_SECTION_ASM_OP
- __deregister_frame (__EH_FRAME_BEGIN__);
+ __deregister_frame_info (__EH_FRAME_BEGIN__);
#endif
}
#endif
@@ -370,6 +370,10 @@ __do_global_ctors_aux () /* prologue goes in .text section */
asm (INIT_SECTION_ASM_OP);
DO_GLOBAL_CTORS_BODY;
ON_EXIT (__do_global_dtors, 0);
+#ifdef FORCE_INIT_SECTION_ALIGN
+ FORCE_INIT_SECTION_ALIGN;
+#endif
+ asm (TEXT_SECTION_ASM_OP);
} /* epilogue and body go in .init section */
#endif /* OBJECT_FORMAT_ELF */
@@ -387,7 +391,8 @@ __do_global_ctors ()
{
func_ptr *p;
#ifdef EH_FRAME_SECTION_ASM_OP
- __register_frame (__EH_FRAME_BEGIN__);
+ static struct object object;
+ __register_frame_info (__EH_FRAME_BEGIN__, &object);
#endif
for (p = __CTOR_END__ - 1; *p != (func_ptr) -1; p--)
(*p) ();
diff --git a/gcc/cse.c b/gcc/cse.c
index 2436c057e83..c99e4de7337 100644
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -1,5 +1,5 @@
/* Common subexpression elimination for GNU compiler.
- Copyright (C) 1987, 88, 89, 92-6, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -193,6 +193,11 @@ Related expressions:
static int max_reg;
+/* One plus largest instruction UID used in this function at time of
+ cse_main call. */
+
+static int max_insn_uid;
+
/* Length of vectors indexed by quantity number.
We know in advance we will not need a quantity number this big. */
@@ -7942,10 +7947,16 @@ cse_around_loop (loop_start)
The only thing we do with SET_DEST is invalidate entries, so we
can safely process each SET in order. It is slightly less efficient
- to do so, but we only want to handle the most common cases. */
+ to do so, but we only want to handle the most common cases.
+
+ The gen_move_insn call in cse_set_around_loop may create new pseudos.
+ These pseudos won't have valid entries in any of the tables indexed
+ by register number, such as reg_qty. We avoid out-of-range array
+ accesses by not processing any instructions created after cse started. */
for (insn = NEXT_INSN (loop_start);
GET_CODE (insn) != CALL_INSN && GET_CODE (insn) != CODE_LABEL
+ && INSN_UID (insn) < max_insn_uid
&& ! (GET_CODE (insn) == NOTE
&& NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END);
insn = NEXT_INSN (insn))
@@ -8402,6 +8413,8 @@ cse_main (f, nregs, after_loop, file)
max_reg = nregs;
+ max_insn_uid = get_max_uid ();
+
all_minus_one = (int *) alloca (nregs * sizeof (int));
consec_ints = (int *) alloca (nregs * sizeof (int));
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index c4b47c85a89..b1f748cdd97 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -41,8 +41,14 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#include "except.h"
#include "dwarf2.h"
-/* #define NDEBUG 1 */
-#include "assert.h"
+/* We cannot use <assert.h> in GCC source, since that would include
+ GCC's assert.h, which may not be compatible with the host compiler. */
+#undef assert
+#ifdef NDEBUG
+# define assert(e)
+#else
+# define assert(e) do { if (! (e)) abort (); } while (0)
+#endif
/* Decide whether we want to emit frame unwind information for the current
translation unit. */
@@ -7047,6 +7053,7 @@ add_bound_info (subrange_die, bound_attr, bound)
case MAX_EXPR:
case VAR_DECL:
+ case COMPONENT_REF:
/* ??? These types of bounds can be created by the Ada front end,
and it isn't clear how to emit debug info for them. */
break;
diff --git a/gcc/dwarfout.c b/gcc/dwarfout.c
index e0f6001c195..7f42d061ab1 100644
--- a/gcc/dwarfout.c
+++ b/gcc/dwarfout.c
@@ -33,9 +33,6 @@ Boston, MA 02111-1307, USA. */
#include "output.h"
#include "defaults.h"
-/* #define NDEBUG 1 */
-#include "assert.h"
-
#if defined(DWARF_TIMESTAMPS)
#if defined(POSIX)
#include <time.h>
@@ -61,6 +58,15 @@ extern time_t time ();
#endif
#endif
+/* We cannot use <assert.h> in GCC source, since that would include
+ GCC's assert.h, which may not be compatible with the host compiler. */
+#undef assert
+#ifdef NDEBUG
+# define assert(e)
+#else
+# define assert(e) do { if (! (e)) abort (); } while (0)
+#endif
+
extern char *getpwd ();
#ifdef NEED_DECLARATION_INDEX
diff --git a/gcc/except.c b/gcc/except.c
index 0e93d3c693e..d0922668a4d 100644
--- a/gcc/except.c
+++ b/gcc/except.c
@@ -97,9 +97,9 @@ Boston, MA 02111-1307, USA. */
On targets that support crtstuff.c, the unwind information
is stored in a section named .eh_frame and the information for the
entire shared object or program is registered with a call to
- __register_frame. On other targets, the information for each
+ __register_frame_info. On other targets, the information for each
translation unit is registered from the file generated by collect2.
- __register_frame is defined in frame.c, and is responsible for
+ __register_frame_info is defined in frame.c, and is responsible for
recording all of the unwind regions into one list (which is kept in a
static variable named unwind_table_list).
@@ -404,7 +404,6 @@ Boston, MA 02111-1307, USA. */
#include "insn-config.h"
#include "recog.h"
#include "output.h"
-#include "assert.h"
/* One to use setjmp/longjmp method of generating code for exception
handling. */
@@ -1967,8 +1966,6 @@ void
save_eh_status (p)
struct function *p;
{
- assert (p != NULL);
-
p->ehstack = ehstack;
p->ehqueue = ehqueue;
p->catch_clauses = catch_clauses;
@@ -1989,8 +1986,6 @@ void
restore_eh_status (p)
struct function *p;
{
- assert (p != NULL);
-
protect_list = p->protect_list;
caught_return_label_stack = p->caught_return_label_stack;
false_label_stack = p->false_label_stack;
@@ -2054,11 +2049,11 @@ scan_region (insn, n, delete_outer)
/* Assume we can delete the region. */
int delete = 1;
- assert (insn != NULL_RTX
- && GET_CODE (insn) == NOTE
- && NOTE_LINE_NUMBER (insn) == NOTE_INSN_EH_REGION_BEG
- && NOTE_BLOCK_NUMBER (insn) == n
- && delete_outer != NULL);
+ if (! (GET_CODE (insn) == NOTE
+ && NOTE_LINE_NUMBER (insn) == NOTE_INSN_EH_REGION_BEG
+ && NOTE_BLOCK_NUMBER (insn) == n
+ && delete_outer != NULL))
+ abort ();
insn = NEXT_INSN (insn);
diff --git a/gcc/expr.c b/gcc/expr.c
index 4534ef5a9b5..2af7fdb6d1d 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -1,5 +1,5 @@
/* Convert tree expression to rtl instructions, for GNU compiler.
- Copyright (C) 1988, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1988, 92-97, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -2432,7 +2432,7 @@ get_push_address (size)
else
temp = stack_pointer_rtx;
- return force_operand (temp, NULL_RTX);
+ return copy_to_reg (temp);
}
/* Generate code to push X onto the stack, assuming it has mode MODE and
@@ -2561,7 +2561,7 @@ emit_push_insn (x, mode, type, size, align, partial, reg, extra,
in_check_memory_usage = 1;
temp = get_push_address (INTVAL(size) - used);
- if (GET_CODE (x) == MEM && AGGREGATE_TYPE_P (type))
+ if (GET_CODE (x) == MEM && type && AGGREGATE_TYPE_P (type))
emit_library_call (chkr_copy_bitmap_libfunc, 1, VOIDmode, 3,
temp, ptr_mode,
XEXP (xinner, 0), ptr_mode,
@@ -2617,7 +2617,7 @@ emit_push_insn (x, mode, type, size, align, partial, reg, extra,
in_check_memory_usage = 1;
target = copy_to_reg (temp);
- if (GET_CODE (x) == MEM && AGGREGATE_TYPE_P (type))
+ if (GET_CODE (x) == MEM && type && AGGREGATE_TYPE_P (type))
emit_library_call (chkr_copy_bitmap_libfunc, 1, VOIDmode, 3,
target, ptr_mode,
XEXP (xinner, 0), ptr_mode,
@@ -2829,7 +2829,7 @@ emit_push_insn (x, mode, type, size, align, partial, reg, extra,
if (target == 0)
target = get_push_address (GET_MODE_SIZE (mode));
- if (GET_CODE (x) == MEM && AGGREGATE_TYPE_P (type))
+ if (GET_CODE (x) == MEM && type && AGGREGATE_TYPE_P (type))
emit_library_call (chkr_copy_bitmap_libfunc, 1, VOIDmode, 3,
target, ptr_mode,
XEXP (x, 0), ptr_mode,
@@ -5293,7 +5293,7 @@ expand_expr (exp, target, tmode, modifier)
tree placeholder_expr;
/* If there is an object on the head of the placeholder list,
- see if some object in it's references is of type TYPE. For
+ see if some object in its references is of type TYPE. For
further information, see tree.def. */
for (placeholder_expr = placeholder_list;
placeholder_expr != 0;
@@ -5310,9 +5310,9 @@ expand_expr (exp, target, tmode, modifier)
== need_type))
object = TREE_PURPOSE (placeholder_expr);
- /* Find the innermost reference that is of the type we want. */
+ /* Find the outermost reference that is of the type we want. */
for (elt = TREE_PURPOSE (placeholder_expr);
- elt != 0
+ elt != 0 && object == 0
&& (TREE_CODE_CLASS (TREE_CODE (elt)) == 'r'
|| TREE_CODE_CLASS (TREE_CODE (elt)) == '1'
|| TREE_CODE_CLASS (TREE_CODE (elt)) == '2'
@@ -5323,10 +5323,7 @@ expand_expr (exp, target, tmode, modifier)
if (TREE_CODE_CLASS (TREE_CODE (elt)) == 'r'
&& (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (elt, 0)))
== need_type))
- {
- object = TREE_OPERAND (elt, 0);
- break;
- }
+ object = TREE_OPERAND (elt, 0);
if (object != 0)
{
@@ -5498,12 +5495,16 @@ expand_expr (exp, target, tmode, modifier)
memory_usage = get_memory_usage_from_modifier (modifier);
if (memory_usage != MEMORY_USE_DONT)
- emit_library_call (chkr_check_addr_libfunc, 1, VOIDmode, 3,
- op0, ptr_mode,
- GEN_INT (int_size_in_bytes (type)),
- TYPE_MODE (sizetype),
- GEN_INT (memory_usage),
- TYPE_MODE (integer_type_node));
+ {
+ in_check_memory_usage = 1;
+ emit_library_call (chkr_check_addr_libfunc, 1, VOIDmode, 3,
+ op0, ptr_mode,
+ GEN_INT (int_size_in_bytes (type)),
+ TYPE_MODE (sizetype),
+ GEN_INT (memory_usage),
+ TYPE_MODE (integer_type_node));
+ in_check_memory_usage = 0;
+ }
}
temp = gen_rtx (MEM, mode, op0);
@@ -8306,6 +8307,11 @@ expand_builtin_setjmp (buf_addr, target)
#endif
abort ();
+#ifdef HAVE_builtin_setjmp_receiver
+ if (HAVE_builtin_setjmp_receiver)
+ emit_insn (gen_builtin_setjmp_receiver ());
+#endif
+
emit_move_insn (target, const1_rtx);
emit_label (lab2);
return target;
@@ -8986,8 +8992,8 @@ expand_builtin (exp, target, subtarget, mode, ignore)
/* Just copy the rights of SRC to the rights of DEST. */
if (flag_check_memory_usage)
emit_library_call (chkr_copy_bitmap_libfunc, 1, VOIDmode, 3,
- src_rtx, ptr_mode,
dest_rtx, ptr_mode,
+ src_rtx, ptr_mode,
len_rtx, TYPE_MODE (sizetype));
/* There could be a void* cast on top of the object. */
@@ -11098,29 +11104,12 @@ do_store_flag (exp, target, mode, only_cheap)
if ((code == NE || code == EQ)
&& TREE_CODE (arg0) == BIT_AND_EXPR && integer_zerop (arg1)
- && integer_pow2p (TREE_OPERAND (arg0, 1))
- && TYPE_PRECISION (type) <= HOST_BITS_PER_WIDE_INT)
+ && integer_pow2p (TREE_OPERAND (arg0, 1)))
{
tree inner = TREE_OPERAND (arg0, 0);
- HOST_WIDE_INT tem;
- int bitnum;
+ int bitnum = tree_log2 (TREE_OPERAND (arg0, 1));
int ops_unsignedp;
- tem = INTVAL (expand_expr (TREE_OPERAND (arg0, 1),
- NULL_RTX, VOIDmode, 0));
- /* In this case, immed_double_const will sign extend the value to make
- it look the same on the host and target. We must remove the
- sign-extension before calling exact_log2, since exact_log2 will
- fail for negative values. */
- if (BITS_PER_WORD < HOST_BITS_PER_WIDE_INT
- && BITS_PER_WORD == GET_MODE_BITSIZE (TYPE_MODE (type)))
- /* We don't use the obvious constant shift to generate the mask,
- because that generates compiler warnings when BITS_PER_WORD is
- greater than or equal to HOST_BITS_PER_WIDE_INT, even though this
- code is unreachable in that case. */
- tem = tem & GET_MODE_MASK (word_mode);
- bitnum = exact_log2 (tem);
-
/* If INNER is a right shift of a constant and it plus BITNUM does
not overflow, adjust BITNUM and INNER. */
@@ -11130,7 +11119,7 @@ do_store_flag (exp, target, mode, only_cheap)
&& (bitnum + TREE_INT_CST_LOW (TREE_OPERAND (inner, 1))
< TYPE_PRECISION (type)))
{
- bitnum +=TREE_INT_CST_LOW (TREE_OPERAND (inner, 1));
+ bitnum += TREE_INT_CST_LOW (TREE_OPERAND (inner, 1));
inner = TREE_OPERAND (inner, 0);
}
diff --git a/gcc/extend.texi b/gcc/extend.texi
index aca2a5afdd5..297bc32a0a0 100644
--- a/gcc/extend.texi
+++ b/gcc/extend.texi
@@ -366,9 +366,7 @@ does not refer to anything that has gone out of scope, you should be
safe.
GNU CC implements taking the address of a nested function using a
-technique called @dfn{trampolines}. A paper describing them is
-available from @samp{maya.idiap.ch} in directory @file{pub/tmb},
-file @file{usenix88-lexic.ps.Z}.
+technique called @dfn{trampolines}.
A nested function can jump to a label inherited from a containing
function, provided the label was explicitly declared in the containing
@@ -2277,14 +2275,14 @@ did the easy thing, and turned it off.
@cindex assembler instructions
@cindex registers
-In an assembler instruction using @code{asm}, you can now specify the
-operands of the instruction using C expressions. This means no more
-guessing which registers or memory locations will contain the data you want
+In an assembler instruction using @code{asm}, you can specify the
+operands of the instruction using C expressions. This means you need not
+guess which registers or memory locations will contain the data you want
to use.
-You must specify an assembler instruction template much like what appears
-in a machine description, plus an operand constraint string for each
-operand.
+You must specify an assembler instruction template much like what
+appears in a machine description, plus an operand constraint string for
+each operand.
For example, here is how to use the 68881's @code{fsinx} instruction:
@@ -2295,65 +2293,66 @@ asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
@noindent
Here @code{angle} is the C expression for the input operand while
@code{result} is that of the output operand. Each has @samp{"f"} as its
-operand constraint, saying that a floating point register is required. The
-@samp{=} in @samp{=f} indicates that the operand is an output; all output
-operands' constraints must use @samp{=}. The constraints use the same
-language used in the machine description (@pxref{Constraints}).
-
-Each operand is described by an operand-constraint string followed by the C
-expression in parentheses. A colon separates the assembler template from
-the first output operand, and another separates the last output operand
-from the first input, if any. Commas separate output operands and separate
-inputs. The total number of operands is limited to ten or to the maximum
-number of operands in any instruction pattern in the machine description,
-whichever is greater.
-
-If there are no output operands, and there are input operands, then there
-must be two consecutive colons surrounding the place where the output
+operand constraint, saying that a floating point register is required.
+The @samp{=} in @samp{=f} indicates that the operand is an output; all
+output operands' constraints must use @samp{=}. The constraints use the
+same language used in the machine description (@pxref{Constraints}).
+
+Each operand is described by an operand-constraint string followed by
+the C expression in parentheses. A colon separates the assembler
+template from the first output operand and another separates the last
+output operand from the first input, if any. Commas separate the
+operands within each group. The total number of operands is limited to
+ten or to the maximum number of operands in any instruction pattern in
+the machine description, whichever is greater.
+
+If there are no output operands but there are input operands, you must
+place two consecutive colons surrounding the place where the output
operands would go.
Output operand expressions must be lvalues; the compiler can check this.
-The input operands need not be lvalues. The compiler cannot check whether
-the operands have data types that are reasonable for the instruction being
-executed. It does not parse the assembler instruction template and does
-not know what it means, or whether it is valid assembler input. The
-extended @code{asm} feature is most often used for machine instructions
-that the compiler itself does not know exist. If the output expression
-cannot be directly addressed (for example, it is a bit field), your
-constraint must allow a register. In that case, GNU CC will use
-the register as the output of the @code{asm}, and then store that
-register into the output.
-
-The ordinary output operands must be write-only; GNU CC will assume
-that the values in these operands before the instruction are dead and
-need not be generated. Extended asm supports input-output or
-read-write operands. Use the constraint character @samp{+} to indicate
-such an operand and list it with the output operands.
-
-When the constraints for the read-write operand
-(or the operand in which only some of the bits are to be changed)
-allows a register, you may, as an alternative, logically
-split its function into two separate operands, one input operand and one
-write-only output operand. The connection between them is expressed by
-constraints which say they need to be in the same location when the
-instruction executes. You can use the same C expression for both
-operands, or different expressions. For example, here we write the
-(fictitious) @samp{combine} instruction with @code{bar} as its read-only
-source operand and @code{foo} as its read-write destination:
+The input operands need not be lvalues. The compiler cannot check
+whether the operands have data types that are reasonable for the
+instruction being executed. It does not parse the assembler instruction
+template and does not know what it means or even whether it is valid
+assembler input. The extended @code{asm} feature is most often used for
+machine instructions the compiler itself does not know exist. If
+the output expression cannot be directly addressed (for example, it is a
+bit field), your constraint must allow a register. In that case, GNU CC
+will use the register as the output of the @code{asm}, and then store
+that register into the output.
+
+The ordinary output operands must be write-only; GNU CC will assume that
+the values in these operands before the instruction are dead and need
+not be generated. Extended asm supports input-output or read-write
+operands. Use the constraint character @samp{+} to indicate such an
+operand and list it with the output operands.
+
+When the constraints for the read-write operand (or the operand in which
+only some of the bits are to be changed) allows a register, you may, as
+an alternative, logically split its function into two separate operands,
+one input operand and one write-only output operand. The connection
+between them is expressed by constraints which say they need to be in
+the same location when the instruction executes. You can use the same C
+expression for both operands, or different expressions. For example,
+here we write the (fictitious) @samp{combine} instruction with
+@code{bar} as its read-only source operand and @code{foo} as its
+read-write destination:
@example
asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar));
@end example
@noindent
-The constraint @samp{"0"} for operand 1 says that it must occupy the same
-location as operand 0. A digit in constraint is allowed only in an input
-operand, and it must refer to an output operand.
+The constraint @samp{"0"} for operand 1 says that it must occupy the
+same location as operand 0. A digit in constraint is allowed only in an
+input operand and it must refer to an output operand.
Only a digit in the constraint can guarantee that one operand will be in
-the same place as another. The mere fact that @code{foo} is the value of
-both operands is not enough to guarantee that they will be in the same
-place in the generated assembler code. The following would not work:
+the same place as another. The mere fact that @code{foo} is the value
+of both operands is not enough to guarantee that they will be in the
+same place in the generated assembler code. The following would not
+work reliably:
@example
asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar));
@@ -2367,10 +2366,10 @@ register (copying it afterward to @code{foo}'s own address). Of course,
since the register for operand 1 is not even mentioned in the assembler
code, the result will not work, but GNU CC can't tell that.
-Some instructions clobber specific hard registers. To describe this, write
-a third colon after the input operands, followed by the names of the
-clobbered hard registers (given as strings). Here is a realistic example
-for the Vax:
+Some instructions clobber specific hard registers. To describe this,
+write a third colon after the input operands, followed by the names of
+the clobbered hard registers (given as strings). Here is a realistic
+example for the VAX:
@example
asm volatile ("movc3 %0,%1,%2"
@@ -2380,32 +2379,32 @@ asm volatile ("movc3 %0,%1,%2"
@end example
If you refer to a particular hardware register from the assembler code,
-then you will probably have to list the register after the third colon
-to tell the compiler that the register's value is modified. In many
-assemblers, the register names begin with @samp{%}; to produce one
-@samp{%} in the assembler code, you must write @samp{%%} in the input.
-
-If your assembler instruction can alter the condition code register,
-add @samp{cc} to the list of clobbered registers. GNU CC on some
-machines represents the condition codes as a specific hardware
-register; @samp{cc} serves to name this register. On other machines,
-the condition code is handled differently, and specifying @samp{cc}
-has no effect. But it is valid no matter what the machine.
+you will probably have to list the register after the third colon to
+tell the compiler the register's value is modified. In some assemblers,
+the register names begin with @samp{%}; to produce one @samp{%} in the
+assembler code, you must write @samp{%%} in the input.
+
+If your assembler instruction can alter the condition code register, add
+@samp{cc} to the list of clobbered registers. GNU CC on some machines
+represents the condition codes as a specific hardware register;
+@samp{cc} serves to name this register. On other machines, the
+condition code is handled differently, and specifying @samp{cc} has no
+effect. But it is valid no matter what the machine.
If your assembler instruction modifies memory in an unpredictable
-fashion, add @samp{memory} to the list of clobbered registers.
-This will cause GNU CC to not keep memory values cached in
-registers across the assembler instruction.
+fashion, add @samp{memory} to the list of clobbered registers. This
+will cause GNU CC to not keep memory values cached in registers across
+the assembler instruction.
-You can put multiple assembler instructions together in a single @code{asm}
-template, separated either with newlines (written as @samp{\n}) or with
-semicolons if the assembler allows such semicolons. The GNU assembler
-allows semicolons and all Unix assemblers seem to do so. The input
-operands are guaranteed not to use any of the clobbered registers, and
-neither will the output operands' addresses, so you can read and write the
-clobbered registers as many times as you like. Here is an example of
-multiple instructions in a template; it assumes that the subroutine
-@code{_foo} accepts arguments in registers 9 and 10:
+You can put multiple assembler instructions together in a single
+@code{asm} template, separated either with newlines (written as
+@samp{\n}) or with semicolons if the assembler allows such semicolons.
+The GNU assembler allows semicolons and most Unix assemblers seem to do
+so. The input operands are guaranteed not to use any of the clobbered
+registers, and neither will the output operands' addresses, so you can
+read and write the clobbered registers as many times as you like. Here
+is an example of multiple instructions in a template; it assumes the
+subroutine @code{_foo} accepts arguments in registers 9 and 10:
@example
asm ("movl %0,r9;movl %1,r10;call _foo"
@@ -2414,16 +2413,16 @@ asm ("movl %0,r9;movl %1,r10;call _foo"
: "r9", "r10");
@end example
-Unless an output operand has the @samp{&} constraint modifier, GNU CC may
-allocate it in the same register as an unrelated input operand, on the
-assumption that the inputs are consumed before the outputs are produced.
+Unless an output operand has the @samp{&} constraint modifier, GNU CC
+may allocate it in the same register as an unrelated input operand, on
+the assumption the inputs are consumed before the outputs are produced.
This assumption may be false if the assembler code actually consists of
more than one instruction. In such a case, use @samp{&} for each output
-operand that may not overlap an input.
-@xref{Modifiers}.
+operand that may not overlap an input. @xref{Modifiers}.
-If you want to test the condition code produced by an assembler instruction,
-you must include a branch and a label in the @code{asm} construct, as follows:
+If you want to test the condition code produced by an assembler
+instruction, you must include a branch and a label in the @code{asm}
+construct, as follows:
@example
asm ("clr %0;frob %1;beq 0f;mov #1,%0;0:"
@@ -2436,8 +2435,8 @@ This assumes your assembler supports local labels, as the GNU assembler
and most Unix assemblers do.
Speaking of labels, jumps from one @code{asm} to another are not
-supported. The compiler's optimizers do not know about these jumps,
-and therefore they cannot take account of them when deciding how to
+supported. The compiler's optimizers do not know about these jumps, and
+therefore they cannot take account of them when deciding how to
optimize.
@cindex macros containing @code{asm}
@@ -2456,8 +2455,8 @@ Here the variable @code{__arg} is used to make sure that the instruction
operates on a proper @code{double} value, and to accept only those
arguments @code{x} which can convert automatically to a @code{double}.
-Another way to make sure the instruction operates on the correct data type
-is to use a cast in the @code{asm}. This is different from using a
+Another way to make sure the instruction operates on the correct data
+type is to use a cast in the @code{asm}. This is different from using a
variable @code{__arg} in that it converts more different types. For
example, if the desired type were @code{int}, casting the argument to
@code{int} would accept a pointer with no complaint, while assigning the
@@ -2465,27 +2464,40 @@ argument to an @code{int} variable named @code{__arg} would warn about
using a pointer unless the caller explicitly casts it.
If an @code{asm} has output operands, GNU CC assumes for optimization
-purposes that the instruction has no side effects except to change the
-output operands. This does not mean that instructions with a side effect
-cannot be used, but you must be careful, because the compiler may eliminate
-them if the output operands aren't used, or move them out of loops, or
-replace two with one if they constitute a common subexpression. Also, if
-your instruction does have a side effect on a variable that otherwise
-appears not to change, the old value of the variable may be reused later if
-it happens to be found in a register.
+purposes the instruction has no side effects except to change the output
+operands. This does not mean instructions with a side effect cannot be
+used, but you must be careful, because the compiler may eliminate them
+if the output operands aren't used, or move them out of loops, or
+replace two with one if they constitute a common subexpression. Also,
+if your instruction does have a side effect on a variable that otherwise
+appears not to change, the old value of the variable may be reused later
+if it happens to be found in a register.
You can prevent an @code{asm} instruction from being deleted, moved
significantly, or combined, by writing the keyword @code{volatile} after
the @code{asm}. For example:
@example
-#define set_priority(x) \
-asm volatile ("set_priority %0": /* no outputs */ : "g" (x))
-@end example
+#define get_and_set_priority(new) \
+(@{ int __old; \
+ asm volatile ("get_and_set_priority %0, %1": "=g" (__old) : "g" (new)); \
+ __old; @})
+b@end example
@noindent
-An instruction without output operands will not be deleted or moved
-significantly, regardless, unless it is unreachable.
+If you write an @code{asm} instruction with no outputs, GNU CC will know
+the instruction has side-effects and will not delete the instruction or
+move it outside of loops. If the side-effects of your instruction are
+not purely external, but will affect variables in your program in ways
+other than reading the inputs and clobbering the specified registers or
+memory, you should write the @code{volatile} keyword to prevent future
+versions of GNU CC from moving the instruction around within a core
+region.
+
+An @code{asm} instruction without any operands or clobbers (and ``old
+style'' @code{asm}) will not be deleted or moved significantly,
+regardless, unless it is unreachable, the same wasy as if you had
+written a @code{volatile} keyword.
Note that even a volatile @code{asm} instruction can be moved in ways
that appear insignificant to the compiler, such as across jump
diff --git a/gcc/fixincludes b/gcc/fixincludes
index dfe50d592e2..306945051c1 100755
--- a/gcc/fixincludes
+++ b/gcc/fixincludes
@@ -12,6 +12,14 @@ INPUT=${2-${INPUT-/usr/include}}
# Directory in which to store the results.
LIB=${1?"fixincludes: output directory not specified"}
+# Define what target system we're fixing.
+if test -r ./Makefile; then
+ target_canonical="`sed -n -e 's,^target[ ]*=[ ]*\(.*\)$,\1,p' < Makefile`"
+ test -z "${target_canonical}" && target_canonical=unknown
+else
+ target_canonical=unknown
+fi
+
# Define PWDCMD as a command to use to get the working dir
# in the form that we want.
PWDCMD=pwd
@@ -358,6 +366,13 @@ for file in sys/types.h stdlib.h sys/stdtypes.h stddef.h memory.h unistd.h; do
if [ -r ${LIB}/$file ]; then
echo Fixing size_t, ptrdiff_t and wchar_t in $file
sed \
+ -e '/^[ ]*\*[ ]*typedef unsigned int size_t;/N' \
+ -e 's/^\([ ]*\*[ ]*typedef unsigned int size_t;\n[ ]*\*\/\)/\1\
+#ifndef __SIZE_TYPE__\
+#define __SIZE_TYPE__ long unsigned int\
+#endif\
+typedef __SIZE_TYPE__ size_t;\
+/' \
-e '/typedef[ ][ ]*[a-z_][ a-z_]*[ ]size_t/i\
#ifndef __SIZE_TYPE__\
#define __SIZE_TYPE__ long unsigned int\
@@ -1982,6 +1997,7 @@ fi
# Correct the return type for strlen in string.h on Lynx.
# Correct the argument type for ffs in string.h on Alpha OSF/1 V2.0.
# Add missing const for strdup on OSF/1 V3.0.
+# On sysV88 layout is slightly different.
file=string.h
if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"
@@ -2000,6 +2016,8 @@ if [ -r ${LIB}/$file ]; then
-e 's/^\( strncmp()\),\n\( strlen(),\)$/\1;\
extern unsigned int\
\2/'\
+ -e '/^extern int$/N'\
+ -e 's/^extern int\(\n strlen(),\)/extern size_t\1/' \
${LIB}/$file > ${LIB}/${file}.sed
rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
if cmp $file ${LIB}/$file >/dev/null 2>&1; then
@@ -2285,6 +2303,45 @@ do
fi
done
+# libm.a on m88k-motorola-sysv3 contains a stupid optimization for function
+# hypot(), which returns the second argument without even looking at its value
+# if the other is 0.0
+# Another drawback is that fix-header doesn't fix fabs' prototype, and I have
+# no idea why.
+file=math.h
+if [ $target_canonical = m88k-motorola-sysv3 ]; then
+ if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
+ cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"
+ chmod +w ${LIB}/$file 2>/dev/null
+ chmod a+r ${LIB}/$file 2>/dev/null
+ fi
+
+ if [ -r ${LIB}/$file ]; then
+ echo Fixing $file, fabs/hypot definition
+ sed \
+ -e 's/extern double floor(), ceil(), fmod(), fabs();/extern double floor(), ceil(), fmod(), fabs _PARAMS((double));/' \
+ -e '/^extern double hypot();$/a\
+\/* Workaround a stupid Motorola optimization if one\
+ of x or y is 0.0 and the other is negative! *\/\
+#ifdef __STDC__\
+static __inline__ double fake_hypot (double x, double y)\
+#else\
+static __inline__ double fake_hypot (x, y)\
+ double x, y;\
+#endif\
+{\
+ return fabs (hypot (x, y));\
+}\
+#define hypot fake_hypot
+' \
+ ${LIB}/$file > ${LIB}/${file}.sed
+ rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
+ if cmp $file ${LIB}/$file >/dev/null 2>&1; then
+ rm -f ${LIB}/$file
+ fi
+ fi
+fi
+
# math.h on SunOS 4 puts the declaration of matherr before the definition
# of struct exception, so the prototype (added by fixproto) causes havoc.
file=math.h
diff --git a/gcc/flags.h b/gcc/flags.h
index e674227c77a..b7544a97a9f 100644
--- a/gcc/flags.h
+++ b/gcc/flags.h
@@ -349,7 +349,7 @@ extern int flag_function_sections;
the generated assembly code (to make it more readable). This option
is generally only of use to those who actually need to read the
generated assembly code (perhaps while debugging the compiler itself).
- -fverbose-asm is the default. -fno-verbose-asm causes the extra information
+ -fno-verbose-asm, the default, causes the extra information
to not be added and is useful when comparing two assembler files. */
extern int flag_verbose_asm;
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index b5b843f4f26..75290dea448 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -1510,13 +1510,15 @@ fold_convert (t, arg1)
/* Indicate an overflow if (1) ARG1 already overflowed,
or (2) force_fit_type indicates an overflow.
Tell force_fit_type that an overflow has already occurred
- if ARG1 is a too-large unsigned value and T is signed. */
+ if ARG1 is a too-large unsigned value and T is signed.
+ But don't indicate an overflow if converting a pointer. */
TREE_OVERFLOW (t)
= (TREE_OVERFLOW (arg1)
- | force_fit_type (t,
- (TREE_INT_CST_HIGH (arg1) < 0
- & (TREE_UNSIGNED (type)
- < TREE_UNSIGNED (TREE_TYPE (arg1))))));
+ || (force_fit_type (t,
+ (TREE_INT_CST_HIGH (arg1) < 0
+ & (TREE_UNSIGNED (type)
+ < TREE_UNSIGNED (TREE_TYPE (arg1)))))
+ && TREE_CODE (TREE_TYPE (arg1)) != POINTER_TYPE));
TREE_CONSTANT_OVERFLOW (t)
= TREE_OVERFLOW (t) | TREE_CONSTANT_OVERFLOW (arg1);
}
diff --git a/gcc/frame.c b/gcc/frame.c
index 747fb9f1c40..2ab4aac93b4 100644
--- a/gcc/frame.c
+++ b/gcc/frame.c
@@ -501,7 +501,7 @@ execute_cfa_insn (void *p, struct frame_state_internal *state,
/* Called from crtbegin.o to register the unwind info for an object. */
void
-__register_frame (void *begin, struct object *ob)
+__register_frame_info (void *begin, struct object *ob)
{
ob->fde_begin = begin;
@@ -518,7 +518,7 @@ __register_frame (void *begin, struct object *ob)
collect2. */
void
-__register_frame_table (void *begin, struct object *ob)
+__register_frame_info_table (void *begin, struct object *ob)
{
ob->fde_begin = begin;
ob->fde_array = begin;
@@ -533,7 +533,7 @@ __register_frame_table (void *begin, struct object *ob)
/* Called from crtend.o to deregister the unwind info for an object. */
void
-__deregister_frame (void *begin)
+__deregister_frame_info (void *begin)
{
struct object **p = &objects;
diff --git a/gcc/frame.h b/gcc/frame.h
index c1cc7028c2d..7fa40d7af48 100644
--- a/gcc/frame.h
+++ b/gcc/frame.h
@@ -37,11 +37,16 @@ struct object {
/* Called either from crtbegin.o or a static constructor to register the
unwind info for an object or translation unit, respectively. */
-extern void __register_frame (void *, struct object *);
+extern void __register_frame_info (void *, struct object *);
+
+/* Similar, but BEGIN is actually a pointer to a table of unwind entries
+ for different translation units. Called from the file generated by
+ collect2. */
+extern void __register_frame_info_table (void *, struct object *);
/* Called from crtend.o to deregister the unwind info for an object. */
-extern void __deregister_frame (void *);
+extern void __deregister_frame_info (void *);
/* Called from __throw to find the registers to restore for a given
PC_TARGET. The caller should allocate a local variable of `struct
diff --git a/gcc/function.c b/gcc/function.c
index 3b650305d43..05332fe1dae 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -1,5 +1,5 @@
/* Expands front end tree to back end RTL for GNU C-Compiler
- Copyright (C) 1987, 88, 89, 91-96, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1987, 88, 89, 91-97, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -2739,8 +2739,8 @@ purge_addressof_1 (loc, insn, force)
else if (code == MEM && GET_CODE (XEXP (x, 0)) == ADDRESSOF && ! force)
{
rtx sub = XEXP (XEXP (x, 0), 0);
- if (GET_CODE (sub) != REG)
- sub = copy_rtx (sub);
+ if (GET_CODE (sub) == MEM)
+ sub = gen_rtx (MEM, GET_MODE (x), copy_rtx (XEXP (sub, 0)));
if (GET_CODE (sub) == REG && GET_MODE (x) != GET_MODE (sub))
{
if (! BYTES_BIG_ENDIAN && ! WORDS_BIG_ENDIAN)
@@ -4333,7 +4333,9 @@ assign_parms (fndecl, second_time)
emit_move_insn (validize_mem (stack_parm),
validize_mem (entry_parm));
}
- if (flag_check_memory_usage)
+ if (flag_check_memory_usage
+ && entry_parm != stack_parm
+ && promoted_mode != nominal_mode)
{
push_to_sequence (conversion_insns);
emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3,
diff --git a/gcc/gcc.info b/gcc/gcc.info
index a9399168cd5..f2fd3eb99b1 100644
--- a/gcc/gcc.info
+++ b/gcc/gcc.info
@@ -6,8 +6,8 @@ input file gcc.texi.
Published by the Free Software Foundation 59 Temple Place - Suite 330
Boston, MA 02111-1307 USA
- Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997 Free
-Software Foundation, Inc.
+ Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998
+Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
@@ -31,283 +31,283 @@ original English.

Indirect:
-gcc.info-1: 1402
-gcc.info-2: 51248
-gcc.info-3: 97760
-gcc.info-4: 145851
-gcc.info-5: 194951
-gcc.info-6: 230193
-gcc.info-7: 254149
-gcc.info-8: 300160
-gcc.info-9: 348991
-gcc.info-10: 398272
-gcc.info-11: 445892
-gcc.info-12: 495641
-gcc.info-13: 538730
-gcc.info-14: 577260
-gcc.info-15: 626702
-gcc.info-16: 670410
-gcc.info-17: 717774
-gcc.info-18: 755784
-gcc.info-19: 801321
-gcc.info-20: 846541
-gcc.info-21: 896412
-gcc.info-22: 942181
-gcc.info-23: 987231
-gcc.info-24: 1030696
-gcc.info-25: 1077870
-gcc.info-26: 1126709
-gcc.info-27: 1167752
-gcc.info-28: 1192249
+gcc.info-1: 1408
+gcc.info-2: 51254
+gcc.info-3: 97766
+gcc.info-4: 145857
+gcc.info-5: 194957
+gcc.info-6: 230175
+gcc.info-7: 255171
+gcc.info-8: 301381
+gcc.info-9: 350109
+gcc.info-10: 399390
+gcc.info-11: 447644
+gcc.info-12: 497393
+gcc.info-13: 540482
+gcc.info-14: 579012
+gcc.info-15: 628454
+gcc.info-16: 672162
+gcc.info-17: 719526
+gcc.info-18: 757536
+gcc.info-19: 803543
+gcc.info-20: 848763
+gcc.info-21: 898634
+gcc.info-22: 944403
+gcc.info-23: 989453
+gcc.info-24: 1032918
+gcc.info-25: 1080092
+gcc.info-26: 1128931
+gcc.info-27: 1169974
+gcc.info-28: 1194471

Tag Table:
(Indirect)
-Node: Top1402
-Node: G++ and GCC3216
-Node: Invoking GCC5423
-Node: Option Summary8802
-Node: Overall Options21215
-Node: Invoking G++25778
-Node: C Dialect Options27651
-Node: C++ Dialect Options38953
-Node: Warning Options51248
-Node: Debugging Options68621
-Node: Optimize Options85026
-Node: Preprocessor Options97760
-Node: Assembler Options104223
-Node: Link Options104590
-Node: Directory Options109863
-Node: Target Options113728
-Node: Submodel Options117385
-Node: M680x0 Options118837
-Node: VAX Options123767
-Node: SPARC Options124302
-Node: Convex Options134056
-Node: AMD29K Options136237
-Node: ARM Options139462
-Node: MN10300 Options143037
-Node: M32R/D Options143501
-Node: M88K Options145851
-Node: RS/6000 and PowerPC Options153801
-Node: RT Options172678
-Node: MIPS Options174382
-Node: i386 Options182482
-Node: HPPA Options188591
-Node: Intel 960 Options192411
-Node: DEC Alpha Options194951
-Node: Clipper Options203678
-Node: H8/300 Options204077
-Node: SH Options204891
-Node: System V Options205487
-Node: V850 Options206296
-Node: Code Gen Options208281
-Node: Environment Variables219741
-Node: Running Protoize223964
-Node: Installation230193
-Node: Configurations254149
-Node: Other Dir292419
-Node: Cross-Compiler294135
-Node: Steps of Cross295966
-Node: Configure Cross297084
-Node: Tools and Libraries297721
-Node: Cross Runtime300160
-Node: Cross Headers304241
-Node: Build Cross306240
-Node: Sun Install308116
-Node: VMS Install309584
-Node: Collect2319513
-Node: Header Dirs322222
-Node: C Extensions323636
-Node: Statement Exprs326992
-Node: Local Labels328886
-Node: Labels as Values330948
-Node: Nested Functions332812
-Node: Constructing Calls336668
-Node: Naming Types338725
-Node: Typeof339819
-Node: Lvalues341684
-Node: Conditionals344124
-Node: Long Long345015
-Node: Complex346455
-Node: Zero Length348317
-Node: Variable Length348991
-Node: Macro Varargs351516
-Node: Subscripting353619
-Node: Pointer Arith354102
-Node: Initializers354667
-Node: Constructors355132
-Node: Labeled Elements356826
-Node: Case Ranges359455
-Node: Cast to Union360136
-Node: Function Attributes361214
-Node: Function Prototypes376111
-Node: C++ Comments377913
-Node: Dollar Signs378449
-Node: Character Escapes378907
-Node: Alignment379194
-Node: Variable Attributes380666
-Node: Type Attributes389199
-Node: Inline398272
-Node: Extended Asm402149
-Node: Asm Labels412715
-Node: Explicit Reg Vars414034
-Node: Global Reg Vars415282
-Node: Local Reg Vars419847
-Node: Alternate Keywords421439
-Node: Incomplete Enums422841
-Node: Function Names423597
-Node: Return Address424871
-Node: C++ Extensions426891
-Node: Naming Results428125
-Node: Min and Max431439
-Node: Destructors and Goto432879
-Node: C++ Interface433355
-Node: Template Instantiation438589
-Node: C++ Signatures445892
-Node: Gcov450236
-Node: Gcov Intro450759
-Node: Invoking Gcov453440
-Node: Gcov and Optimization459051
-Node: Gcov Data Files460475
-Node: Trouble464045
-Node: Actual Bugs465746
-Node: Installation Problems467015
-Node: Cross-Compiler Problems480806
-Node: Interoperation482277
-Node: External Bugs495641
-Node: Incompatibilities497773
-Node: Fixed Headers506323
-Node: Standard Libraries508665
-Node: Disappointments509912
-Node: C++ Misunderstandings514469
-Node: Static Definitions515116
-Node: Temporaries516170
-Node: Protoize Caveats518374
-Node: Non-bugs522330
-Node: Warnings and Errors531757
-Node: Bugs533527
-Node: Bug Criteria534887
-Node: Bug Lists537317
-Node: Bug Reporting538730
-Node: Sending Patches551148
-Node: Service556535
-Node: Contributing557105
-Node: VMS557941
-Node: Include Files and VMS558339
-Node: Global Declarations562229
-Node: VMS Misc566538
-Node: Portability570864
-Node: Interface572627
-Node: Passes577260
-Node: RTL594603
-Node: RTL Objects596491
-Node: Accessors599535
-Node: Flags604861
-Node: Machine Modes613880
-Node: Constants621514
-Node: Regs and Memory626702
-Node: Arithmetic638755
-Node: Comparisons644653
-Node: Bit Fields648716
-Node: Conversions650128
-Node: RTL Declarations653016
-Node: Side Effects653825
-Node: Incdec666372
-Node: Assembler668888
-Node: Insns670410
-Node: Calls692888
-Node: Sharing695483
-Node: Reading RTL698559
-Node: Machine Desc699498
-Node: Patterns701351
-Node: Example704295
-Node: RTL Template705423
-Node: Output Template717774
-Node: Output Statement721756
-Node: Constraints725469
-Node: Simple Constraints726472
-Node: Multi-Alternative738384
-Node: Class Preferences741220
-Node: Modifiers742100
-Node: Machine Constraints745644
-Node: No Constraints754663
-Node: Standard Names755784
-Node: Pattern Ordering787968
-Node: Dependent Patterns789195
-Node: Jump Patterns792010
-Node: Insn Canonicalizations797826
-Node: Peephole Definitions801321
-Node: Expander Definitions808239
-Node: Insn Splitting815685
-Node: Insn Attributes822700
-Node: Defining Attributes823747
-Node: Expressions825759
-Node: Tagging Insns832067
-Node: Attr Example836430
-Node: Insn Lengths838806
-Node: Constant Attributes842170
-Node: Delay Slots843330
-Node: Function Units846541
-Node: Target Macros852211
-Node: Driver854094
-Node: Run-time Target868392
-Node: Storage Layout874278
-Node: Type Layout889639
-Node: Registers896412
-Node: Register Basics897392
-Node: Allocation Order901429
-Node: Values in Registers902845
-Node: Leaf Functions907471
-Node: Stack Registers909946
-Node: Obsolete Register Macros910779
-Node: Register Classes913362
-Node: Stack and Calling933516
-Node: Frame Layout933971
-Node: Stack Checking938601
-Node: Frame Registers942181
-Node: Elimination946596
-Node: Stack Arguments950852
-Node: Register Arguments957460
-Node: Scalar Return967253
-Node: Aggregate Return971491
-Node: Caller Saves975206
-Node: Function Entry976356
-Node: Profiling987231
-Node: Varargs994312
-Node: Trampolines1001722
-Node: Library Calls1008440
-Node: Addressing Modes1016498
-Node: Condition Code1024497
-Node: Costs1030696
-Node: Sections1039407
-Node: PIC1045590
-Node: Assembler Format1048300
-Node: File Framework1049366
-Node: Data Output1054064
-Node: Uninitialized Data1061258
-Node: Label Output1066664
-Node: Initialization1077870
-Node: Macros for Initialization1084013
-Node: Instruction Output1088610
-Node: Dispatch Tables1096797
-Node: Exception Region Output1099244
-Node: Alignment Output1102238
-Node: Debugging Info1103986
-Node: All Debuggers1104595
-Node: DBX Options1107040
-Node: DBX Hooks1112323
-Node: File Names and DBX1115963
-Node: SDB and DWARF1117936
-Node: Cross-compilation1120143
-Node: Misc1126709
-Node: Config1144873
-Node: Fragments1152314
-Node: Target Fragment1152913
-Node: Host Fragment1157079
-Node: Funding1157681
-Node: Look and Feel1160175
-Node: Copying1167752
-Node: Contributors1186944
-Node: Index1192249
+Node: Top1408
+Node: G++ and GCC3222
+Node: Invoking GCC5429
+Node: Option Summary8808
+Node: Overall Options21221
+Node: Invoking G++25784
+Node: C Dialect Options27657
+Node: C++ Dialect Options38959
+Node: Warning Options51254
+Node: Debugging Options68627
+Node: Optimize Options85032
+Node: Preprocessor Options97766
+Node: Assembler Options104229
+Node: Link Options104596
+Node: Directory Options109869
+Node: Target Options113734
+Node: Submodel Options117391
+Node: M680x0 Options118843
+Node: VAX Options123773
+Node: SPARC Options124308
+Node: Convex Options134062
+Node: AMD29K Options136243
+Node: ARM Options139468
+Node: MN10300 Options143043
+Node: M32R/D Options143507
+Node: M88K Options145857
+Node: RS/6000 and PowerPC Options153807
+Node: RT Options172684
+Node: MIPS Options174388
+Node: i386 Options182488
+Node: HPPA Options188597
+Node: Intel 960 Options192417
+Node: DEC Alpha Options194957
+Node: Clipper Options203684
+Node: H8/300 Options204083
+Node: SH Options204897
+Node: System V Options205493
+Node: V850 Options206302
+Node: Code Gen Options208287
+Node: Environment Variables219723
+Node: Running Protoize223946
+Node: Installation230175
+Node: Configurations255171
+Node: Other Dir293640
+Node: Cross-Compiler295356
+Node: Steps of Cross297187
+Node: Configure Cross298305
+Node: Tools and Libraries298942
+Node: Cross Runtime301381
+Node: Cross Headers305462
+Node: Build Cross307461
+Node: Sun Install309337
+Node: VMS Install310805
+Node: Collect2320735
+Node: Header Dirs323444
+Node: C Extensions324865
+Node: Statement Exprs328221
+Node: Local Labels330115
+Node: Labels as Values332177
+Node: Nested Functions334041
+Node: Constructing Calls337786
+Node: Naming Types339843
+Node: Typeof340937
+Node: Lvalues342802
+Node: Conditionals345242
+Node: Long Long346133
+Node: Complex347573
+Node: Zero Length349435
+Node: Variable Length350109
+Node: Macro Varargs352634
+Node: Subscripting354737
+Node: Pointer Arith355220
+Node: Initializers355785
+Node: Constructors356250
+Node: Labeled Elements357944
+Node: Case Ranges360573
+Node: Cast to Union361254
+Node: Function Attributes362332
+Node: Function Prototypes377229
+Node: C++ Comments379031
+Node: Dollar Signs379567
+Node: Character Escapes380025
+Node: Alignment380312
+Node: Variable Attributes381784
+Node: Type Attributes390317
+Node: Inline399390
+Node: Extended Asm403267
+Node: Asm Labels414467
+Node: Explicit Reg Vars415786
+Node: Global Reg Vars417034
+Node: Local Reg Vars421599
+Node: Alternate Keywords423191
+Node: Incomplete Enums424593
+Node: Function Names425349
+Node: Return Address426623
+Node: C++ Extensions428643
+Node: Naming Results429877
+Node: Min and Max433191
+Node: Destructors and Goto434631
+Node: C++ Interface435107
+Node: Template Instantiation440341
+Node: C++ Signatures447644
+Node: Gcov451988
+Node: Gcov Intro452511
+Node: Invoking Gcov455192
+Node: Gcov and Optimization460803
+Node: Gcov Data Files462227
+Node: Trouble465797
+Node: Actual Bugs467498
+Node: Installation Problems468767
+Node: Cross-Compiler Problems482558
+Node: Interoperation484029
+Node: External Bugs497393
+Node: Incompatibilities499525
+Node: Fixed Headers508075
+Node: Standard Libraries510417
+Node: Disappointments511664
+Node: C++ Misunderstandings516221
+Node: Static Definitions516868
+Node: Temporaries517922
+Node: Protoize Caveats520126
+Node: Non-bugs524082
+Node: Warnings and Errors533509
+Node: Bugs535279
+Node: Bug Criteria536639
+Node: Bug Lists539069
+Node: Bug Reporting540482
+Node: Sending Patches552900
+Node: Service558287
+Node: Contributing558857
+Node: VMS559693
+Node: Include Files and VMS560091
+Node: Global Declarations563981
+Node: VMS Misc568290
+Node: Portability572616
+Node: Interface574379
+Node: Passes579012
+Node: RTL596355
+Node: RTL Objects598243
+Node: Accessors601287
+Node: Flags606613
+Node: Machine Modes615632
+Node: Constants623266
+Node: Regs and Memory628454
+Node: Arithmetic640507
+Node: Comparisons646405
+Node: Bit Fields650468
+Node: Conversions651880
+Node: RTL Declarations654768
+Node: Side Effects655577
+Node: Incdec668124
+Node: Assembler670640
+Node: Insns672162
+Node: Calls694640
+Node: Sharing697235
+Node: Reading RTL700311
+Node: Machine Desc701250
+Node: Patterns703103
+Node: Example706047
+Node: RTL Template707175
+Node: Output Template719526
+Node: Output Statement723508
+Node: Constraints727221
+Node: Simple Constraints728224
+Node: Multi-Alternative740136
+Node: Class Preferences742972
+Node: Modifiers743852
+Node: Machine Constraints747396
+Node: No Constraints756415
+Node: Standard Names757536
+Node: Pattern Ordering790190
+Node: Dependent Patterns791417
+Node: Jump Patterns794232
+Node: Insn Canonicalizations800048
+Node: Peephole Definitions803543
+Node: Expander Definitions810461
+Node: Insn Splitting817907
+Node: Insn Attributes824922
+Node: Defining Attributes825969
+Node: Expressions827981
+Node: Tagging Insns834289
+Node: Attr Example838652
+Node: Insn Lengths841028
+Node: Constant Attributes844392
+Node: Delay Slots845552
+Node: Function Units848763
+Node: Target Macros854433
+Node: Driver856316
+Node: Run-time Target870614
+Node: Storage Layout876500
+Node: Type Layout891861
+Node: Registers898634
+Node: Register Basics899614
+Node: Allocation Order903651
+Node: Values in Registers905067
+Node: Leaf Functions909693
+Node: Stack Registers912168
+Node: Obsolete Register Macros913001
+Node: Register Classes915584
+Node: Stack and Calling935738
+Node: Frame Layout936193
+Node: Stack Checking940823
+Node: Frame Registers944403
+Node: Elimination948818
+Node: Stack Arguments953074
+Node: Register Arguments959682
+Node: Scalar Return969475
+Node: Aggregate Return973713
+Node: Caller Saves977428
+Node: Function Entry978578
+Node: Profiling989453
+Node: Varargs996534
+Node: Trampolines1003944
+Node: Library Calls1010662
+Node: Addressing Modes1018720
+Node: Condition Code1026719
+Node: Costs1032918
+Node: Sections1041629
+Node: PIC1047812
+Node: Assembler Format1050522
+Node: File Framework1051588
+Node: Data Output1056286
+Node: Uninitialized Data1063480
+Node: Label Output1068886
+Node: Initialization1080092
+Node: Macros for Initialization1086235
+Node: Instruction Output1090832
+Node: Dispatch Tables1099019
+Node: Exception Region Output1101466
+Node: Alignment Output1104460
+Node: Debugging Info1106208
+Node: All Debuggers1106817
+Node: DBX Options1109262
+Node: DBX Hooks1114545
+Node: File Names and DBX1118185
+Node: SDB and DWARF1120158
+Node: Cross-compilation1122365
+Node: Misc1128931
+Node: Config1147095
+Node: Fragments1154536
+Node: Target Fragment1155135
+Node: Host Fragment1159301
+Node: Funding1159903
+Node: Look and Feel1162397
+Node: Copying1169974
+Node: Contributors1189166
+Node: Index1194471

End Tag Table
diff --git a/gcc/gcc.info-1 b/gcc/gcc.info-1
index d0ba9a463c5..55703009808 100644
--- a/gcc/gcc.info-1
+++ b/gcc/gcc.info-1
@@ -6,8 +6,8 @@ input file gcc.texi.
Published by the Free Software Foundation 59 Temple Place - Suite 330
Boston, MA 02111-1307 USA
- Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997 Free
-Software Foundation, Inc.
+ Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998
+Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
diff --git a/gcc/gcc.info-10 b/gcc/gcc.info-10
index a7a7c0cfa11..6319e7cae92 100644
--- a/gcc/gcc.info-10
+++ b/gcc/gcc.info-10
@@ -6,8 +6,8 @@ input file gcc.texi.
Published by the Free Software Foundation 59 Temple Place - Suite 330
Boston, MA 02111-1307 USA
- Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997 Free
-Software Foundation, Inc.
+ Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998
+Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
@@ -114,9 +114,9 @@ File: gcc.info, Node: Extended Asm, Next: Asm Labels, Prev: Inline, Up: C Ex
Assembler Instructions with C Expression Operands
=================================================
- In an assembler instruction using `asm', you can now specify the
-operands of the instruction using C expressions. This means no more
-guessing which registers or memory locations will contain the data you
+ In an assembler instruction using `asm', you can specify the
+operands of the instruction using C expressions. This means you need
+not guess which registers or memory locations will contain the data you
want to use.
You must specify an assembler instruction template much like what
@@ -134,35 +134,35 @@ in `=f' indicates that the operand is an output; all output operands'
constraints must use `='. The constraints use the same language used
in the machine description (*note Constraints::.).
- Each operand is described by an operand-constraint string followed
-by the C expression in parentheses. A colon separates the assembler
-template from the first output operand, and another separates the last
-output operand from the first input, if any. Commas separate output
-operands and separate inputs. The total number of operands is limited
-to ten or to the maximum number of operands in any instruction pattern
-in the machine description, whichever is greater.
+ Each operand is described by an operand-constraint string followed by
+the C expression in parentheses. A colon separates the assembler
+template from the first output operand and another separates the last
+output operand from the first input, if any. Commas separate the
+operands within each group. The total number of operands is limited to
+ten or to the maximum number of operands in any instruction pattern in
+the machine description, whichever is greater.
- If there are no output operands, and there are input operands, then
-there must be two consecutive colons surrounding the place where the
-output operands would go.
+ If there are no output operands but there are input operands, you
+must place two consecutive colons surrounding the place where the output
+operands would go.
Output operand expressions must be lvalues; the compiler can check
this. The input operands need not be lvalues. The compiler cannot
check whether the operands have data types that are reasonable for the
-instruction being executed. It does not parse the assembler
-instruction template and does not know what it means, or whether it is
-valid assembler input. The extended `asm' feature is most often used
-for machine instructions that the compiler itself does not know exist.
-If the output expression cannot be directly addressed (for example, it
-is a bit field), your constraint must allow a register. In that case,
-GNU CC will use the register as the output of the `asm', and then store
-that register into the output.
+instruction being executed. It does not parse the assembler instruction
+template and does not know what it means or even whether it is valid
+assembler input. The extended `asm' feature is most often used for
+machine instructions the compiler itself does not know exist. If the
+output expression cannot be directly addressed (for example, it is a
+bit field), your constraint must allow a register. In that case, GNU CC
+will use the register as the output of the `asm', and then store that
+register into the output.
The ordinary output operands must be write-only; GNU CC will assume
that the values in these operands before the instruction are dead and
-need not be generated. Extended asm supports input-output or
-read-write operands. Use the constraint character `+' to indicate such
-an operand and list it with the output operands.
+need not be generated. Extended asm supports input-output or read-write
+operands. Use the constraint character `+' to indicate such an operand
+and list it with the output operands.
When the constraints for the read-write operand (or the operand in
which only some of the bits are to be changed) allows a register, you
@@ -179,13 +179,13 @@ destination:
The constraint `"0"' for operand 1 says that it must occupy the same
location as operand 0. A digit in constraint is allowed only in an
-input operand, and it must refer to an output operand.
+input operand and it must refer to an output operand.
Only a digit in the constraint can guarantee that one operand will
be in the same place as another. The mere fact that `foo' is the value
of both operands is not enough to guarantee that they will be in the
same place in the generated assembler code. The following would not
-work:
+work reliably:
asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar));
@@ -197,10 +197,10 @@ a different register (copying it afterward to `foo''s own address). Of
course, since the register for operand 1 is not even mentioned in the
assembler code, the result will not work, but GNU CC can't tell that.
- Some instructions clobber specific hard registers. To describe
-this, write a third colon after the input operands, followed by the
-names of the clobbered hard registers (given as strings). Here is a
-realistic example for the Vax:
+ Some instructions clobber specific hard registers. To describe this,
+write a third colon after the input operands, followed by the names of
+the clobbered hard registers (given as strings). Here is a realistic
+example for the VAX:
asm volatile ("movc3 %0,%1,%2"
: /* no outputs */
@@ -208,10 +208,10 @@ realistic example for the Vax:
: "r0", "r1", "r2", "r3", "r4", "r5");
If you refer to a particular hardware register from the assembler
-code, then you will probably have to list the register after the third
-colon to tell the compiler that the register's value is modified. In
-many assemblers, the register names begin with `%'; to produce one `%'
-in the assembler code, you must write `%%' in the input.
+code, you will probably have to list the register after the third colon
+to tell the compiler the register's value is modified. In some
+assemblers, the register names begin with `%'; to produce one `%' in the
+assembler code, you must write `%%' in the input.
If your assembler instruction can alter the condition code register,
add `cc' to the list of clobbered registers. GNU CC on some machines
@@ -226,14 +226,14 @@ cause GNU CC to not keep memory values cached in registers across the
assembler instruction.
You can put multiple assembler instructions together in a single
-`asm' template, separated either with newlines (written as `\n') or with
-semicolons if the assembler allows such semicolons. The GNU assembler
-allows semicolons and all Unix assemblers seem to do so. The input
-operands are guaranteed not to use any of the clobbered registers, and
-neither will the output operands' addresses, so you can read and write
-the clobbered registers as many times as you like. Here is an example
-of multiple instructions in a template; it assumes that the subroutine
-`_foo' accepts arguments in registers 9 and 10:
+`asm' template, separated either with newlines (written as `\n') or
+with semicolons if the assembler allows such semicolons. The GNU
+assembler allows semicolons and most Unix assemblers seem to do so.
+The input operands are guaranteed not to use any of the clobbered
+registers, and neither will the output operands' addresses, so you can
+read and write the clobbered registers as many times as you like. Here
+is an example of multiple instructions in a template; it assumes the
+subroutine `_foo' accepts arguments in registers 9 and 10:
asm ("movl %0,r9;movl %1,r10;call _foo"
: /* no outputs */
@@ -242,7 +242,7 @@ of multiple instructions in a template; it assumes that the subroutine
Unless an output operand has the `&' constraint modifier, GNU CC may
allocate it in the same register as an unrelated input operand, on the
-assumption that the inputs are consumed before the outputs are produced.
+assumption the inputs are consumed before the outputs are produced.
This assumption may be false if the assembler code actually consists of
more than one instruction. In such a case, use `&' for each output
operand that may not overlap an input. *Note Modifiers::.
@@ -259,8 +259,8 @@ This assumes your assembler supports local labels, as the GNU assembler
and most Unix assemblers do.
Speaking of labels, jumps from one `asm' to another are not
-supported. The compiler's optimizers do not know about these jumps,
-and therefore they cannot take account of them when deciding how to
+supported. The compiler's optimizers do not know about these jumps, and
+therefore they cannot take account of them when deciding how to
optimize.
Usually the most convenient way to use these `asm' instructions is to
@@ -275,8 +275,8 @@ Here the variable `__arg' is used to make sure that the instruction
operates on a proper `double' value, and to accept only those arguments
`x' which can convert automatically to a `double'.
- Another way to make sure the instruction operates on the correct
-data type is to use a cast in the `asm'. This is different from using a
+ Another way to make sure the instruction operates on the correct data
+type is to use a cast in the `asm'. This is different from using a
variable `__arg' in that it converts more different types. For
example, if the desired type were `int', casting the argument to `int'
would accept a pointer with no complaint, while assigning the argument
@@ -284,24 +284,38 @@ to an `int' variable named `__arg' would warn about using a pointer
unless the caller explicitly casts it.
If an `asm' has output operands, GNU CC assumes for optimization
-purposes that the instruction has no side effects except to change the
-output operands. This does not mean that instructions with a side
-effect cannot be used, but you must be careful, because the compiler
-may eliminate them if the output operands aren't used, or move them out
-of loops, or replace two with one if they constitute a common
-subexpression. Also, if your instruction does have a side effect on a
-variable that otherwise appears not to change, the old value of the
-variable may be reused later if it happens to be found in a register.
+purposes the instruction has no side effects except to change the output
+operands. This does not mean instructions with a side effect cannot be
+used, but you must be careful, because the compiler may eliminate them
+if the output operands aren't used, or move them out of loops, or
+replace two with one if they constitute a common subexpression. Also,
+if your instruction does have a side effect on a variable that otherwise
+appears not to change, the old value of the variable may be reused later
+if it happens to be found in a register.
You can prevent an `asm' instruction from being deleted, moved
significantly, or combined, by writing the keyword `volatile' after the
`asm'. For example:
- #define set_priority(x) \
- asm volatile ("set_priority %0": /* no outputs */ : "g" (x))
-
-An instruction without output operands will not be deleted or moved
-significantly, regardless, unless it is unreachable.
+ #define get_and_set_priority(new) \
+ ({ int __old; \
+ asm volatile ("get_and_set_priority %0, %1": "=g" (__old) : "g" (new)); \
+ __old; })
+ b
+
+If you write an `asm' instruction with no outputs, GNU CC will know the
+instruction has side-effects and will not delete the instruction or
+move it outside of loops. If the side-effects of your instruction are
+not purely external, but will affect variables in your program in ways
+other than reading the inputs and clobbering the specified registers or
+memory, you should write the `volatile' keyword to prevent future
+versions of GNU CC from moving the instruction around within a core
+region.
+
+ An `asm' instruction without any operands or clobbers (and "old
+style" `asm') will not be deleted or moved significantly, regardless,
+unless it is unreachable, the same wasy as if you had written a
+`volatile' keyword.
Note that even a volatile `asm' instruction can be moved in ways
that appear insignificant to the compiler, such as across jump
diff --git a/gcc/gcc.info-11 b/gcc/gcc.info-11
index 4d628441928..0a8e94b40c2 100644
--- a/gcc/gcc.info-11
+++ b/gcc/gcc.info-11
@@ -6,8 +6,8 @@ input file gcc.texi.
Published by the Free Software Foundation 59 Temple Place - Suite 330
Boston, MA 02111-1307 USA
- Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997 Free
-Software Foundation, Inc.
+ Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998
+Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
diff --git a/gcc/gcc.info-12 b/gcc/gcc.info-12
index 7cc8309c09c..c2bff477a57 100644
--- a/gcc/gcc.info-12
+++ b/gcc/gcc.info-12
@@ -6,8 +6,8 @@ input file gcc.texi.
Published by the Free Software Foundation 59 Temple Place - Suite 330
Boston, MA 02111-1307 USA
- Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997 Free
-Software Foundation, Inc.
+ Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998
+Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
diff --git a/gcc/gcc.info-13 b/gcc/gcc.info-13
index baeaa8a80fe..62b571f6cbd 100644
--- a/gcc/gcc.info-13
+++ b/gcc/gcc.info-13
@@ -6,8 +6,8 @@ input file gcc.texi.
Published by the Free Software Foundation 59 Temple Place - Suite 330
Boston, MA 02111-1307 USA
- Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997 Free
-Software Foundation, Inc.
+ Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998
+Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
diff --git a/gcc/gcc.info-14 b/gcc/gcc.info-14
index c7bf8502727..a21fb4d5f64 100644
--- a/gcc/gcc.info-14
+++ b/gcc/gcc.info-14
@@ -6,8 +6,8 @@ input file gcc.texi.
Published by the Free Software Foundation 59 Temple Place - Suite 330
Boston, MA 02111-1307 USA
- Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997 Free
-Software Foundation, Inc.
+ Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998
+Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
diff --git a/gcc/gcc.info-15 b/gcc/gcc.info-15
index ef51ab57459..58bf4e59b9f 100644
--- a/gcc/gcc.info-15
+++ b/gcc/gcc.info-15
@@ -6,8 +6,8 @@ input file gcc.texi.
Published by the Free Software Foundation 59 Temple Place - Suite 330
Boston, MA 02111-1307 USA
- Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997 Free
-Software Foundation, Inc.
+ Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998
+Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
diff --git a/gcc/gcc.info-16 b/gcc/gcc.info-16
index ab7aa3c8d03..46f8f37bca1 100644
--- a/gcc/gcc.info-16
+++ b/gcc/gcc.info-16
@@ -6,8 +6,8 @@ input file gcc.texi.
Published by the Free Software Foundation 59 Temple Place - Suite 330
Boston, MA 02111-1307 USA
- Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997 Free
-Software Foundation, Inc.
+ Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998
+Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
diff --git a/gcc/gcc.info-17 b/gcc/gcc.info-17
index ec0d511435c..a660acdaab9 100644
--- a/gcc/gcc.info-17
+++ b/gcc/gcc.info-17
@@ -6,8 +6,8 @@ input file gcc.texi.
Published by the Free Software Foundation 59 Temple Place - Suite 330
Boston, MA 02111-1307 USA
- Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997 Free
-Software Foundation, Inc.
+ Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998
+Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
diff --git a/gcc/gcc.info-18 b/gcc/gcc.info-18
index 2d5443b054a..1d79136bd12 100644
--- a/gcc/gcc.info-18
+++ b/gcc/gcc.info-18
@@ -6,8 +6,8 @@ input file gcc.texi.
Published by the Free Software Foundation 59 Temple Place - Suite 330
Boston, MA 02111-1307 USA
- Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997 Free
-Software Foundation, Inc.
+ Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998
+Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
@@ -737,6 +737,15 @@ pattern in to accomplish a certain task.
control flow is branched to the handler of an exception. There
are no arguments.
+`builtin_setjmp_receiver'
+ This pattern, if defined, contains code needed at the site of an
+ builtin setjmp that isn't needed at the site of a nonlocal goto.
+ You will not normally need to define this pattern. A typical
+ reason why you might need this pattern is if some value, such as a
+ pointer to a global table, must be restored. This pattern is
+ called immediate after the call to `__dummy' has been emitted.
+ There are no arguments.
+

File: gcc.info, Node: Pattern Ordering, Next: Dependent Patterns, Prev: Standard Names, Up: Machine Desc
diff --git a/gcc/gcc.info-19 b/gcc/gcc.info-19
index 3ba2b75ada7..ed10e534944 100644
--- a/gcc/gcc.info-19
+++ b/gcc/gcc.info-19
@@ -6,8 +6,8 @@ input file gcc.texi.
Published by the Free Software Foundation 59 Temple Place - Suite 330
Boston, MA 02111-1307 USA
- Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997 Free
-Software Foundation, Inc.
+ Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998
+Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
diff --git a/gcc/gcc.info-2 b/gcc/gcc.info-2
index 6eee0745a0b..1713199b4cf 100644
--- a/gcc/gcc.info-2
+++ b/gcc/gcc.info-2
@@ -6,8 +6,8 @@ input file gcc.texi.
Published by the Free Software Foundation 59 Temple Place - Suite 330
Boston, MA 02111-1307 USA
- Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997 Free
-Software Foundation, Inc.
+ Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998
+Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
diff --git a/gcc/gcc.info-20 b/gcc/gcc.info-20
index cf674a47b20..c03cb3d40a8 100644
--- a/gcc/gcc.info-20
+++ b/gcc/gcc.info-20
@@ -6,8 +6,8 @@ input file gcc.texi.
Published by the Free Software Foundation 59 Temple Place - Suite 330
Boston, MA 02111-1307 USA
- Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997 Free
-Software Foundation, Inc.
+ Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998
+Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
diff --git a/gcc/gcc.info-21 b/gcc/gcc.info-21
index 4802c2f5843..82c474998cc 100644
--- a/gcc/gcc.info-21
+++ b/gcc/gcc.info-21
@@ -6,8 +6,8 @@ input file gcc.texi.
Published by the Free Software Foundation 59 Temple Place - Suite 330
Boston, MA 02111-1307 USA
- Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997 Free
-Software Foundation, Inc.
+ Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998
+Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
diff --git a/gcc/gcc.info-22 b/gcc/gcc.info-22
index 686333944da..e9a5f4e9af4 100644
--- a/gcc/gcc.info-22
+++ b/gcc/gcc.info-22
@@ -6,8 +6,8 @@ input file gcc.texi.
Published by the Free Software Foundation 59 Temple Place - Suite 330
Boston, MA 02111-1307 USA
- Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997 Free
-Software Foundation, Inc.
+ Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998
+Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
diff --git a/gcc/gcc.info-23 b/gcc/gcc.info-23
index 85059f588dc..f3dedd952a1 100644
--- a/gcc/gcc.info-23
+++ b/gcc/gcc.info-23
@@ -6,8 +6,8 @@ input file gcc.texi.
Published by the Free Software Foundation 59 Temple Place - Suite 330
Boston, MA 02111-1307 USA
- Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997 Free
-Software Foundation, Inc.
+ Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998
+Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
diff --git a/gcc/gcc.info-24 b/gcc/gcc.info-24
index 6b790594a5c..af10f0b1719 100644
--- a/gcc/gcc.info-24
+++ b/gcc/gcc.info-24
@@ -6,8 +6,8 @@ input file gcc.texi.
Published by the Free Software Foundation 59 Temple Place - Suite 330
Boston, MA 02111-1307 USA
- Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997 Free
-Software Foundation, Inc.
+ Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998
+Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
diff --git a/gcc/gcc.info-25 b/gcc/gcc.info-25
index fc5e5a7655b..699add63930 100644
--- a/gcc/gcc.info-25
+++ b/gcc/gcc.info-25
@@ -6,8 +6,8 @@ input file gcc.texi.
Published by the Free Software Foundation 59 Temple Place - Suite 330
Boston, MA 02111-1307 USA
- Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997 Free
-Software Foundation, Inc.
+ Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998
+Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
diff --git a/gcc/gcc.info-26 b/gcc/gcc.info-26
index 7af5d13a51a..340acc63b37 100644
--- a/gcc/gcc.info-26
+++ b/gcc/gcc.info-26
@@ -6,8 +6,8 @@ input file gcc.texi.
Published by the Free Software Foundation 59 Temple Place - Suite 330
Boston, MA 02111-1307 USA
- Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997 Free
-Software Foundation, Inc.
+ Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998
+Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
diff --git a/gcc/gcc.info-27 b/gcc/gcc.info-27
index d486a64c257..8972d3833f9 100644
--- a/gcc/gcc.info-27
+++ b/gcc/gcc.info-27
@@ -6,8 +6,8 @@ input file gcc.texi.
Published by the Free Software Foundation 59 Temple Place - Suite 330
Boston, MA 02111-1307 USA
- Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997 Free
-Software Foundation, Inc.
+ Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998
+Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
diff --git a/gcc/gcc.info-28 b/gcc/gcc.info-28
index 7cd787bdb69..e21dacfb3c5 100644
--- a/gcc/gcc.info-28
+++ b/gcc/gcc.info-28
@@ -6,8 +6,8 @@ input file gcc.texi.
Published by the Free Software Foundation 59 Temple Place - Suite 330
Boston, MA 02111-1307 USA
- Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997 Free
-Software Foundation, Inc.
+ Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998
+Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
@@ -301,6 +301,7 @@ Index
* bugs: Bugs.
* bugs, known: Trouble.
* builtin functions: C Dialect Options.
+* builtin_setjmp_receiver instruction pattern: Standard Names.
* byte writes (29k): AMD29K Options.
* byte_mode: Machine Modes.
* BYTES_BIG_ENDIAN: Storage Layout.
@@ -322,6 +323,7 @@ Index
* C++ named return value: Naming Results.
* C++ options, command line: C++ Dialect Options.
* C++ pragmas, effect on inlining: C++ Interface.
+* C++ runtime library: Installation.
* C++ signatures: C++ Signatures.
* C++ source file suffixes: Invoking G++.
* C++ static data, declaring and defining: Static Definitions.
@@ -1056,6 +1058,7 @@ Index
* Libraries: Link Options.
* library subroutine names: Library Calls.
* LIBRARY_PATH: Environment Variables.
+* libstdc++: Installation.
* LIMIT_RELOAD_CLASS: Register Classes.
* link options: Link Options.
* LINK_LIBGCC_SPECIAL: Driver.
diff --git a/gcc/gcc.info-3 b/gcc/gcc.info-3
index e6e3571a07e..6bbdd8382ad 100644
--- a/gcc/gcc.info-3
+++ b/gcc/gcc.info-3
@@ -6,8 +6,8 @@ input file gcc.texi.
Published by the Free Software Foundation 59 Temple Place - Suite 330
Boston, MA 02111-1307 USA
- Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997 Free
-Software Foundation, Inc.
+ Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998
+Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
diff --git a/gcc/gcc.info-4 b/gcc/gcc.info-4
index eba68a9b16f..c03b49fba61 100644
--- a/gcc/gcc.info-4
+++ b/gcc/gcc.info-4
@@ -6,8 +6,8 @@ input file gcc.texi.
Published by the Free Software Foundation 59 Temple Place - Suite 330
Boston, MA 02111-1307 USA
- Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997 Free
-Software Foundation, Inc.
+ Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998
+Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
diff --git a/gcc/gcc.info-5 b/gcc/gcc.info-5
index 7cf701f17af..7dc059458df 100644
--- a/gcc/gcc.info-5
+++ b/gcc/gcc.info-5
@@ -6,8 +6,8 @@ input file gcc.texi.
Published by the Free Software Foundation 59 Temple Place - Suite 330
Boston, MA 02111-1307 USA
- Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997 Free
-Software Foundation, Inc.
+ Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998
+Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
@@ -504,9 +504,8 @@ the other form by either removing `no-' or adding it.
those who actually need to read the generated assembly code
(perhaps while debugging the compiler itself).
- `-fverbose-asm' is the default. `-fno-verbose-asm' causes the
- extra information to be omitted and is useful when comparing two
- assembler files.
+ `-fno-verbose-asm', the default, causes the extra information to
+ be omitted and is useful when comparing two assembler files.
`-fvolatile'
Consider all memory references through pointers to be volatile.
diff --git a/gcc/gcc.info-6 b/gcc/gcc.info-6
index e8e391957c8..303e5f1e91c 100644
--- a/gcc/gcc.info-6
+++ b/gcc/gcc.info-6
@@ -6,8 +6,8 @@ input file gcc.texi.
Published by the Free Software Foundation 59 Temple Place - Suite 330
Boston, MA 02111-1307 USA
- Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997 Free
-Software Foundation, Inc.
+ Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998
+Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
@@ -200,7 +200,7 @@ and includes all the necessary compilation tools and libraries.
`--nfp' currently has no effect, though perhaps there are
other systems where it could usefully make a difference.
- `--enable-objcthreads=TYPE'
+ `--enable-threads=TYPE'
Certain systems, notably Linux-based GNU systems, can't be
relied on to supply a threads facility for the Objective C
runtime and so will default to single-threaded runtime. They
@@ -488,11 +488,39 @@ and includes all the necessary compilation tools and libraries.
some other compiler.)
16. If you're going to use C++, it's likely that you need to also
- install the libg++ distribution. It should be available from the
- same place where you got the GNU C distribution. Just as GNU C
- does not distribute a C runtime library, it also does not include
- a C++ run-time library. All I/O functionality, special class
- libraries, etc., are available in the libg++ distribution.
+ install a C++ runtime library. Just as GNU C does not distribute
+ a C runtime library, it also does not include a C++ runtime
+ library. All I/O functionality, special class libraries, etc., are
+ provided by the C++ runtime library.
+
+ Here's one way to build and install a C++ runtime library for GNU
+ CC:
+
+ * Build and install GNU CC, so that invoking `gcc' obtains the
+ GNU CC that was just built.
+
+ * Obtain a copy of a compatible `libstdc++' distribution. For
+ example, the `libstdc++-2.8.0.tar.gz' distribution should be
+ compatible with GCC 2.8.0. GCC distributors normally
+ distribute `libstdc++' as well.
+
+ * Set the `CXX' environment variable to `gcc' while running the
+ `libstdc++' distribution's `configure' command. Use the same
+ `configure' options that you used when you invoked GCC's
+ `configure' command.
+
+ * Invoke `make' to build the C++ runtime.
+
+ * Invoke `make install' to install the C++ runtime.
+
+ To summarize, after building and installing GNU CC, invoke the
+ following shell commands in the topmost directory of the C++
+ library distribution. For CONFIGURE-OPTIONS, use the same options
+ that you used to configure GNU CC.
+
+ $ CXX=gcc ./configure CONFIGURE-OPTIONS
+ $ make
+ $ make install
17. GNU CC includes a runtime library for Objective-C because it is an
integral part of the language. You can find the files associated
diff --git a/gcc/gcc.info-7 b/gcc/gcc.info-7
index fff92a8467d..a96368614d0 100644
--- a/gcc/gcc.info-7
+++ b/gcc/gcc.info-7
@@ -6,8 +6,8 @@ input file gcc.texi.
Published by the Free Software Foundation 59 Temple Place - Suite 330
Boston, MA 02111-1307 USA
- Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997 Free
-Software Foundation, Inc.
+ Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998
+Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
@@ -220,7 +220,11 @@ special things you must know:
you must specify the version number during configuration. Note
that the assembler shipped with RISC iX does not support stabs
debugging information; a new version of the assembler, with stabs
- support included, is now available from Acorn.
+ support included, is now available from Acorn and via ftp
+ `ftp.acorn.com:/pub/riscix/as+xterm.tar.Z'. To enable stabs
+ debugging, pass `--with-gnu-as' to configure.
+
+ You will need to install GNU `sed' before you can run configure.
`a29k'
AMD Am29k-family processors. These are normally used in embedded
diff --git a/gcc/gcc.info-8 b/gcc/gcc.info-8
index 3f490970f76..3ca626c4ae7 100644
--- a/gcc/gcc.info-8
+++ b/gcc/gcc.info-8
@@ -6,8 +6,8 @@ input file gcc.texi.
Published by the Free Software Foundation 59 Temple Place - Suite 330
Boston, MA 02111-1307 USA
- Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997 Free
-Software Foundation, Inc.
+ Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998
+Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
@@ -290,8 +290,8 @@ perform the following steps:
disk:[gcc.gxx_include.] gnu_gxx_include
with the appropriate disk and directory name. If you are going to
- be using libg++, this is where the libg++ install procedure will
- install the libg++ header files.
+ be using a C++ runtime library, this is where its install
+ procedure will install its header files.
2. Obtain the file `gcc-cc1plus.exe', and place this in the same
directory that `gcc-cc1.exe' is kept.
@@ -530,8 +530,8 @@ before GNU CC is built. If the cross compilation header files are
already suitable for ANSI C and GNU CC, nothing special need be done).
`GPLUS_INCLUDE_DIR' means the same thing for native and cross. It
-is where `g++' looks first for header files. `libg++' installs only
-target independent header files in that directory.
+is where `g++' looks first for header files. The C++ library installs
+only target independent header files in that directory.
`LOCAL_INCLUDE_DIR' is used only for a native compiler. It is
normally `/usr/local/include'. GNU CC searches this directory so that
@@ -825,8 +825,7 @@ does not refer to anything that has gone out of scope, you should be
safe.
GNU CC implements taking the address of a nested function using a
-technique called "trampolines". A paper describing them is available
-from `maya.idiap.ch' in directory `pub/tmb', file `usenix88-lexic.ps.Z'.
+technique called "trampolines".
A nested function can jump to a label inherited from a containing
function, provided the label was explicitly declared in the containing
diff --git a/gcc/gcc.info-9 b/gcc/gcc.info-9
index 9d4caef3e9e..6194eeb37c9 100644
--- a/gcc/gcc.info-9
+++ b/gcc/gcc.info-9
@@ -6,8 +6,8 @@ input file gcc.texi.
Published by the Free Software Foundation 59 Temple Place - Suite 330
Boston, MA 02111-1307 USA
- Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997 Free
-Software Foundation, Inc.
+ Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998
+Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
diff --git a/gcc/gcc.texi b/gcc/gcc.texi
index ce412a019ba..c8e3db21097 100644
--- a/gcc/gcc.texi
+++ b/gcc/gcc.texi
@@ -96,7 +96,7 @@ Published by the Free Software Foundation
59 Temple Place - Suite 330
Boston, MA 02111-1307 USA
-Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
+Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
@@ -144,7 +144,7 @@ original English.
@sp 2
@center Richard M. Stallman
@sp 3
-@center Last updated 4 December 1997
+@center Last updated 7 January 1998
@sp 1
@c The version number appears three times more in this file.
diff --git a/gcc/genattrtab.c b/gcc/genattrtab.c
index 6f3856c3666..c16a6acb9b3 100644
--- a/gcc/genattrtab.c
+++ b/gcc/genattrtab.c
@@ -5588,7 +5588,7 @@ main (argc, argv)
rtx tem;
int i;
-#ifdef RLIMIT_STACK
+#if defined (RLIMIT_STACK) && defined (HAVE_GETRLIMIT) && defined (HAVE_SETRLIMIT)
/* Get rid of any avoidable limit on stack size. */
{
struct rlimit rlim;
@@ -5598,7 +5598,7 @@ main (argc, argv)
rlim.rlim_cur = rlim.rlim_max;
setrlimit (RLIMIT_STACK, &rlim);
}
-#endif /* RLIMIT_STACK defined */
+#endif
obstack_init (rtl_obstack);
obstack_init (hash_obstack);
diff --git a/gcc/install.texi b/gcc/install.texi
index a806e3515ef..f9e2b8d8d16 100644
--- a/gcc/install.texi
+++ b/gcc/install.texi
@@ -1,4 +1,4 @@
-@c Copyright (C) 1988,89,92,93,94,95,96,97 Free Software Foundation, Inc.
+@c Copyright (C) 1988,89,92,93,94,95,96,97,1998 Free Software Foundation, Inc.
@c This is part of the GCC manual.
@c For copying conditions, see the file gcc.texi.
@@ -178,7 +178,7 @@ make a difference.
@cindex Objective C threads
@cindex threads, Objective C
-@item --enable-objcthreads=@var{type}
+@item --enable-threads=@var{type}
Certain systems, notably Linux-based GNU systems, can't be relied on to
supply a threads facility for the Objective C runtime and so will
default to single-threaded runtime. They may, however, have a library
@@ -521,12 +521,51 @@ since they usually run faster than the ones compiled with some other
compiler.)
@item
+@cindex C++ runtime library
+@cindex @code{libstdc++}
If you're going to use C++, it's likely that you need to also install
-the libg++ distribution. It should be available from the same
-place where you got the GNU C distribution. Just as GNU C does not
-distribute a C runtime library, it also does not include a C++ run-time
+a C++ runtime library. Just as GNU C does not
+distribute a C runtime library, it also does not include a C++ runtime
library. All I/O functionality, special class libraries, etc., are
-available in the libg++ distribution.
+provided by the C++ runtime library.
+
+Here's one way to build and install a C++ runtime library for GNU CC:
+
+@itemize @bullet
+@item
+Build and install GNU CC, so that invoking @samp{gcc} obtains the GNU CC
+that was just built.
+
+@item
+Obtain a copy of a compatible @samp{libstdc++} distribution. For
+example, the @samp{libstdc++-2.8.0.tar.gz} distribution should be
+compatible with GCC 2.8.0. GCC distributors normally distribute
+@samp{libstdc++} as well.
+
+@item
+Set the @samp{CXX} environment variable to @samp{gcc} while running the
+@samp{libstdc++} distribution's @file{configure} command. Use the same
+@file{configure} options that you used when you invoked GCC's
+@file{configure} command.
+
+@item
+Invoke @samp{make} to build the C++ runtime.
+
+@item
+Invoke @samp{make install} to install the C++ runtime.
+
+@end itemize
+
+To summarize, after building and installing GNU CC, invoke the following
+shell commands in the topmost directory of the C++ library distribution.
+For @var{configure-options}, use the same options that
+you used to configure GNU CC.
+
+@example
+$ CXX=gcc ./configure @var{configure-options}
+$ make
+$ make install
+@end example
@item
GNU CC includes a runtime library for Objective-C because it is an
@@ -779,12 +818,16 @@ from @file{sunsite.unc.edu:/pub/Linux/GCC} and other mirror sites for
Linux-based GNU systems.
@item arm-*-riscix
-The ARM2 or ARM3 processor running RISC iX, Acorn's port of BSD Unix. If
-you are running a version of RISC iX prior to 1.2 then you must specify
-the version number during configuration. Note that the assembler
-shipped with RISC iX does not support stabs debugging information; a
-new version of the assembler, with stabs support included, is now
-available from Acorn.
+The ARM2 or ARM3 processor running RISC iX, Acorn's port of BSD Unix.
+If you are running a version of RISC iX prior to 1.2 then you must
+specify the version number during configuration. Note that the
+assembler shipped with RISC iX does not support stabs debugging
+information; a new version of the assembler, with stabs support
+included, is now available from Acorn and via ftp
+@file{ftp.acorn.com:/pub/riscix/as+xterm.tar.Z}. To enable stabs
+debugging, pass @samp{--with-gnu-as} to configure.
+
+You will need to install GNU @file{sed} before you can run configure.
@item a29k
AMD Am29k-family processors. These are normally used in embedded
@@ -2010,8 +2053,8 @@ $ assign /system /translation=concealed -
@noindent
with the appropriate disk and directory name. If you are going to be
-using libg++, this is where the libg++ install procedure will install
-the libg++ header files.
+using a C++ runtime library, this is where its install procedure will install
+its header files.
@item
Obtain the file @file{gcc-cc1plus.exe}, and place this in the same
@@ -2283,7 +2326,7 @@ are already suitable for ANSI C and GNU CC, nothing special need be
done).
@code{GPLUS_INCLUDE_DIR} means the same thing for native and cross. It
-is where @code{g++} looks first for header files. @code{libg++}
+is where @code{g++} looks first for header files. The C++ library
installs only target independent header files in that directory.
@code{LOCAL_INCLUDE_DIR} is used only for a native compiler. It is
diff --git a/gcc/integrate.c b/gcc/integrate.c
index 5e9076c9eea..0400085f61f 100644
--- a/gcc/integrate.c
+++ b/gcc/integrate.c
@@ -276,6 +276,13 @@ initialize_for_inline (fndecl, min_labelno, max_labelno, max_reg, copy)
{
rtx p = DECL_RTL (parms);
+ /* If we have (mem (addressof (mem ...))), use the inner MEM since
+ otherwise the copy_rtx call below will not unshare the MEM since
+ it shares ADDRESSOF. */
+ if (GET_CODE (p) == MEM && GET_CODE (XEXP (p, 0)) == ADDRESSOF
+ && GET_CODE (XEXP (XEXP (p, 0), 0)) == MEM)
+ p = XEXP (XEXP (p, 0), 0);
+
if (GET_CODE (p) == MEM && copy)
{
/* Copy the rtl so that modifications of the addresses
@@ -415,6 +422,7 @@ save_for_inline_copying (fndecl)
int max_uid;
rtx first_nonparm_insn;
char *new, *new1;
+ rtx *new_parm_reg_stack_loc;
/* Make and emit a return-label if we have not already done so.
Do this before recording the bounds on label numbers. */
@@ -521,6 +529,13 @@ save_for_inline_copying (fndecl)
for (i = min_labelno; i < max_labelno; i++)
label_map[i] = gen_label_rtx ();
+ /* Likewise for parm_reg_stack_slot. */
+ new_parm_reg_stack_loc = (rtx *) savealloc (max_parm_reg * sizeof (rtx));
+ for (i = 0; i < max_parm_reg; i++)
+ new_parm_reg_stack_loc[i] = copy_for_inline (parm_reg_stack_loc[i]);
+
+ parm_reg_stack_loc = new_parm_reg_stack_loc;
+
/* Record the mapping of old insns to copied insns. */
insn_map = (rtx *) alloca (max_uid * sizeof (rtx));
diff --git a/gcc/invoke.texi b/gcc/invoke.texi
index 21296860d8d..f9f23f1b378 100644
--- a/gcc/invoke.texi
+++ b/gcc/invoke.texi
@@ -5277,7 +5277,7 @@ make it more readable. This option is generally only of use to those
who actually need to read the generated assembly code (perhaps while
debugging the compiler itself).
-@samp{-fverbose-asm} is the default. @samp{-fno-verbose-asm} causes the
+@samp{-fno-verbose-asm}, the default, causes the
extra information to be omitted and is useful when comparing two assembler
files.
diff --git a/gcc/jump.c b/gcc/jump.c
index 00e31cf22ec..5377eb3e284 100644
--- a/gcc/jump.c
+++ b/gcc/jump.c
@@ -1,5 +1,5 @@
/* Optimize jump instructions, for GNU compiler.
- Copyright (C) 1987, 88, 89, 91-96, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1987, 88, 89, 91-97, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -1160,8 +1160,11 @@ jump_optimize (f, cross_jump, noop_moves, after_regscan)
There is no point in using the old value of TEMP1 if
it is a register, since cse will alias them. It can
lose if the old value were a hard register since CSE
- won't replace hard registers. */
- && (((temp3 = reg_set_last (temp1, insn)) != 0)
+ won't replace hard registers. Avoid using TEMP3 if
+ small register classes and it is a hard register. */
+ && (((temp3 = reg_set_last (temp1, insn)) != 0
+ && ! (SMALL_REGISTER_CLASSES && GET_CODE (temp3) == REG
+ && REGNO (temp3) < FIRST_PSEUDO_REGISTER))
/* Make the latter case look like x = x; if (...) x = b; */
|| (temp3 = temp1, 1))
/* INSN must either branch to the insn after TEMP or the insn
diff --git a/gcc/libgcc2.c b/gcc/libgcc2.c
index 9df19dce488..001ee1c6c04 100644
--- a/gcc/libgcc2.c
+++ b/gcc/libgcc2.c
@@ -1530,7 +1530,7 @@ __bb_exit_func (void)
fprintf (stderr, "arc profiling: Error closing output file %s.\n",
ptr->filename);
}
- if ((da_file = fopen (ptr->filename, "w")) < 0)
+ if ((da_file = fopen (ptr->filename, "w")) == 0)
{
fprintf (stderr, "arc profiling: Can't open output file %s.\n",
ptr->filename);
@@ -2866,6 +2866,45 @@ __enable_execute_stack ()
#endif /* __sysV88__ */
+#ifdef __sysV68__
+
+#include <sys/signal.h>
+#include <errno.h>
+
+/* Motorola forgot to put memctl.o in the libp version of libc881.a,
+ so define it here, because we need it in __clear_insn_cache below */
+
+asm("\n\
+ global memctl\n\
+memctl:\n\
+ movq &75,%d0\n\
+ trap &0\n\
+ bcc.b noerror\n\
+ jmp cerror%\n\
+noerror:\n\
+ movq &0,%d0\n\
+ rts");
+
+/* Clear instruction cache so we can call trampolines on stack.
+ This is called from FINALIZE_TRAMPOLINE in mot3300.h. */
+
+void
+__clear_insn_cache ()
+{
+ int save_errno;
+
+ /* Preserve errno, because users would be surprised to have
+ errno changing without explicitly calling any system-call. */
+ save_errno = errno;
+
+ /* Keep it simple : memctl (MCT_TEXT) always fully clears the insn cache.
+ No need to use an address derived from _start or %sp, as 0 works also. */
+ memctl(0, 4096, MCT_TEXT);
+ errno = save_errno;
+}
+
+#endif /* __sysV68__ */
+
#ifdef __pyr__
#undef NULL /* Avoid errors if stdio.h and our stddef.h mismatch. */
@@ -3801,6 +3840,47 @@ label:
#endif /* !DWARF2_UNWIND_INFO */
#endif /* L_eh */
+
+#ifdef L_eh_compat
+
+/* This is needed to provide the old names of the frame info registering
+ code for compatibility. It should be deleted in GCC 2.9.0. */
+
+extern void *malloc ();
+
+struct object {
+ void *pc_begin;
+ void *pc_end;
+ void *fde_begin;
+ void *fde_array;
+ size_t count;
+ struct object *next;
+};
+
+void __register_frame_info (void *, struct object *);
+void __register_frame_info_table (void *, struct object *);
+void __deregister_frame_info (void *);
+
+void
+__register_frame (void *begin)
+{
+ __register_frame_info (begin, malloc (sizeof (struct object)));
+}
+
+void
+__register_frame_table (void *begin)
+{
+ __register_frame_info_table (begin, malloc (sizeof (struct object)));
+}
+
+void
+__deregister_frame (void *begin)
+{
+ /* This leaks the memory malloced above,
+ but that's good enough for backward compatibility purposes. */
+ __deregister_frame_info (begin);
+}
+#endif
#ifdef L_pure
#ifndef inhibit_libc
diff --git a/gcc/make-cc1.com b/gcc/make-cc1.com
index ecbe5b533e8..618fc2a8d33 100644
--- a/gcc/make-cc1.com
+++ b/gcc/make-cc1.com
@@ -24,7 +24,7 @@ $!
$! Compiler-specific setup (assume GNU C, then override as necessary):
$!
$ CC = "gcc"
-$ CFLAGS = "/Debug/noVerbos/CC1=""-mpcc-alignment"""
+$ CFLAGS = "/Opt=2/Debug/noVerbos/CC1=""-mpcc-alignment"""
$ LIBS = "gnu_cc:[000000]gcclib.olb/Libr,sys$library:vaxcrtl.olb/Libr"
$ if p1.eqs."GNUC"
$ then
diff --git a/gcc/make-cccp.com b/gcc/make-cccp.com
index 867a4385dee..342c71015a4 100644
--- a/gcc/make-cccp.com
+++ b/gcc/make-cccp.com
@@ -18,7 +18,7 @@ $!
$! Compiler-specific setup (assume GNU C, then override as necessary):
$!
$ CC = "gcc"
-$ CFLAGS = "/Debug/noVerbos"
+$ CFLAGS = "/Opt=2/Debug/noVerbos"
$ LIBS = "gnu_cc:[000000]gcclib.olb/Libr,sys$library:vaxcrtl.olb/Libr"
$ if p1.nes."GNUC"
$ then
@@ -33,6 +33,7 @@ $ else
$ if p1.eqs."DECC"
$ then
$ if f$trnlnm("DECC$CC_DEFAULT").nes."" then CC = "cc/DECC"
+$ CC = CC + "/Prefix=All"
$ LIBS = "alloca.obj" !DECC$SHR will be found implicitly by linker
$ define/noLog SYS DECC$LIBRARY_INCLUDE:
$ else
diff --git a/gcc/make-gcc.com b/gcc/make-gcc.com
index 03235eecd14..58632eb10c6 100644
--- a/gcc/make-gcc.com
+++ b/gcc/make-gcc.com
@@ -1,32 +1,71 @@
+$! make-gcc.com -- VMS build procedure for GNU CC.
$!
-$! Build GCC
+$! Usage:
+$! $ @make-gcc.com [host-compiler] [component list]
$!
-$! Set the def dir to proper place for use in batch. Works for interactive too.
-$flnm = f$enviroment("PROCEDURE") ! get current procedure name
-$set default 'f$parse(flnm,,,"DEVICE")''f$parse(flnm,,,"DIRECTORY")'
+$! where [host-compiler] is one of "GNUC", "VAXC", "DECC";
+$! default when none specified is "GNUC",
+$! and where [component list] is space separated list beginning
+$! with "CC1" and optionally followed by "CC1PLUS"; default if
+$! nothing is specified is "CC1" (the C compiler); choosing
+$! "CC1PLUS" (the C++ compiler) without also specifying "CC1"
+$! will not work. (See make-cc1.com for other potential component
+$! values; but unless you're developing or debugging the compiler
+$! suite itself, the two above are the only ones of interest.)
$!
+$! For a "stage 2" or subsequent build, always specify GNUC as
+$! the host compiler.
$!
-$! First, build the preprocessor.
+$! Note:
+$! Even though it is possible to build with VAX C or DEC C,
+$! a prior version of the gcc-vms binary distribution is still
+$! required to be able to use the newly built GNU CC compiler(s),
+$! because the gcc source distribution does not supply the driver
+$! program which the DCL command "GCC" implements or the C header
+$! files and gcclib support library.
+$!
+$
+$!
+$! Change working directory to the location of this procedure.
+$!
+$ flnm = f$enviroment("PROCEDURE") !get current procedure name
+$ set default 'f$parse(flnm,,,"DEVICE")''f$parse(flnm,,,"DIRECTORY")'
+$
+$!
+$! First, we build the preprocessor.
$!
$ @make-cccp.com 'p1' 'p2'
$!
-$! To build the GNU C++ compiler in addition to the GNU CC compiler, comment
-$! out the `@make-cc1' line, and uncomment the `@make-cc1 cc1 cc1plus' line.
-$! To also build Objective-C, add "cc1obj" to the list.
+$! To install it, copy the resulting GCC-CPP.EXE to the GNU_CC:[000000]
+$! directory.
+$!
+$
+$!
+$! Now we build the C compiler. To build the C++ compiler too, use
+$! $ @make-gcc GNUC cc1 cc1plus
+$! when invoking this command procedure. Note that you should not
+$! do this for a "stage 1" build.
+$!
+$ @make-cc1.com 'p1' 'p2' 'p3' 'p4' 'p5' 'p6' 'p7' 'p8'
$!
-$! See the file make-cc1.com for a complete list of options.
+$! To install it (them), copy the resulting GCC-CC1.EXE (and GCC-CC1PLUS.EXE)
+$! to the GNU_CC:[000000] directory.
$!
-$ @make-cc1.com 'p1' 'p2' 'p3' 'p4' 'p5' 'p6' 'p7' 'p8'
-$! @make-cc1 cc1 cc1plus
+$
$!
+$! Now we build the `libgcc2' support library. It will need to be merged
+$! with the existing gcclib.olb library.
$!
-$! Now build the library routines that are required. These will be placed in
-$! libgcc2.olb. To install, extract all of the modules from libgcc2.olb and
-$! add them to gnu_cc:[000000]gcclib.olb. You may have to delete the eprintf
-$! and new modules from the gnu_cc:[000000]gcclib.olb, since libgcc2 supplies
-$! these same routines with different module names.
+$ @make-l2.com 'p1' 'p2' 'p3' 'p4' 'p5' 'p6' 'p7' 'p8'
$!
-$! Now build gcclib2.olb
+$! To install, save a backup copy of GNU_CC:[000000]GCCLIB.OLB somewhere,
+$! then update the original using the newly created LIBGCC2.OLB via
+$! $ library/Obj libgcc2.olb /Extract=*/Output=libgcc2.obj
+$! $ library/Obj gnu_cc:[000000]gcclib.olb libgcc2.obj /Replace
$!
-$ @make-l2.com
+$! Depending upon how old your present gcclib library is, you might have
+$! to delete some modules, such as `eprintf' and `new', to avoid conflicting
+$! symbols from obsolete routines. After deleting any such modules, just
+$! repeat the `library/replace' step.
$!
+$ exit
diff --git a/gcc/make-l2.com b/gcc/make-l2.com
index 26657b3e724..9f45e64d95d 100644
--- a/gcc/make-l2.com
+++ b/gcc/make-l2.com
@@ -1,36 +1,44 @@
-$! Set the def dir to proper place for use in batch. Works for interactive too.
-$flnm = f$enviroment("PROCEDURE") ! get current procedure name
-$set default 'f$parse(flnm,,,"DEVICE")''f$parse(flnm,,,"DIRECTORY")'
+$! make-l2.com -- VMS build procedure for libgcc2.
+$
+$! Change working directory to the location of this command procedure.
+$ flnm = f$enviroment("PROCEDURE") !get current procedure name
+$ set default 'f$parse(flnm,,,"DEVICE")''f$parse(flnm,,,"DIRECTORY")'
$!
-$! Command file to build libgcc2.olb. You should only run this once you
+$! Command file to build libgcc2.olb. You should only run this once you
$! have the current compiler installed, otherwise some of the builtins will
$! not be recognized. Once you have built libgcc2.olb, you can merge this
$! with gnu_cc:[000000]gcclib.olb
$!
-$! All of the source code is assumed to be in libgcc2.c, and a list of the
+$! All of the C source code is assumed to be in libgcc2.c, and a list of the
$! modules that we need from there is in libgcc2.list (which is generated
-$! when config-gcc.com is run).
+$! when vmsconfig.com is run). The C++ source is found in the [.cp.inc]
+$! directory and managed via libgcc2-cxx.list.
$!
-$if f$search("gcc-cc1.exe").eqs.""
-$ then
+$ if f$search("gcc-cc1.exe").eqs.""
+$ then
$ gcc_cc1:=$gnu_cc:[000000]gcc-cc1
$ if f$extract(0,1,f$trnlnm("GNU_CC_VERSION")).eqs."1" then goto nocompile
-$ else
+$ else
$ gcc_cc1:=$sys$disk:[]gcc-cc1
-$ endif
+$ endif
$!
-$if f$search("gcc-cpp.exe").eqs.""
-$ then
+$ if f$search("gcc-cpp.exe").eqs.""
+$ then
$ gcc_cpp:=$gnu_cc:[000000]gcc-cpp
$ if f$extract(0,1,f$trnlnm("GNU_CC_VERSION")).eqs."1" then goto nocompile
$ Version:='f$trnlnm("GNU_CC_VERSION")'
-$ else
+$ else
$ gcc_cpp:=$sys$disk:[]gcc-cpp
$ open ifile$ version.opt
$ read ifile$ line
$ close ifile$
-$ Version=line-"ident="""-"""
-$ endif
+$ Version=line - "ident=""" - """
+$ endif
+$!
+$ if f$search("gcc-cc1plus.exe").eqs.""
+$ then gcc_cxx = "$gnu_cc:[000000]gcc-cc1plus"
+$ else gcc_cxx = "$sys$disk:[]gcc-cc1plus"
+$ endif
$!
$gcc_as:=$gnu_cc:[000000]gcc-as
$cpp_file:=sys$scratch:gcc_'f$getjpi(0,"pid")'.cpp
@@ -48,9 +56,12 @@ $compile:
$lib/create libgcc2.olb
$on error then goto c_err
$on control_y then goto c_err
+$
+$if f$trnlnm("IFILE$").nes."" then close/noLog ifile$
$open ifile$ libgcc2.list
-$loop: read ifile$ line/end=c_done
+$loop:
$!
+$read ifile$ line/end=c_done
$i=0
$loop1:
$flnm=f$element(i," ",line)
@@ -70,7 +81,7 @@ $! of specifying an alternate location for the compiler executables.
$!
$ gcc_cpp "-I[]" "-I[.ginclude]" "-D''flnm'" libgcc2.c 'cpp_file'
$ gcc_cc1 'cpp_file' -dumpbase 'objname' -fexceptions -
- -quiet -mgnu -g "-O1" -mvaxc-alignment -o 's_file'
+ -quiet -mgnu -g "-O1" -mvaxc-alignment -o 's_file'
$ delete/nolog 'cpp_file';
$ gcc_as "-vGNU CC V''Version'" 's_file' -o 'objname'.OBJ
$! Assemble again, preserving lowercase symbol names this time.
@@ -82,13 +93,51 @@ $ delete/nolog 'objname'.obj;,'objname'-c.obj;
$!
$goto loop1
$!
-$goto loop
-$!
$! In case of error or abort, go here (In order to close file).
$!
-$c_err: !'f$verify(0)
+$c_err: !'f$verify(0)
$close ifile$
$ exit %x2c
$!
$c_done:
$close ifile$
+$
+$
+$ EXIT
+$ !gcc-2.8.0: C++ libgcc2 code disabled since it's not adequately tested
+$
+$!
+$ p1 = p1+" "+p2+" "+p3+" "+p4+" "+p5+" "+p6+" "+p7+" "+p8
+$ p1 = " " + f$edit(p1,"COMPRESS,TRIM,UPCASE") + " "
+$! (note: substring locations can only be equal when neither string is present)
+$ if f$locate(" CC1PLUS ",p1).eq.f$locate(" CXX ",p1) then goto cxx_done
+$ if f$search("libgcc2-cxx.list").eqs."" then goto cxx_done
+$!
+$ open/read ifile$ libgcc2-cxx.list
+$cxx_line_loop:
+$ read ifile$ line/end=cxx_done
+$ i = 0
+$cxx_file_loop:
+$ flnm = f$element(i,",",line)
+$ i = i + 1
+$ if flnm.eqs."" .or. flnm.eqs."," then goto cxx_line_loop
+$ write sys$output "$ gcc/plus/debug ''flnm'.cc"
+$ objname = flnm
+$!
+$ gcc_cpp -+ "-I[]" "-I[.ginclude]" "-I[.cp.inc]" [.cp]'flnm'.cc 'cpp_file'
+$ gcc_cxx 'cpp_file' -dumpbase 'objname' -fexceptions -
+ -quiet -mgnu -g "-O1" -mvaxc-alignment -o 's_file'
+$ delete/nolog 'cpp_file';
+$ gcc_as "-vGNU CC V''Version'" 's_file' -o 'objname'.OBJ
+$! Assemble again, preserving lowercase symbol names this time.
+$ gcc_as "-vGNU CC V''Version'" -h3 's_file' -o 'objname'-c.OBJ
+$ delete/nolog 's_file';
+$
+$ library libgcc2.olb 'objname'.obj,'objname'-c.obj
+$ delete/nolog 'objname'.obj;,'objname'-c.obj;
+$!
+$ goto cxx_file_loop
+$!
+$cxx_done:
+$ close ifile$
+$ exit
diff --git a/gcc/md.texi b/gcc/md.texi
index acc616fb8e4..e74a8e259d3 100644
--- a/gcc/md.texi
+++ b/gcc/md.texi
@@ -2465,6 +2465,15 @@ will not normally need to define this pattern. A typical reason why you
might need this pattern is if some value, such as a pointer to a global
table, must be restored after control flow is branched to the handler of
an exception. There are no arguments.
+
+@cindex @code{builtin_setjmp_receiver} instruction pattern
+@item @samp{builtin_setjmp_receiver}
+This pattern, if defined, contains code needed at the site of an
+builtin setjmp that isn't needed at the site of a nonlocal goto. You
+will not normally need to define this pattern. A typical reason why you
+might need this pattern is if some value, such as a pointer to a global
+table, must be restored. This pattern is called immediate after the
+call to @code{__dummy} has been emitted. There are no arguments.
@end table
@node Pattern Ordering
diff --git a/gcc/objc/Make-lang.in b/gcc/objc/Make-lang.in
index bd4038f4e10..1170d5a1439 100644
--- a/gcc/objc/Make-lang.in
+++ b/gcc/objc/Make-lang.in
@@ -131,7 +131,7 @@ objc/class.o: $(srcdir)/objc/class.c $(GCC_PASSES)
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) \
-c $(srcdir)/objc/class.c -o $@
objc/sendmsg.o: $(srcdir)/objc/sendmsg.c $(GCC_PASSES)
- $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) \
+ $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) -Iobjc \
-c $(srcdir)/objc/sendmsg.c -o $@
objc/init.o: $(srcdir)/objc/init.c $(GCC_PASSES)
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) \
@@ -173,13 +173,13 @@ objc/linking.o: $(srcdir)/objc/linking.m $(GCC_PASSES)
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) \
-fgnu-runtime -c $(srcdir)/objc/linking.m -o $@
-$(srcdir)/objc/libobjc_entry.o: $(srcdir)/objc/libobjc_entry.c $(GCC_PASSES)
+objc/libobjc_entry.o: $(srcdir)/objc/libobjc_entry.c $(GCC_PASSES)
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) \
-c $(srcdir)/objc/libobjc_entry.c -o $@
# Build the Objective C runtime library.
libobjc.a: cc1obj specs stmp-int-hdrs libgcc2.ready \
- $(USE_COLLECT2) $(EXTRA_PARTS) $(srcdir)/objc/runtime-info.h $(OBJC_O)
+ $(USE_COLLECT2) $(EXTRA_PARTS) objc/runtime-info.h $(OBJC_O)
-rm -f libobjc.a
$(AR) $(AR_FLAGS) libobjc.a $(OBJC_O)
-if $(RANLIB_TEST) ; then $(RANLIB) libobjc.a; else true; fi
@@ -188,25 +188,25 @@ libobjc_s.a: libobjc.a
mv libobjc.a libobjc_s.a
# Create a relocatable DLL
-libobjc.dll: libobjc_s.a $(srcdir)/objc/libobjc_entry.o
+libobjc.dll: libobjc_s.a objc/libobjc_entry.o
$(GCC_FOR_TARGET) -mdll -Wl,--base-file -Wl,libobjc.base \
-o libobjc.dll libobjc_s.a \
- $(srcdir)/objc/libobjc_entry.o -lkernel32
+ objc/libobjc_entry.o -lkernel32
$(DLLTOOL) --dllname libobjc.dll --def $(srcdir)/objc/libobjc.def \
--base-file libobjc.base --output-exp libobjc.exp
$(GCC_FOR_TARGET) -mdll -Wl,--base-file libobjc.base libobjc.exp \
-o libobjc.dll libobjc_s.a \
- $(srcdir)/objc/libobjc_entry.o -lkernel32
+ objc/libobjc_entry.o -lkernel32
$(DLLTOOL) --dllname libobjc.dll --def $(srcdir)/objc/libobjc.def \
--base-file libobjc.base --output-exp libobjc.exp
$(GCC_FOR_TARGET) libobjc.exp -mdll \
-o libobjc.dll libobjc_s.a \
- $(srcdir)/objc/libobjc_entry.o -lkernel32
+ objc/libobjc_entry.o -lkernel32
$(DLLTOOL) --dllname libobjc.dll --def $(srcdir)/objc/libobjc.def \
--output-lib libobjc.a
# Platform generated information needed by ObjC runtime
-$(srcdir)/objc/runtime-info.h: cc1obj
+objc/runtime-info.h: cc1obj
echo "" > emptyfile
echo "/* This file is automatically generated */" >$@
./cc1obj -print-objc-runtime-info emptyfile >>$@
@@ -260,6 +260,7 @@ objc.uninstall:
objc.mostlyclean:
-rm -f tmp-objc-prs.y
-rm -f objc/*$(objext) objc/xforward objc/fflags
+ -rm -f objc/runtime-info.h
-rm -f libobjc.a libobjc_s.a libobjc.dll
-rm -f libobjc.base libobjc.exp
objc.clean: objc.mostlyclean
diff --git a/gcc/objc/init.c b/gcc/objc/init.c
index 8a2e21b78dd..c900cac65e8 100644
--- a/gcc/objc/init.c
+++ b/gcc/objc/init.c
@@ -59,7 +59,7 @@ static void __objc_class_add_protocols (Class, struct objc_protocol_list*);
or a category is loaded into the runtime. This may e.g. help a
dynamic loader determine the classes that have been loaded when
an object file is dynamically linked in */
-void (*_objc_load_callback)(Class class, Category* category) = 0; /* !T:SAFE */
+void (*_objc_load_callback)(Class class, Category* category); /* !T:SAFE */
/* Is all categories/classes resolved? */
BOOL __objc_dangling_categories = NO; /* !T:UNUSED */
diff --git a/gcc/pexecute.c b/gcc/pexecute.c
index 9f80cb05b39..5c2779fcc22 100644
--- a/gcc/pexecute.c
+++ b/gcc/pexecute.c
@@ -1,6 +1,6 @@
/* Utilities to execute a program in a subprocess (possibly linked by pipes
with other subprocesses), and wait for it.
- Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
This file is part of the libiberty library.
Libiberty is free software; you can redistribute it and/or
@@ -236,7 +236,7 @@ extern int _spawnvp ();
/* This is a kludge to get around the Microsoft C spawn functions' propensity
to remove the outermost set of double quotes from all arguments. */
-const char * const *
+char * const *
fix_argv (argvec)
char **argvec;
{
@@ -267,7 +267,7 @@ fix_argv (argvec)
argvec[i] = temp;
}
- return (const char * const *) argvec;
+ return (char * const *) argvec;
}
#endif /* ! defined (__CYGWIN32__) */
@@ -278,7 +278,8 @@ pexecute (program, argv, this_pname, temp_base, errmsg_fmt, errmsg_arg, flags)
char * const *argv;
const char *this_pname;
const char *temp_base;
- char **errmsg_fmt, **errmsg_arg;
+ char **errmsg_fmt;
+ const char **errmsg_arg;
int flags;
{
int pid;
@@ -286,7 +287,7 @@ pexecute (program, argv, this_pname, temp_base, errmsg_fmt, errmsg_arg, flags)
if ((flags & PEXECUTE_ONE) != PEXECUTE_ONE)
abort ();
pid = (flags & PEXECUTE_SEARCH ? _spawnvp : _spawnv)
- (_P_NOWAIT, program, fix_argv(argv));
+ (_P_NOWAIT, program, fix_argv (argv));
if (pid == -1)
{
*errmsg_fmt = install_error_msg;
diff --git a/gcc/sched.c b/gcc/sched.c
index f04350c165f..fee802e4f43 100644
--- a/gcc/sched.c
+++ b/gcc/sched.c
@@ -990,17 +990,19 @@ remove_dependence (insn, elem)
rtx prev, link;
int found = 0;
- for (prev = 0, link = LOG_LINKS (insn); link;
- prev = link, link = XEXP (link, 1))
+ for (prev = 0, link = LOG_LINKS (insn); link; link = XEXP (link, 1))
{
if (XEXP (link, 0) == elem)
{
+ RTX_INTEGRATED_P (link) = 1;
if (prev)
XEXP (prev, 1) = XEXP (link, 1);
else
LOG_LINKS (insn) = XEXP (link, 1);
found = 1;
}
+ else
+ prev = link;
}
if (! found)
@@ -1478,6 +1480,11 @@ priority (insn)
{
rtx x = XEXP (prev, 0);
+ /* If this was a duplicate of a dependence we already deleted,
+ ignore it. */
+ if (RTX_INTEGRATED_P (prev))
+ continue;
+
/* A dependence pointing to a note or deleted insn is always
obsolete, because sched_analyze_insn will have created any
necessary new dependences which replace it. Notes and deleted
diff --git a/gcc/sdbout.c b/gcc/sdbout.c
index c42afdb28ca..7fab3bec57e 100644
--- a/gcc/sdbout.c
+++ b/gcc/sdbout.c
@@ -531,10 +531,14 @@ plain_type_1 (type, level)
{
char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
+ if (!strcmp (name, "char"))
+ return T_CHAR;
if (!strcmp (name, "unsigned char"))
return T_UCHAR;
if (!strcmp (name, "signed char"))
return T_CHAR;
+ if (!strcmp (name, "int"))
+ return T_INT;
if (!strcmp (name, "unsigned int"))
return T_UINT;
if (!strcmp (name, "short int"))
@@ -547,12 +551,12 @@ plain_type_1 (type, level)
return T_ULONG;
}
+ if (size == INT_TYPE_SIZE)
+ return (TREE_UNSIGNED (type) ? T_UINT : T_INT);
if (size == CHAR_TYPE_SIZE)
return (TREE_UNSIGNED (type) ? T_UCHAR : T_CHAR);
if (size == SHORT_TYPE_SIZE)
return (TREE_UNSIGNED (type) ? T_USHORT : T_SHORT);
- if (size == INT_TYPE_SIZE)
- return (TREE_UNSIGNED (type) ? T_UINT : T_INT);
if (size == LONG_TYPE_SIZE)
return (TREE_UNSIGNED (type) ? T_ULONG : T_LONG);
if (size == LONG_LONG_TYPE_SIZE) /* better than nothing */
diff --git a/gcc/stmt.c b/gcc/stmt.c
index 30bd84c5c6b..9451012d13b 100644
--- a/gcc/stmt.c
+++ b/gcc/stmt.c
@@ -1565,7 +1565,10 @@ expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line)
body = gen_rtx (ASM_OPERANDS, VOIDmode,
TREE_STRING_POINTER (string), "", 0, argvec, constraints,
filename, line);
- MEM_VOLATILE_P (body) = vol;
+
+ /* The only use of BODY is if no outputs are specified, so set
+ it volatile, at least for now. */
+ MEM_VOLATILE_P (body) = 1;
/* Eval the inputs and put them into ARGVEC.
Put their constraints into ASM_INPUTs and store in CONSTRAINTS. */
@@ -4026,9 +4029,13 @@ expand_decl_cleanup_no_eh (decl, cleanup)
tree decl, cleanup;
{
int save_eh = using_eh_for_cleanups_p;
+ int result;
+
using_eh_for_cleanups_p = 0;
- expand_decl_cleanup (decl, cleanup);
+ result = expand_decl_cleanup (decl, cleanup);
using_eh_for_cleanups_p = save_eh;
+
+ return result;
}
/* Arrange for the top element of the dynamic cleanup chain to be
diff --git a/gcc/texinfo.tex b/gcc/texinfo.tex
index b855a969a59..fff5c4ea179 100644
--- a/gcc/texinfo.tex
+++ b/gcc/texinfo.tex
@@ -1,5 +1,5 @@
%% TeX macros to handle Texinfo files.
-%% $Id: texinfo.tex,v 1.1 1997/08/11 15:57:14 law Exp $
+%% $Id: texinfo.tex,v 2.221 1997/12/24 18:59:06 karl Exp $
% Copyright (C) 1985, 86, 88, 90, 91, 92, 93,
% 94, 95, 96, 97 Free Software Foundation, Inc.
@@ -36,7 +36,7 @@
% This automatically updates the version number based on RCS.
\def\deftexinfoversion$#1: #2 ${\def\texinfoversion{#2}}
-\deftexinfoversion$Revision: 1.1 $
+\deftexinfoversion$Revision: 2.221 $
\message{Loading texinfo package [Version \texinfoversion]:}
% If in a .fmt file, print the version number
@@ -441,14 +441,11 @@
% @. is an end-of-sentence period.
\def\.{.\spacefactor=3000 }
-% @enddots{} is an end-of-sentence ellipsis.
-\gdef\enddots{$\mathinner{\ldotp\ldotp\ldotp\ldotp}$\spacefactor=3000}
-
% @! is an end-of-sentence bang.
-\gdef\!{!\spacefactor=3000 }
+\def\!{!\spacefactor=3000 }
% @? is an end-of-sentence query.
-\gdef\?{?\spacefactor=3000 }
+\def\?{?\spacefactor=3000 }
% @w prevents a word break. Without the \leavevmode, @w at the
% beginning of a paragraph, when TeX is still in vertical mode, would
@@ -573,9 +570,27 @@ where each line of input produces a line of output.}
\let\br = \par
-% @dots{} output some dots
+% @dots{} output an ellipsis using the current font.
+% We do .5em per period so that it has the same spacing in a typewriter
+% font as three actual period characters.
+%
+\def\dots{\hbox to 1.5em{%
+ \hskip 0pt plus 0.25fil minus 0.25fil
+ .\hss.\hss.%
+ \hskip 0pt plus 0.5fil minus 0.5fil
+}}
+
+% @enddots{} is an end-of-sentence ellipsis.
+%
+\def\enddots{%
+ \hbox to 2em{%
+ \hskip 0pt plus 0.25fil minus 0.25fil
+ .\hss.\hss.\hss.%
+ \hskip 0pt plus 0.5fil minus 0.5fil
+ }%
+ \spacefactor=3000
+}
-\def\dots{$\ldots$}
% @page forces the start of a new page
@@ -1236,7 +1251,7 @@ where each line of input produces a line of output.}
\let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy
\let\tenttsl=\titlettsl
\resetmathfonts \setleading{25pt}}
-\def\titlefont#1{{\titlefonts #1}}
+\def\titlefont#1{{\titlefonts\rm #1}}
\def\chapfonts{%
\let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
\let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
@@ -4617,7 +4632,7 @@ width0pt\relax} \fi
% Check for and read epsf.tex up front. If we read it only at @image
% time, we might be inside a group, and then its definitions would get
% undone and the next image would fail.
-\openin 1 = xepsf.tex
+\openin 1 = epsf.tex
\ifeof 1 \else
\closein 1
\def\epsfannounce{\toks0 = }% do not bother showing banner
diff --git a/gcc/toplev.c b/gcc/toplev.c
index c09b2fe1f7b..cace49e9623 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -587,10 +587,10 @@ int flag_inhibit_size_directive = 0;
the generated assembly code (to make it more readable). This option
is generally only of use to those who actually need to read the
generated assembly code (perhaps while debugging the compiler itself).
- -fverbose-asm is the default. -fno-verbose-asm causes the extra information
+ -fno-verbose-asm, the default, causes the extra information
to be omitted and is useful when comparing two assembler files. */
-int flag_verbose_asm = 1;
+int flag_verbose_asm = 0;
/* -dA causes debug commentary information to be produced in
the generated assembly code (to make it more readable). This option
@@ -959,7 +959,7 @@ get_run_time ()
return (rusage.ru_utime.tv_sec * 1000000 + rusage.ru_utime.tv_usec
+ rusage.ru_stime.tv_sec * 1000000 + rusage.ru_stime.tv_usec);
#else /* VMS */
- times (&vms_times);
+ times ((void *) &vms_times);
return (vms_times.proc_user_time + vms_times.proc_system_time) * 10000;
#endif
#endif
@@ -3698,7 +3698,7 @@ main (argc, argv, envp)
--p;
progname = p;
-#ifdef RLIMIT_STACK
+#if defined (RLIMIT_STACK) && defined (HAVE_GETRLIMIT) && defined (HAVE_SETRLIMIT)
/* Get rid of any avoidable limit on stack size. */
{
struct rlimit rlim;
@@ -3708,7 +3708,7 @@ main (argc, argv, envp)
rlim.rlim_cur = rlim.rlim_max;
setrlimit (RLIMIT_STACK, &rlim);
}
-#endif /* RLIMIT_STACK */
+#endif
signal (SIGFPE, float_signal);
diff --git a/gcc/unroll.c b/gcc/unroll.c
index 120e2741f3c..1e0de2b6498 100644
--- a/gcc/unroll.c
+++ b/gcc/unroll.c
@@ -2683,13 +2683,17 @@ find_splittable_givs (bl, unroll_type, loop_start, loop_end, increment,
&& (loop_number_exit_count[uid_loop_num[INSN_UID (loop_start)]]
|| unroll_type == UNROLL_NAIVE)
&& v->giv_type != DEST_ADDR
- && ((REGNO_FIRST_UID (REGNO (v->dest_reg)) != INSN_UID (v->insn)
- /* Check for the case where the pseudo is set by a shift/add
- sequence, in which case the first insn setting the pseudo
- is the first insn of the shift/add sequence. */
- && (! (tem = find_reg_note (v->insn, REG_RETVAL, NULL_RTX))
- || (REGNO_FIRST_UID (REGNO (v->dest_reg))
- != INSN_UID (XEXP (tem, 0)))))
+ /* The next part is true if the pseudo is used outside the loop.
+ We assume that this is true for any pseudo created after loop
+ starts, because we don't have a reg_n_info entry for them. */
+ && (REGNO (v->dest_reg) >= max_reg_before_loop
+ || (REGNO_FIRST_UID (REGNO (v->dest_reg)) != INSN_UID (v->insn)
+ /* Check for the case where the pseudo is set by a shift/add
+ sequence, in which case the first insn setting the pseudo
+ is the first insn of the shift/add sequence. */
+ && (! (tem = find_reg_note (v->insn, REG_RETVAL, NULL_RTX))
+ || (REGNO_FIRST_UID (REGNO (v->dest_reg))
+ != INSN_UID (XEXP (tem, 0)))))
/* Line above always fails if INSN was moved by loop opt. */
|| (uid_luid[REGNO_LAST_UID (REGNO (v->dest_reg))]
>= INSN_LUID (loop_end)))