* defs.h: Include ansidecl.h and PARAMS macro. Use PARAMS

to make prototypes for all functions declared here.
* cplus-dem.c:  Avoid declaring xmalloc and xrealloc.
* c-exp.y:  Rename SIGNED, OR, and AND to avoid conflict.
* environ.c:  Include <stdio.h> before defs.h.  Minor cleanup.
* ieee-float.h:  Use PARAMS for prototypes; make some params const.
* ieee-float.c, valarith.c:  Include <stdio.h>.  Lint.  b*=>mem*.
* m2-exp.y:  Remove unused CONST; Rename OR and AND.
* utils.c:  Avoid declaring malloc and realloc.  Lint.
(request_quit):  Accept signal-number parameter.
This commit is contained in:
John Gilmore 1992-02-20 19:23:42 +00:00
parent 8b87cbae28
commit 088c3a0b74
8 changed files with 126 additions and 89 deletions

View file

@ -1,3 +1,16 @@
Thu Feb 20 09:04:18 1992 John Gilmore (gnu at cygnus.com)
* defs.h: Include ansidecl.h and PARAMS macro. Use PARAMS
to make prototypes for all functions declared here.
* cplus-dem.c: Avoid declaring xmalloc and xrealloc.
* c-exp.y: Rename SIGNED, OR, and AND to avoid conflict.
* environ.c: Include <stdio.h> before defs.h. Minor cleanup.
* ieee-float.h: Use PARAMS for prototypes; make some params const.
* ieee-float.c, valarith.c: Include <stdio.h>. Lint. b*=>mem*.
* m2-exp.y: Remove unused CONST; Rename OR and AND.
* utils.c: Avoid declaring malloc and realloc. Lint.
(request_quit): Accept signal-number parameter.
Mon Feb 17 07:13:27 1992 Fred Fish (fnf at cygnus.com)
* dwarfread.c (process_dies): Add case to handle TAG_pointer_type

View file

@ -142,7 +142,7 @@ int yyparse ();
/* Special type cases, put in to allow the parser to distinguish different
legal basetypes. */
%token SIGNED LONG SHORT INT_KEYWORD
%token SIGNED_KEYWORD LONG SHORT INT_KEYWORD
%token <lval> LAST REGNAME
@ -157,8 +157,8 @@ int yyparse ();
%left ABOVE_COMMA
%right '=' ASSIGN_MODIFY
%right '?'
%left OR
%left AND
%left OROR
%left ANDAND
%left '|'
%left '^'
%left '&'
@ -362,11 +362,11 @@ exp : exp '|' exp
{ write_exp_elt_opcode (BINOP_LOGIOR); }
;
exp : exp AND exp
exp : exp ANDAND exp
{ write_exp_elt_opcode (BINOP_AND); }
;
exp : exp OR exp
exp : exp OROR exp
{ write_exp_elt_opcode (BINOP_OR); }
;
@ -830,9 +830,9 @@ typebase
{ $$ = lookup_unsigned_typename (TYPE_NAME($2.type)); }
| UNSIGNED
{ $$ = builtin_type_unsigned_int; }
| SIGNED typename
| SIGNED_KEYWORD typename
{ $$ = $2.type; }
| SIGNED
| SIGNED_KEYWORD
{ $$ = builtin_type_int; }
| TEMPLATE name '<' type '>'
{ $$ = lookup_template_type(copy_name($2), $4,
@ -1028,8 +1028,8 @@ const static struct token tokentab2[] =
{"++", INCREMENT, BINOP_END},
{"--", DECREMENT, BINOP_END},
{"->", ARROW, BINOP_END},
{"&&", AND, BINOP_END},
{"||", OR, BINOP_END},
{"&&", ANDAND, BINOP_END},
{"||", OROR, BINOP_END},
{"::", COLONCOLON, BINOP_END},
{"<<", LSH, BINOP_END},
{">>", RSH, BINOP_END},
@ -1305,7 +1305,7 @@ yylex ()
if (!strncmp (tokstart, "struct", 6))
return STRUCT;
if (!strncmp (tokstart, "signed", 6))
return SIGNED;
return SIGNED_KEYWORD;
if (!strncmp (tokstart, "sizeof", 6))
return SIZEOF;
break;

View file

@ -86,8 +86,8 @@ extern char *cplus_demangle ();
#ifdef __STDC__
/* GDB prototypes these as void* in defs.h, so we better too, at least
as long as we're including defs.h. */
extern void *xmalloc (int);
extern void *xrealloc (char *, int);
/* FIXME extern void *xmalloc (int);
extern void *xrealloc (char *, int); */
extern void free (void *);
#else
extern char *xmalloc ();

View file

@ -17,6 +17,8 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#include <stdio.h>
#include "defs.h"
#include "ieee-float.h"
#include <math.h> /* ldexp */
@ -27,7 +29,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
void
ieee_extended_to_double (ext_format, from, to)
struct ext_format *ext_format;
const struct ext_format *ext_format;
char *from;
double *to;
{
@ -35,8 +37,8 @@ ieee_extended_to_double (ext_format, from, to)
double dto;
unsigned long mant0, mant1, exponent;
bcopy (&from[MANBYTE_H], &mant0, 4);
bcopy (&from[MANBYTE_L], &mant1, 4);
memcpy (&mant0, &from[MANBYTE_H], 4);
memcpy (&mant1, &from[MANBYTE_L], 4);
exponent = ((ufrom[EXPBYTE_H] & (unsigned char)~SIGNMASK) << 8) | ufrom[EXPBYTE_L];
#if 0
@ -68,7 +70,7 @@ ieee_extended_to_double (ext_format, from, to)
void
double_to_ieee_extended (ext_format, from, to)
struct ext_format *ext_format;
const struct ext_format *ext_format;
double *from;
char *to;
{
@ -93,8 +95,8 @@ double_to_ieee_extended (ext_format, from, to)
/* The following code assumes that the host has IEEE doubles. FIXME-someday.
It also assumes longs are 32 bits! FIXME-someday. */
bcopy (from, twolongs, 8);
bcopy (from, tobytes, 8);
memcpy (twolongs, from, 8);
memcpy (tobytes, from, 8);
#if HOST_BYTE_ORDER == BIG_ENDIAN
exponent = ((tobytes[1] & 0xF0) >> 4) | (tobytes[0] & 0x7F) << 4;
mant0 = (twolongs[0] << 11) | twolongs[1] >> 21;
@ -118,8 +120,8 @@ double_to_ieee_extended (ext_format, from, to)
to[EXPBYTE_H] |= (unsigned char)(exponent >> 8); /* Retain sign */
to[EXPBYTE_L] = (unsigned char) exponent;
bcopy (&mant0, &to[MANBYTE_H], 4);
bcopy (&mant1, &to[MANBYTE_L], 4);
memcpy (&to[MANBYTE_H], &mant0, 4);
memcpy (&to[MANBYTE_L], &mant1, 4);
}

View file

@ -17,6 +17,9 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#if !defined (IEEE_FLOAT_H)
#define IEEE_FLOAT_H 1
/* Parameters for extended float format: */
struct ext_format {
@ -49,18 +52,12 @@ struct ext_format {
Store the double in *TO. */
extern void
ieee_extended_to_double (
#ifdef __STDC__
struct ext_format *ext_format, char *from, double *to
#endif
);
ieee_extended_to_double PARAMS ((const struct ext_format *, char *, double *));
/* The converse: convert the double *FROM to an extended float
and store where TO points. */
void
double_to_ieee_extended (
#ifdef __STDC__
struct ext_format *ext_format, double *from, char *to
#endif
);
extern void
double_to_ieee_extended PARAMS ((const struct ext_format *, double *, char *));
#endif /* defined (IEEE_FLOAT_H) */

View file

@ -128,7 +128,7 @@ char *make_qualname();
nonterminal "name", which matches either NAME or TYPENAME. */
%token <sval> STRING
%token <sval> NAME BLOCKNAME IDENT CONST VARNAME
%token <sval> NAME BLOCKNAME IDENT VARNAME
%token <sval> TYPENAME
%token SIZE CAP ORD HIGH ABS MIN_FUNC MAX_FUNC FLOAT_FUNC VAL CHR ODD TRUNC
@ -146,8 +146,8 @@ char *make_qualname();
%left ABOVE_COMMA
%nonassoc ASSIGN
%left '<' '>' LEQ GEQ '=' NOTEQUAL '#' IN
%left OR
%left AND '&'
%left OROR
%left ANDAND '&'
%left '@'
%left '+' '-'
%left '*' '/' DIV MOD
@ -415,7 +415,7 @@ exp : exp '>' exp
{ write_exp_elt_opcode (BINOP_GTR); }
;
exp : exp AND exp
exp : exp ANDAND exp
{ write_exp_elt_opcode (BINOP_AND); }
;
@ -423,7 +423,7 @@ exp : exp '&' exp
{ write_exp_elt_opcode (BINOP_AND); }
;
exp : exp OR exp
exp : exp OROR exp
{ write_exp_elt_opcode (BINOP_OR); }
;
@ -790,9 +790,9 @@ struct keyword {
static struct keyword keytab[] =
{
{"OR" , OR },
{"OR" , OROR },
{"IN", IN },/* Note space after IN */
{"AND", AND },
{"AND", ANDAND },
{"ABS", ABS },
{"CHR", CHR },
{"DEC", DEC },

View file

@ -36,8 +36,6 @@ extern volatile void return_to_top_level ();
extern volatile void exit ();
extern char *gdb_readline ();
extern char *getenv();
extern char *malloc();
extern char *realloc();
/* If this definition isn't overridden by the header files, assume
that isatty and fileno exist on this system. */
@ -166,6 +164,21 @@ free_current_contents (location)
{
free (*location);
}
/* Provide a known function that does nothing, to use as a base for
for a possibly long chain of cleanups. This is useful where we
use the cleanup chain for handling normal cleanups as well as dealing
with cleanups that need to be done as a result of a call to error().
In such cases, we may not be certain where the first cleanup is, unless
we have a do-nothing one to always use as the base. */
/* ARGSUSED */
void
null_cleanup (arg)
char **arg;
{
}
/* Provide a hook for modules wishing to print their own warning messages
to set up the terminal state in a compatible way, without them having
@ -417,13 +430,14 @@ quit ()
/* Control C comes here */
void
request_quit ()
request_quit (signo)
int signo;
{
quit_flag = 1;
#ifdef USG
/* Restore the signal handler. */
signal (SIGINT, request_quit);
signal (signo, request_quit);
#endif
if (immediate_quit)
@ -461,7 +475,7 @@ myread (desc, addr, len)
char *
savestring (ptr, size)
char *ptr;
const char *ptr;
int size;
{
register char *p = (char *) xmalloc (size + 1);
@ -619,16 +633,15 @@ parse_escape (string_ptr)
}
}
/* Print the character CH on STREAM as part of the contents
/* Print the character C on STREAM as part of the contents
of a literal string whose delimiter is QUOTER. */
void
printchar (ch, stream, quoter)
unsigned char ch;
printchar (c, stream, quoter)
register int c;
FILE *stream;
int quoter;
{
register int c = ch;
if (c < 040 || (sevenbit_strings && c >= 0177)) {
switch (c)
@ -788,7 +801,7 @@ wrap_here(indent)
void
fputs_filtered (linebuffer, stream)
char *linebuffer;
const char *linebuffer;
FILE *stream;
{
char *lineptr;

View file

@ -1,38 +1,40 @@
/* Perform arithmetic and other operations on values, for GDB.
Copyright (C) 1986, 1989 Free Software Foundation, Inc.
Copyright 1986, 1989, 1991 Free Software Foundation, Inc.
This file is part of GDB.
GDB is free software; you can redistribute it and/or modify
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 Free Software Foundation; either version 1, or (at your option)
any later version.
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
GDB is distributed in the hope that it will be useful,
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GDB; see the file COPYING. If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#include <stdio.h>
#include "defs.h"
#include "param.h"
#include "value.h"
#include "symtab.h"
#include "expression.h"
#include "target.h"
#include <string.h>
value value_x_binop ();
value value_subscripted_rvalue ();
static value
value_subscripted_rvalue PARAMS ((value, value));
value
value_add (arg1, arg2)
value arg1, arg2;
{
register value val, valint, valptr;
register value valint, valptr;
register int len;
COERCE_ARRAY (arg1);
@ -57,11 +59,9 @@ value_add (arg1, arg2)
}
len = TYPE_LENGTH (TYPE_TARGET_TYPE (VALUE_TYPE (valptr)));
if (len == 0) len = 1; /* For (void *) */
val = value_from_long (builtin_type_long,
value_as_long (valptr)
+ (len * value_as_long (valint)));
VALUE_TYPE (val) = VALUE_TYPE (valptr);
return val;
return value_from_longest (VALUE_TYPE (valptr),
value_as_long (valptr)
+ (len * value_as_long (valint)));
}
return value_binop (arg1, arg2, BINOP_ADD);
@ -71,7 +71,6 @@ value
value_sub (arg1, arg2)
value arg1, arg2;
{
register value val;
COERCE_ARRAY (arg1);
COERCE_ARRAY (arg2);
@ -81,22 +80,19 @@ value_sub (arg1, arg2)
if (TYPE_CODE (VALUE_TYPE (arg2)) == TYPE_CODE_INT)
{
/* pointer - integer. */
val = value_from_long
(builtin_type_long,
return value_from_longest
(VALUE_TYPE (arg1),
value_as_long (arg1)
- (TYPE_LENGTH (TYPE_TARGET_TYPE (VALUE_TYPE (arg1)))
* value_as_long (arg2)));
VALUE_TYPE (val) = VALUE_TYPE (arg1);
return val;
}
else if (VALUE_TYPE (arg1) == VALUE_TYPE (arg2))
{
/* pointer to <type x> - pointer to <type x>. */
val = value_from_long
(builtin_type_long,
return value_from_longest
(builtin_type_long, /* FIXME -- should be ptrdiff_t */
(value_as_long (arg1) - value_as_long (arg2))
/ TYPE_LENGTH (TYPE_TARGET_TYPE (VALUE_TYPE (arg1))));
return val;
}
else
{
@ -126,13 +122,13 @@ value_subscript (array, idx)
(eg, a vector register). This routine used to promote floats
to doubles, but no longer does. */
value
static value
value_subscripted_rvalue (array, idx)
value array, idx;
{
struct type *elt_type = TYPE_TARGET_TYPE (VALUE_TYPE (array));
int elt_size = TYPE_LENGTH (elt_type);
int elt_offs = elt_size * value_as_long (idx);
int elt_offs = elt_size * longest_to_int (value_as_long (idx));
value v;
if (elt_offs >= TYPE_LENGTH (VALUE_TYPE (array)))
@ -192,7 +188,11 @@ int unop_user_defined_p (op, arg1)
/* We know either arg1 or arg2 is a structure, so try to find the right
user defined function. Create an argument vector that calls
arg1.operator @ (arg1,arg2) and return that value (where '@' is any
binary operator which is legal for GNU C++). */
binary operator which is legal for GNU C++).
OP is the operatore, and if it is BINOP_ASSIGN_MODIFY, then OTHEROP
is the opcode saying how to modify it. Otherwise, OTHEROP is
unused. */
value
value_x_binop (arg1, arg2, op, otherop)
@ -204,6 +204,8 @@ value_x_binop (arg1, arg2, op, otherop)
char tstr[13];
int static_memfuncp;
COERCE_REF (arg1);
COERCE_REF (arg2);
COERCE_ENUM (arg1);
COERCE_ENUM (arg2);
@ -343,7 +345,7 @@ value_x_unop (arg1, op)
value
value_binop (arg1, arg2, op)
value arg1, arg2;
int op;
enum exp_opcode op;
{
register value val;
@ -595,9 +597,14 @@ value_equal (arg1, arg2)
else if ((code1 == TYPE_CODE_FLT || code1 == TYPE_CODE_INT)
&& (code2 == TYPE_CODE_FLT || code2 == TYPE_CODE_INT))
return value_as_double (arg1) == value_as_double (arg2);
else if ((code1 == TYPE_CODE_PTR && code2 == TYPE_CODE_INT)
|| (code2 == TYPE_CODE_PTR && code1 == TYPE_CODE_INT))
return (char *) value_as_long (arg1) == (char *) value_as_long (arg2);
/* FIXME: Need to promote to either CORE_ADDR or LONGEST, whichever
is bigger. */
else if (code1 == TYPE_CODE_PTR && code2 == TYPE_CODE_INT)
return value_as_pointer (arg1) == (CORE_ADDR) value_as_long (arg2);
else if (code2 == TYPE_CODE_PTR && code1 == TYPE_CODE_INT)
return (CORE_ADDR) value_as_long (arg1) == value_as_pointer (arg2);
else if (code1 == code2
&& ((len = TYPE_LENGTH (VALUE_TYPE (arg1)))
== TYPE_LENGTH (VALUE_TYPE (arg2))))
@ -638,19 +645,24 @@ value_less (arg1, arg2)
{
if (TYPE_UNSIGNED (VALUE_TYPE (arg1))
|| TYPE_UNSIGNED (VALUE_TYPE (arg2)))
return (unsigned)value_as_long (arg1) < (unsigned)value_as_long (arg2);
return ((unsigned LONGEST) value_as_long (arg1)
< (unsigned LONGEST) value_as_long (arg2));
else
return value_as_long (arg1) < value_as_long (arg2);
}
else if ((code1 == TYPE_CODE_FLT || code1 == TYPE_CODE_INT)
&& (code2 == TYPE_CODE_FLT || code2 == TYPE_CODE_INT))
return value_as_double (arg1) < value_as_double (arg2);
else if ((code1 == TYPE_CODE_PTR || code1 == TYPE_CODE_INT)
&& (code2 == TYPE_CODE_PTR || code2 == TYPE_CODE_INT))
{
/* FIXME, this assumes that host and target char *'s are the same! */
return (char *) value_as_long (arg1) < (char *) value_as_long (arg2);
}
else if (code1 == TYPE_CODE_PTR && code2 == TYPE_CODE_PTR)
return value_as_pointer (arg1) < value_as_pointer (arg2);
/* FIXME: Need to promote to either CORE_ADDR or LONGEST, whichever
is bigger. */
else if (code1 == TYPE_CODE_PTR && code2 == TYPE_CODE_INT)
return value_as_pointer (arg1) < (CORE_ADDR) value_as_long (arg2);
else if (code2 == TYPE_CODE_PTR && code1 == TYPE_CODE_INT)
return (CORE_ADDR) value_as_long (arg1) < value_as_pointer (arg2);
else
{
error ("Invalid type combination in ordering comparison.");
@ -673,7 +685,7 @@ value_neg (arg1)
if (TYPE_CODE (type) == TYPE_CODE_FLT)
return value_from_double (type, - value_as_double (arg1));
else if (TYPE_CODE (type) == TYPE_CODE_INT)
return value_from_long (type, - value_as_long (arg1));
return value_from_longest (type, - value_as_long (arg1));
else {
error ("Argument to negate operation not a number.");
return 0; /* For lint -- never reached */
@ -689,6 +701,6 @@ value_lognot (arg1)
if (TYPE_CODE (VALUE_TYPE (arg1)) != TYPE_CODE_INT)
error ("Argument to complement operation not an integer.");
return value_from_long (VALUE_TYPE (arg1), ~ value_as_long (arg1));
return value_from_longest (VALUE_TYPE (arg1), ~ value_as_long (arg1));
}