summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--contrib/gcc/ChangeLog115
-rw-r--r--contrib/gcc/NEWS4
-rw-r--r--contrib/gcc/c-typeck.c2
-rw-r--r--contrib/gcc/collect2.c106
-rw-r--r--contrib/gcc/config/i386/freebsd.h6
-rw-r--r--contrib/gcc/config/i386/freebsd.h.fixed6
-rw-r--r--contrib/gcc/config/svr4.h14
-rw-r--r--contrib/gcc/cp/decl2.c6
-rw-r--r--contrib/gcc/cp/lex.c8
-rw-r--r--contrib/gcc/expr.c2
-rw-r--r--contrib/gcc/fix-header.c11
-rwxr-xr-xcontrib/gcc/fixincludes27
-rw-r--r--contrib/gcc/gcc.texi41
-rw-r--r--contrib/gcc/install.texi77
-rw-r--r--contrib/gcc/loop.c36
-rw-r--r--contrib/gcc/objc/hash.c5
-rw-r--r--contrib/gcc/stor-layout.c2
-rw-r--r--contrib/gcc/version.c2
18 files changed, 311 insertions, 159 deletions
diff --git a/contrib/gcc/ChangeLog b/contrib/gcc/ChangeLog
index 21a129d..3f955fb 100644
--- a/contrib/gcc/ChangeLog
+++ b/contrib/gcc/ChangeLog
@@ -1,3 +1,118 @@
+Sat Jun 29 12:33:39 1996 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * Version 2.7.2.1 released.
+
+Tue Jun 11 20:18:03 1996 Per Bothner <bothner@cygnus.com>
+
+ * fix-header.c (read_scna_file): Invoke FIXPROTO_INIT if defined.
+ * alpha.h (FIXPROTO_INIT): Define new macro.
+
+Fri May 10 18:35:00 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * loop.c (maybe_eliminate_biv_1): Disable all but two cases
+ of biv elimination with givs and restrict those two cases to
+ an ADD_VAL that is an address.
+
+Mon Apr 22 16:50:19 1996 Jeremy Bettis <jeremy@hksys.com>
+
+ * objc/hash.c (hash_value_for_key): Prevent endless loop when 0 was
+ stored in a hashtable.
+
+Wed Apr 17 17:53:23 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.c (expand_block_move_mem): Copy RTX_UNCHANGING_P.
+ (expand_block_move): Copy dest/src to registers using
+ copy_addr_to_reg, call expand_block_move_mem to copy all of the
+ bits.
+
+Mon Apr 8 13:46:28 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.c (output_{prolog,epilog}): For V.4/eabi systems, change
+ prologue and epilogue so that accesses beyond the current stack
+ pointer are not done like they are for AIX.
+
+Fri Mar 26 05:43:06 1996 Torbjorn Granlund <tege@noisy.matematik.su.se>
+
+ * vax.md (insv matcher): Call CC_STATUS_INIT.
+ * vax.h (NOTICE_UPDATE_CC): Handle ZERO_EXTRACT destination.
+
+Sat Mar 23 18:25:39 1996 J"orn Rennecke (amylaar@meolyon.hanse.de)
+
+ * c-typeck.c (set_init_index): Check for use outside an array
+ initializer.
+
+Sat Mar 23 09:21:40 1996 Doug Evans <dje@canuck.cygnus.com>
+
+ * sparc/sparc.h (CONDITIONAL_REGISTER_USAGE): Don't unfix %g[234]
+ if fixed with -ffixed-.
+
+Wed Mar 13 20:36:10 1996 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * mips.c (mips_expand_prologue): Change TYPE_NEEDS_CONSTRUCTING to
+ TREE_ADDRESSABLE;
+ * pa.h (ASM_DECLARE_FUNCTION_NAME): Likewise.
+
+Tue Mar 12 14:36:02 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * lex.c (real_yylex): Warn about using the `namespace' keyword.
+
+Tue Feb 27 08:18:12 1996 Richard Earnshaw (rearnsha@armltd.co.uk)
+
+ * arm.md (mov{si,sf,df}cc and matchers): All conditional move
+ patterns must have a mode.
+
+Mon Feb 19 07:35:07 1996 Torbjorn Granlund <tege@tmg.se>
+
+ * rs6000.md (not:SI with assign and compare): Fix typo.
+
+Wed Jan 24 18:00:12 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * alpha.c (alpha_write_verstamp): Only emit MS_STAMP and LS_STAMP,
+ not the extra numbers.
+
+Wed Jan 17 21:22:40 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * cp/decl2.c (grokfield): Call cplus_decl_attributes with the attrlist.
+ Pass a null tree to grokdeclarator for its ATTRLIST arg, since it's
+ only ever used for functions in it.
+
+Tue Jan 16 06:01:28 1996 Thomas Graichen <graichen@omega.physik.fu-berlin.de>
+
+ * i386/freebsd.h (ASM_WEAKEN_LABEL): Deleted; not supported.
+
+Sun Jan 7 17:11:11 1996 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * collect2.c (scan_libraries): Correct Import File ID interpretation.
+
+Thu Dec 28 22:24:53 1995 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.md (common mode functions): Add condition reg clobbers.
+
+Tue Dec 19 15:08:31 1995 Jason Merrill <jason@yorick.cygnus.com>
+
+ * collect2.c: Remove auto_export functionality.
+
+Mon Dec 18 18:40:34 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * svr4.h (ASM_IDENTIFY_GCC): Don't output stab here.
+ (ASM_IDENTIFY_GCC_AFTER_SOURCE): Output stab here instead of
+ above.
+
+Sat Dec 16 07:03:33 1995 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * stor-layout.c (layout_record): When PCC_BITFIELD_TYPE_MATTERS,
+ compute bitpos using field_size % type_align instead of field_size.
+
+Fri Dec 15 18:41:50 1995 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * fixincludes (sys/wait.h): Add forward declaration of struct rusage
+ on AIX 3.2.5.
+
+Sat Dec 9 18:05:03 1995 Jim Wilson <wilson@cygnus.com>
+
+ * expr.c (expand_expr, case INDIRECT_REF): Correct typo in May 8
+ change.
+
Sun Nov 26 14:47:42 1995 Richard Kenner <kenner@mole.gnu.ai.mit.edu>
* Version 2.7.2 released.
diff --git a/contrib/gcc/NEWS b/contrib/gcc/NEWS
index 2a665a1..9c23093 100644
--- a/contrib/gcc/NEWS
+++ b/contrib/gcc/NEWS
@@ -1,3 +1,7 @@
+Noteworthy changes in GCC version 2.7.2.1:
+
+This release fixes some serious bugs discovered since the 2.7.2 release.
+
Noteworthy changes in GCC version 2.7.2:
A few bugs have been fixed (most notably the generation of an
diff --git a/contrib/gcc/c-typeck.c b/contrib/gcc/c-typeck.c
index e9d6b2a..bae52e3 100644
--- a/contrib/gcc/c-typeck.c
+++ b/contrib/gcc/c-typeck.c
@@ -5723,6 +5723,8 @@ set_init_index (first, last)
error_init ("nonconstant array index in initializer%s", " for `%s'", NULL);
else if (last != 0 && TREE_CODE (last) != INTEGER_CST)
error_init ("nonconstant array index in initializer%s", " for `%s'", NULL);
+ else if (! constructor_unfilled_index)
+ error_init ("array index in non-array initializer%s", " for `%s'", NULL);
else if (tree_int_cst_lt (first, constructor_unfilled_index))
error_init ("duplicate array index in initializer%s", " for `%s'", NULL);
else
diff --git a/contrib/gcc/collect2.c b/contrib/gcc/collect2.c
index a74a7f0..30fb49d 100644
--- a/contrib/gcc/collect2.c
+++ b/contrib/gcc/collect2.c
@@ -255,7 +255,6 @@ static char *temp_filename; /* Base of temp filenames */
static char *c_file; /* <xxx>.c for constructor/destructor list. */
static char *o_file; /* <xxx>.o for constructor/destructor list. */
static char *export_file; /* <xxx>.x for AIX export list. */
-static int auto_export = 1; /* true if exporting everything. */
char *ldout; /* File for ld errors. */
static char *output_file; /* Output file for ld. */
static char *nm_file_name; /* pathname of nm */
@@ -1243,15 +1242,6 @@ main (argc, argv)
}
break;
-#ifdef COLLECT_EXPORT_LIST
- case 'b':
- if ((!strncmp (arg, "-bE:", 4)
- || !strncmp (arg, "-bexport:", 9))
- && strcmp (arg, "-bexport:/usr/lib/libg.exp"))
- auto_export = 0;
- break;
-#endif
-
case 'l':
if (first_file)
{
@@ -2554,8 +2544,6 @@ scan_prog_file (prog_name, which_pass)
break;
default: /* not a constructor or destructor */
- if (which_pass == PASS_OBJ && auto_export)
- add_to_list (&exports, name);
continue;
}
@@ -2606,62 +2594,72 @@ scan_libraries (prog_name)
{
LDHDR ldh;
char *impbuf;
- int idx;
+ int entry;
+
FSEEK (ldptr, ldsh.s_scnptr, BEGINNING);
- FREAD (&ldh, sizeof ldh, 1, ldptr);
+ FREAD (&ldh, sizeof (ldh), 1, ldptr);
/* read import library list */
impbuf = alloca (ldh.l_istlen);
FSEEK (ldptr, ldh.l_impoff + ldsh.s_scnptr, BEGINNING);
FREAD (impbuf, ldh.l_istlen, 1, ldptr);
- idx = strlen (impbuf) + 1;
- idx += strlen (impbuf+idx) + 1;
+
if (debug)
fprintf (stderr, "LIBPATH=%s\n", impbuf);
prefix_from_string (impbuf, &libpath);
- while (idx < ldh.l_istlen)
+
+ /* skip LIBPATH and empty base and member fields */
+ impbuf += strlen (impbuf) + 3;
+ for (entry = 1; entry < ldh.l_nimpid; ++entry)
{
- char *implib = impbuf + idx;
+ char *impath = impbuf;
+ char *implib = impath + strlen (impath) + 1;
char *impmem = implib + strlen (implib) + 1;
- char *soname = 0;
+ char *soname = NULL;
+ char *trial;
+ int pathlen;
LDFILE *libptr = NULL;
struct prefix_list *pl;
ARCHDR ah;
- idx += strlen (implib) + 1;
- if (!implib[0])
+
+ impbuf = impmem + strlen (impmem) + 1;
+ if (debug)
+ fprintf (stderr, "PATH+BASE=%s%s\n", impath, implib);
+ /* Skip AIX kernel exports */
+ if (*impath == '/' && *(impath+1) == '\0'
+ && strcmp (implib, "unix") == 0)
continue;
- idx += strlen (impmem) + 1;
- if (*implib == '/')
+ pathlen = strlen (impath);
+ trial = alloca (MAX (pathlen + 1, libpath.max_len)
+ + strlen (implib) + 1);
+ if (*impath)
{
- if (access (soname, R_OK) == 0)
- soname = implib;
+ strcpy (trial, impath);
+ if (impath[pathlen - 1] != '/')
+ trial[pathlen++] = '/';
+ strcpy (trial + pathlen, implib);
+ if (access (trial, R_OK) == 0)
+ soname = trial;
}
else
- {
- char *temp = alloca (libpath.max_len + strlen (implib) + 1);
- for (pl = libpath.plist; pl; pl = pl->next)
- {
- strcpy (temp, pl->prefix);
- strcat (temp, implib);
- if (access (temp, R_OK) == 0)
- {
- soname = temp;
- break;
- }
- }
- }
- if (!soname)
- {
- fatal ("%s: library not found", implib);
- continue;
- }
+ for (pl = libpath.plist; pl; pl = pl->next)
+ {
+ strcpy (trial, pl->prefix);
+ strcat (trial, implib);
+ if (access (trial, R_OK) == 0)
+ {
+ soname = trial;
+ break;
+ }
+ }
+
+ if (! soname)
+ fatal ("%s: library not found", implib);
if (debug)
- {
- if (impmem[0])
- fprintf (stderr, "%s (%s)\n", soname, impmem);
- else
- fprintf (stderr, "%s\n", soname);
- }
- ah.ar_name[0] = 0;
+ if (*impmem)
+ fprintf (stderr, "%s (%s)\n", soname, impmem);
+ else
+ fprintf (stderr, "%s\n", soname);
+
do
{
/* scan imported shared objects for GCC GLOBAL ctors */
@@ -2671,7 +2669,7 @@ scan_libraries (prog_name)
if (TYPE (libptr) == ARTYPE)
{
LDFILE *memptr;
- if (!impmem[0])
+ if (! *impmem)
fatal ("%s: no archive member specified", soname);
ldahread (libptr, &ah);
if (strcmp (ah.ar_name, impmem))
@@ -2688,12 +2686,12 @@ scan_libraries (prog_name)
if (!ldnshread (libptr, _LOADER, &soldsh))
fatal ("%s: not an import library", soname);
FSEEK (libptr, soldsh.s_scnptr, BEGINNING);
- if (FREAD (&soldh, sizeof soldh, 1, libptr) != 1)
+ if (FREAD (&soldh, sizeof (soldh), 1, libptr) != 1)
fatal ("%s: can't read loader section", soname);
/*fprintf (stderr, "\tscanning %s\n", soname);*/
symcnt = soldh.l_nsyms;
- lsyms = (LDSYM*) alloca (symcnt * sizeof *lsyms);
- symcnt = FREAD (lsyms, sizeof *lsyms, symcnt, libptr);
+ lsyms = (LDSYM*) alloca (symcnt * sizeof (*lsyms));
+ symcnt = FREAD (lsyms, sizeof (*lsyms), symcnt, libptr);
ldstrings = alloca (soldh.l_stlen);
FSEEK (libptr, soldsh.s_scnptr+soldh.l_stoff, BEGINNING);
FREAD (ldstrings, soldh.l_stlen, 1, libptr);
diff --git a/contrib/gcc/config/i386/freebsd.h b/contrib/gcc/config/i386/freebsd.h
index 72fcdd1..c4e9991 100644
--- a/contrib/gcc/config/i386/freebsd.h
+++ b/contrib/gcc/config/i386/freebsd.h
@@ -120,12 +120,6 @@ Boston, MA 02111-1307, USA. */
#define TYPE_ASM_OP ".type"
#define SIZE_ASM_OP ".size"
-/* This is how we tell the assembler that a symbol is weak. */
-
-#define ASM_WEAKEN_LABEL(FILE,NAME) \
- do { fputs ("\t.weak\t", FILE); assemble_name (FILE, NAME); \
- fputc ('\n', FILE); } while (0)
-
/* The following macro defines the format used to output the second
operand of the .type assembler directive. Different svr4 assemblers
expect various different forms for this operand. The one given here
diff --git a/contrib/gcc/config/i386/freebsd.h.fixed b/contrib/gcc/config/i386/freebsd.h.fixed
index 72fcdd1..c4e9991 100644
--- a/contrib/gcc/config/i386/freebsd.h.fixed
+++ b/contrib/gcc/config/i386/freebsd.h.fixed
@@ -120,12 +120,6 @@ Boston, MA 02111-1307, USA. */
#define TYPE_ASM_OP ".type"
#define SIZE_ASM_OP ".size"
-/* This is how we tell the assembler that a symbol is weak. */
-
-#define ASM_WEAKEN_LABEL(FILE,NAME) \
- do { fputs ("\t.weak\t", FILE); assemble_name (FILE, NAME); \
- fputc ('\n', FILE); } while (0)
-
/* The following macro defines the format used to output the second
operand of the .type assembler directive. Different svr4 assemblers
expect various different forms for this operand. The one given here
diff --git a/contrib/gcc/config/svr4.h b/contrib/gcc/config/svr4.h
index bc80297..41c6ffa 100644
--- a/contrib/gcc/config/svr4.h
+++ b/contrib/gcc/config/svr4.h
@@ -273,15 +273,23 @@ do { \
#define DBX_BLOCKS_FUNCTION_RELATIVE 1
/* When using stabs, gcc2_compiled must be a stabs entry, not an
- ordinary symbol, or gdb won't see it. The stabs entry must be
- before the N_SO in order for gdb to find it. */
+ ordinary symbol, or gdb won't see it. Furthermore, since gdb reads
+ the input piecemeal, starting with each N_SO, it's a lot easier if
+ the gcc2 flag symbol is *after* the N_SO rather than before it. So
+ we emit an N_OPT stab there. */
#define ASM_IDENTIFY_GCC(FILE) \
do \
{ \
if (write_symbols != DBX_DEBUG) \
fputs ("gcc2_compiled.:\n", FILE); \
- else \
+ } \
+while (0)
+
+#define ASM_IDENTIFY_GCC_AFTER_SOURCE(FILE) \
+do \
+ { \
+ if (write_symbols == DBX_DEBUG) \
fputs ("\t.stabs\t\"gcc2_compiled.\", 0x3c, 0, 0, 0\n", FILE); \
} \
while (0)
diff --git a/contrib/gcc/cp/decl2.c b/contrib/gcc/cp/decl2.c
index 7a3f7d5..9b7f88e 100644
--- a/contrib/gcc/cp/decl2.c
+++ b/contrib/gcc/cp/decl2.c
@@ -1363,7 +1363,7 @@ grokfield (declarator, declspecs, raises, init, asmspec_tree, attrlist)
init = NULL_TREE;
value = grokdeclarator (declarator, declspecs, FIELD, init != 0,
- raises, attrlist);
+ raises, NULL_TREE);
if (! value)
return value; /* friend or constructor went bad. */
@@ -1477,6 +1477,10 @@ grokfield (declarator, declspecs, raises, init, asmspec_tree, attrlist)
/* The corresponding pop_obstacks is in cp_finish_decl. */
push_obstacks_nochange ();
+ if (attrlist)
+ cplus_decl_attributes (value, TREE_PURPOSE (attrlist),
+ TREE_VALUE (attrlist));
+
if (TREE_CODE (value) == VAR_DECL)
{
/* We cannot call pushdecl here, because that would
diff --git a/contrib/gcc/cp/lex.c b/contrib/gcc/cp/lex.c
index 1861f9e..22763f5 100644
--- a/contrib/gcc/cp/lex.c
+++ b/contrib/gcc/cp/lex.c
@@ -3313,6 +3313,14 @@ real_yylex ()
token_buffer[0] = '^';
token_buffer[1] = 0;
}
+ else if (ptr->token == NAMESPACE)
+ {
+ static int warned;
+ if (! warned)
+ warning ("namespaces are mostly broken in this version of g++");
+
+ warned = 1;
+ }
value = (int) ptr->token;
}
diff --git a/contrib/gcc/expr.c b/contrib/gcc/expr.c
index 2d307a2..39591c9 100644
--- a/contrib/gcc/expr.c
+++ b/contrib/gcc/expr.c
@@ -4582,7 +4582,7 @@ expand_expr (exp, target, tmode, modifier)
through a pointer to const does not mean that the value there can
never change. Languages where it can never change should
also set TREE_STATIC. */
- RTX_UNCHANGING_P (temp) = TREE_READONLY (exp) | TREE_STATIC (exp);
+ RTX_UNCHANGING_P (temp) = TREE_READONLY (exp) & TREE_STATIC (exp);
return temp;
}
diff --git a/contrib/gcc/fix-header.c b/contrib/gcc/fix-header.c
index 53e5c06..7059d12 100644
--- a/contrib/gcc/fix-header.c
+++ b/contrib/gcc/fix-header.c
@@ -531,7 +531,18 @@ read_scan_file (in_fname, argc, argv)
push_parse_file (&scan_in, in_fname);
CPP_OPTIONS (&scan_in)->no_line_commands = 1;
+#ifdef FIXPROTO_INIT
+ /* Some targets may assume special definitions (for example
+ OSF header files assume __LANGUAGE_C__). These macros
+ are normally passed to cpplib by gcc - but we here invoke
+ cpplib directly, without going through gcc.
+ Handle these and other target-dependent initializations here. */
+ FIXPROTO_INIT (&scan_in);
+#endif
+
+ /* Actually (pre-)process the header file. */
scan_decls (&scan_in, argc, argv);
+
check_macro_names (&scan_in, include_entry->required);
check_macro_names (&scan_in, include_entry->extra);
diff --git a/contrib/gcc/fixincludes b/contrib/gcc/fixincludes
index ba6781d..cc8801d 100755
--- a/contrib/gcc/fixincludes
+++ b/contrib/gcc/fixincludes
@@ -1520,6 +1520,33 @@ if [ -r ${LIB}/$file ]; then
fi
fi
+# sys/wait.h on AIX 3.2.5 puts the declaration of wait3 before the definition
+# of struct rusage, so the prototype (added by fixproto) causes havoc.
+file=sys/wait.h
+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
+fi
+
+if [ -r ${LIB}/$file ] \
+ && grep 'bos325,' ${LIB}/$file >/dev/null; then
+ echo Fixing $file, wait3 declaration
+ sed -e '/^extern pid_t wait3();$/i\
+struct rusage;
+'\
+ ${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
+ else
+ # Find any include directives that use "file".
+ for include in `egrep '^[ ]*#[ ]*include[ ]*"[^/]' ${LIB}/$file | sed -e 's/^[ ]*#[ ]*include[ ]*"\([^"]*\)".*$/\1/'`; do
+ dir=`echo $file | sed -e s'|/[^/]*$||'`
+ required="$required ${INPUT} $dir/$include ${LIB}/$dir/$include"
+ done
+ fi
+fi
+
# NeXT 2.0 defines 'int wait(union wait*)', which conflicts with Posix.1.
# Note that version 3 of the NeXT system has wait.h in a different directory,
# so that this code won't do anything. But wait.h in version 3 has a
diff --git a/contrib/gcc/gcc.texi b/contrib/gcc/gcc.texi
index 7c6b056..f858591 100644
--- a/contrib/gcc/gcc.texi
+++ b/contrib/gcc/gcc.texi
@@ -147,11 +147,11 @@ original English.
@sp 2
@center Richard M. Stallman
@sp 3
-@center Last updated 26 November 1995
+@center Last updated 29 June 1996
@sp 1
@c The version number appears twice more in this file.
-@center for version 2.7.2
+@center for version 2.7.2.1
@page
@vskip 0pt plus 1filll
Copyright @copyright{} 1988, 89, 92, 93, 94, 1995 Free Software Foundation, Inc.
@@ -904,18 +904,23 @@ the ones who have actually sued. Apple's lawsuit was defeated, for
reasons only partly related to the general issue of interface copyright.
Lotus won lawsuits against two small companies, which were thus put out
-of business. Then they sued Borland; they won in the trial court (no
+of business. Then Lotus sued Borland; Lotus won in the trial court (no
surprise, since it was the same court that had ruled for Lotus twice
-before), but the decision was reversed by the court of appeals, with
-help from the League for Programming Freedom in the form of a
-friend-of-the-court brief. We are now waiting to see if the Supreme
-Court will hear the case. If it does, the League for Programming
-Freedom will again submit a brief.
-
-The battle is not over. Just this summer a company that produced a
-simulator for a CDC computer was shut down by a copyright lawsuit by
-CDC, which charged that the simulator infringed the copyright on the
-manuals for the computer.
+before), but the court of appeals ruled in favor of Borland, which was
+assisted by a friend-of-the-court brief from the League for Programming
+Freedom.
+
+Lotus appealed the case to the Supreme Court, which heard the case but
+was unable to reach a decision. This failure means that the appeals
+court decision stands, in one portion of the United States, and may
+influence the other appeals courts, but it does not set a nationwide
+precedent. The battle is not over, and it is not limited to the United
+States.
+
+The battle is extending into other areas of software as well. In 1995 a
+company that produced a simulator for a CDC computer was shut down by a
+copyright lawsuit, in which CDC charged that the simulator infringed the
+copyright on the manuals for the computer.
If the monopolists get their way, they will hobble the software field:
@@ -1238,11 +1243,11 @@ GNU CC. The fix is to get rid of the file @code{real-ld} which purify
installs---so that GNU CC won't try to use it.
@item
-On Linux SLS 1.01, there is a problem with @file{libc.a}: it does not
-contain the obstack functions. However, GNU CC assumes that the obstack
-functions are in @file{libc.a} when it is the GNU C library. To work
-around this problem, change the @code{__GNU_LIBRARY__} conditional
-around line 31 to @samp{#if 1}.
+On SLS 1.01, a Linux-based GNU system, there is a problem with
+@file{libc.a}: it does not contain the obstack functions. However, GNU
+CC assumes that the obstack functions are in @file{libc.a} when it is
+the GNU C library. To work around this problem, change the
+@code{__GNU_LIBRARY__} conditional around line 31 to @samp{#if 1}.
@item
On some 386 systems, building the compiler never finishes because
diff --git a/contrib/gcc/install.texi b/contrib/gcc/install.texi
index 0a4c99b..962a6e7 100644
--- a/contrib/gcc/install.texi
+++ b/contrib/gcc/install.texi
@@ -778,82 +778,45 @@ first three arguments in function calls in registers. Structures are no
longer a multiple of 2 bytes.
@item hppa*-*-*
-There are two variants of this CPU, called 1.0 and 1.1, which have
-different machine descriptions. You must use the right one for your
-machine. All 7@var{nn} machines and 8@var{n}7 machines use 1.1, while
-all other 8@var{nn} machines use 1.0.
-
-The easiest way to handle this problem is to use @samp{configure
-hp@var{nnn}} or @samp{configure hp@var{nnn}-hpux}, where @var{nnn} is
-the model number of the machine. Then @file{configure} will figure out
-if the machine is a 1.0 or 1.1. Use @samp{uname -a} to find out the
-model number of your machine.
+There are several variants of the HP-PA processor which run a variety
+of operating systems. GNU CC must be configured to use the correct
+processor type and operating system, or GNU CC will not function correctly.
+The easiest way to handle this problem is to @emph{not} specify a target
+when configuring GNU CC, the @file{configure} script will try to automatically
+determine the right processor type and operating system.
@samp{-g} does not work on HP-UX, since that system uses a peculiar
debugging format which GNU CC does not know about. However, @samp{-g}
will work if you also use GAS and GDB in conjunction with GCC. We
highly recommend using GAS for all HP-PA configurations.
-You should be using GAS-2.3 (or later) along with GDB-4.12 (or later). These
+You should be using GAS-2.6 (or later) along with GDB-4.16 (or later). These
can be retrieved from all the traditional GNU ftp archive sites.
-Build GAS and install the resulting binary as:
-
-@example
-/usr/local/lib/gcc-lib/@var{configuration}/@var{gccversion}/as
-@end example
-
-@noindent
-where @var{configuration} is the configuration name (perhaps
-@samp{hp@var{nnn}-hpux}) and @var{gccversion} is the GNU CC version
-number. Do this @emph{before} starting the build process, otherwise you will
-get errors from the HPUX assembler while building @file{libgcc2.a}. The
-command
-
-@example
-make install-dir
-@end example
-
-@noindent
-will create the necessary directory hierarchy so you can install GAS before
-building GCC.
-
-To enable debugging, configure GNU CC with the @samp{--with-gnu-as} option
-before building.
+GAS will need to be installed into a directory before @code{/bin},
+@code{/usr/bin}, and @code{/usr/ccs/bin} in your search path. You
+should install GAS before you build GNU CC.
-It has been reported that GNU CC produces invalid assembly code for
-1.1 machines running HP-UX 8.02 when using the HP assembler. Typically
-the errors look like this:
-@example
-as: bug.s @@line#15 [err#1060]
- Argument 0 or 2 in FARG upper
- - lookahead = ARGW1=FR,RTNVAL=GR
-as: foo.s @@line#28 [err#1060]
- Argument 0 or 2 in FARG upper
- - lookahead = ARGW1=FR
-@end example
-
-You can check the version of HP-UX you are running by executing the command
-@samp{uname -r}. If you are indeed running HP-UX 8.02 on a PA and
-using the HP assembler then configure GCC with "hp@var{nnn}-hpux8.02".
+To enable debugging, you must configure GNU CC with the @samp{--with-gnu-as}
+option before building.
@item i370-*-*
This port is very preliminary and has many known bugs. We hope to
have a higher-quality port for this machine soon.
@item i386-*-linuxoldld
-Use this configuration to generate a.out binaries on Linux if you do not
-have gas/binutils version 2.5.2 or later installed. This is an obsolete
-configuration.
+Use this configuration to generate a.out binaries on Linux-based GNU
+systems, if you do not have gas/binutils version 2.5.2 or later
+installed. This is an obsolete configuration.
@item i386-*-linuxaout
-Use this configuration to generate a.out binaries on Linux. This configuration
-is being superseded. You must use gas/binutils version 2.5.2 or
-later.
+Use this configuration to generate a.out binaries on Linux-based GNU
+systems. This configuration is being superseded. You must use
+gas/binutils version 2.5.2 or later.
@item i386-*-linux
-Use this configuration to generate ELF binaries on Linux. You must
-use gas/binutils version 2.5.2 or later.
+Use this configuration to generate ELF binaries on Linux-based GNU
+systems. You must use gas/binutils version 2.5.2 or later.
@item i386-*-sco
Compilation with RCC is recommended. Also, it may be a good idea to
diff --git a/contrib/gcc/loop.c b/contrib/gcc/loop.c
index 8711cc0..338f968 100644
--- a/contrib/gcc/loop.c
+++ b/contrib/gcc/loop.c
@@ -6041,13 +6041,16 @@ maybe_eliminate_biv_1 (x, insn, bl, eliminate_p, where)
{
/* Can replace with any giv that was reduced and
that has (MULT_VAL != 0) and (ADD_VAL == 0).
- Require a constant for MULT_VAL, so we know it's nonzero. */
+ Require a constant for MULT_VAL, so we know it's nonzero.
+ ??? We disable this optimization to avoid potential
+ overflows. */
for (v = bl->giv; v; v = v->next_iv)
if (CONSTANT_P (v->mult_val) && v->mult_val != const0_rtx
&& v->add_val == const0_rtx
&& ! v->ignore && ! v->maybe_dead && v->always_computable
- && v->mode == mode)
+ && v->mode == mode
+ && 0)
{
if (! eliminate_p)
return 1;
@@ -6067,12 +6070,19 @@ maybe_eliminate_biv_1 (x, insn, bl, eliminate_p, where)
/* Look for a giv with (MULT_VAL != 0) and (ADD_VAL != 0);
replace test insn with a compare insn (cmp REDUCED_GIV ADD_VAL).
- Require a constant for MULT_VAL, so we know it's nonzero. */
+ Require a constant for MULT_VAL, so we know it's nonzero.
+ ??? Do this only if ADD_VAL is a pointer to avoid a potential
+ overflow problem. */
for (v = bl->giv; v; v = v->next_iv)
if (CONSTANT_P (v->mult_val) && v->mult_val != const0_rtx
&& ! v->ignore && ! v->maybe_dead && v->always_computable
- && v->mode == mode)
+ && v->mode == mode
+ && (GET_CODE (v->add_val) == SYMBOL_REF
+ || GET_CODE (v->add_val) == LABEL_REF
+ || GET_CODE (v->add_val) == CONST
+ || (GET_CODE (v->add_val) == REG
+ && REGNO_POINTER_FLAG (REGNO (v->add_val)))))
{
if (! eliminate_p)
return 1;
@@ -6127,7 +6137,11 @@ maybe_eliminate_biv_1 (x, insn, bl, eliminate_p, where)
for (v = bl->giv; v; v = v->next_iv)
if (CONSTANT_P (v->mult_val) && INTVAL (v->mult_val) > 0
- && CONSTANT_P (v->add_val)
+ && (GET_CODE (v->add_val) == SYMBOL_REF
+ || GET_CODE (v->add_val) == LABEL_REF
+ || GET_CODE (v->add_val) == CONST
+ || (GET_CODE (v->add_val) == REG
+ && REGNO_POINTER_FLAG (REGNO (v->add_val))))
&& ! v->ignore && ! v->maybe_dead && v->always_computable
&& v->mode == mode)
{
@@ -6160,12 +6174,14 @@ maybe_eliminate_biv_1 (x, insn, bl, eliminate_p, where)
}
/* Look for giv with positive constant mult_val and nonconst add_val.
- Insert insns to calculate new compare value. */
+ Insert insns to calculate new compare value.
+ ??? Turn this off due to possible overflow. */
for (v = bl->giv; v; v = v->next_iv)
if (CONSTANT_P (v->mult_val) && INTVAL (v->mult_val) > 0
&& ! v->ignore && ! v->maybe_dead && v->always_computable
- && v->mode == mode)
+ && v->mode == mode
+ && 0)
{
rtx tem;
@@ -6191,12 +6207,14 @@ maybe_eliminate_biv_1 (x, insn, bl, eliminate_p, where)
if (invariant_p (arg) == 1)
{
/* Look for giv with constant positive mult_val and nonconst
- add_val. Insert insns to compute new compare value. */
+ add_val. Insert insns to compute new compare value.
+ ??? Turn this off due to possible overflow. */
for (v = bl->giv; v; v = v->next_iv)
if (CONSTANT_P (v->mult_val) && INTVAL (v->mult_val) > 0
&& ! v->ignore && ! v->maybe_dead && v->always_computable
- && v->mode == mode)
+ && v->mode == mode
+ && 0)
{
rtx tem;
diff --git a/contrib/gcc/objc/hash.c b/contrib/gcc/objc/hash.c
index 3391274..a307759 100644
--- a/contrib/gcc/objc/hash.c
+++ b/contrib/gcc/objc/hash.c
@@ -243,9 +243,10 @@ hash_value_for_key (cache_ptr cache, const void *key)
if (node)
do {
- if ((*cache->compare_func)(node->key, key))
+ if ((*cache->compare_func)(node->key, key)) {
retval = node->value;
- else
+ break;
+ } else
node = node->next;
} while (!retval && node);
diff --git a/contrib/gcc/stor-layout.c b/contrib/gcc/stor-layout.c
index 8cdbf86..e743c37 100644
--- a/contrib/gcc/stor-layout.c
+++ b/contrib/gcc/stor-layout.c
@@ -437,7 +437,7 @@ layout_record (rec)
That can happen because the width exceeds BIGGEST_ALIGNMENT
or because it exceeds maximum_field_alignment. */
if (const_size / type_align
- != (const_size + field_size - 1) / type_align)
+ != (const_size + (field_size % type_align) - 1) / type_align)
const_size = CEIL (const_size, type_align) * type_align;
}
#endif
diff --git a/contrib/gcc/version.c b/contrib/gcc/version.c
index 4afca56..3480e3f 100644
--- a/contrib/gcc/version.c
+++ b/contrib/gcc/version.c
@@ -1 +1 @@
-char *version_string = "2.7.2";
+char *version_string = "2.7.2.1";
OpenPOWER on IntegriCloud