Import of 2.7.2.1 into vendor branch
This commit is contained in:
parent
a4cd5630b0
commit
9882643d04
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
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.
|
||||
|
||||
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.
|
||||
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
|
||||
|
@ -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:
|
||||
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.
|
||||
|
||||
@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.
|
||||
|
||||
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
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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
|
||||
|
@ -1 +1 @@
|
||||
char *version_string = "2.7.2";
|
||||
char *version_string = "2.7.2.1";
|
||||
|
Loading…
Reference in New Issue
Block a user