Path: utzoo!utgpu!watmath!uunet!tut.cis.ohio-state.edu!UUNET.UU.NET!munnari!sibyl.eleceng.ua.oz.au!ian
From: munnari!sibyl.eleceng.ua.oz.au!ian@UUNET.UU.NET
Newsgroups: gnu.gdb.bug
Subject: GDB: support for vanilla System V (part 4 of 5)
Message-ID: <8811301845.AA17615@uunet.UU.NET>
Date: 1 Dec 88 05:25:36 GMT
Sender: daemon@tut.cis.ohio-state.edu
Distribution: gnu
Organization: GNUs Not Usenet
Lines: 874
(Sorry if you've seen this before but I sent it to bug-gnu-emacs
not realising that bug-gdb existed)
In GDB 2.7 on sibyl (usg-unix-v)
There are 5 parts because outgoing overseas mail from here must be
less than 25k. Part 1 contains a shar archive containing the new
files. Parts 2 to 5 contain shar archives of the patch files to make
the changes to the the existing files. The patch files are context
differences.
Part 4 of 5:
--------------Cut Here-----------------------
# This is a shell archive. Remove anything before this line,
# then unpack it by saving it in a file and typing "sh file".
#
# Wrapped by ian on Thu Nov 24 11:20:13 CST 1988
# Contents: patch#3
echo x - patch#3
sed 's/^@//' > "patch#3" <<'@//E*O*F patch#3//'
*** ../gdb.dist/main.c Thu Jul 21 05:21:34 1988
--- main.c Wed Nov 16 01:02:16 1988
***************
*** 18,23
anyone else from sharing it farther. Help stamp out software hoarding!
*/
#include
#include
#include
--- 18,28 -----
anyone else from sharing it farther. Help stamp out software hoarding!
*/
+ #include "config.h"
+ #include "param.h"
+ #ifdef NS5
+ #include
+ #endif
#include
#include
#include
***************
*** 25,31
#include
#include "defs.h"
#include "command.h"
- #include "param.h"
#ifdef SET_STACK_LIMIT_HUGE
#include
--- 30,35 -----
#include
#include "defs.h"
#include "command.h"
#ifdef SET_STACK_LIMIT_HUGE
#include
***************
*** 32,37
#include
#endif
/* Version number of GDB, as a string. */
extern char *version;
--- 36,47 -----
#include
#endif
+ #ifdef NS5
+ #ifndef R_OK
+ #define R_OK (04)
+ #endif
+ #endif
+
/* Version number of GDB, as a string. */
extern char *version;
***************
*** 148,153
char **envp;
{
extern void request_quit ();
int count;
int inhibit_gdbinit = 0;
int quiet = 0;
--- 158,164 -----
char **envp;
{
extern void request_quit ();
+ char *getenv();
int count;
int inhibit_gdbinit = 0;
int quiet = 0;
***************
*** 871,877
automatically terminated. However, parties who have received computer\n\
software programs from you with this License Agreement will not have\n\
their licenses terminated so long as such parties remain in full compliance.\n\
! \n\
5. If you wish to incorporate parts of GDB into other free\n\
programs whose distribution conditions are different, write to the Free\n\
Software Foundation at 675 Mass Ave, Cambridge, MA 02139. We have not yet\n\
--- 882,889 -----
automatically terminated. However, parties who have received computer\n\
software programs from you with this License Agreement will not have\n\
their licenses terminated so long as such parties remain in full compliance.\n\
! \n");
! printf ("\
5. If you wish to incorporate parts of GDB into other free\n\
programs whose distribution conditions are different, write to the Free\n\
Software Foundation at 675 Mass Ave, Cambridge, MA 02139. We have not yet\n\
***************
*** 986,991
static void
quit_command ()
{
if (have_inferior_p ())
{
if (query ("The program is running. Quit anyway? "))
--- 998,1004 -----
static void
quit_command ()
{
+ void exit();
if (have_inferior_p ())
{
if (query ("The program is running. Quit anyway? "))
*** ../gdb.dist/ns32k-pinsn.c Wed Jun 22 13:15:44 1988
--- ns32k-pinsn.c Fri Nov 18 02:07:28 1988
***************
*** 18,23
anyone else from sharing it farther. Help stamp out software hoarding!
*/
#include
#include "defs.h"
--- 18,24 -----
anyone else from sharing it farther. Help stamp out software hoarding!
*/
+ #include "config.h"
#include
#include "defs.h"
***************
*** 40,48
* into buffer
*/
! int
! bit_extract (buffer, offset, count)
! char *buffer;
int offset;
int count;
{
--- 41,49 -----
* into buffer
*/
! void
! bit_extract (buffer, offset, count, result)
! char *buffer, *result;
int offset;
int count;
{
***************
*** 46,52
int offset;
int count;
{
! int result;
int mask;
int bit;
--- 47,53 -----
int offset;
int count;
{
! int i;
int mask;
int bit;
***************
*** 52,60
buffer += offset >> 3;
offset &= 7;
! bit = 1;
! result = 0;
! while (count--)
{
if ((*buffer & (1 << offset)))
result |= bit;
--- 53,59 -----
buffer += offset >> 3;
offset &= 7;
! while (count)
{
for (i = min(8, count), bit = 1, *result = 0; i--; count--, bit <<= 1)
{
***************
*** 56,64
result = 0;
while (count--)
{
! if ((*buffer & (1 << offset)))
! result |= bit;
! if (++offset == 8)
{
offset = 0;
buffer++;
--- 55,61 -----
offset &= 7;
while (count)
{
! for (i = min(8, count), bit = 1, *result = 0; i--; count--, bit <<= 1)
{
if ((*buffer & (1 << offset)))
*result |= bit;
***************
*** 60,67
result |= bit;
if (++offset == 8)
{
! offset = 0;
! buffer++;
}
bit <<= 1;
}
--- 57,69 -----
{
for (i = min(8, count), bit = 1, *result = 0; i--; count--, bit <<= 1)
{
! if ((*buffer & (1 << offset)))
! *result |= bit;
! if (++offset == 8)
! {
! offset = 0;
! buffer++;
! }
}
result++;
}
***************
*** 63,69
offset = 0;
buffer++;
}
! bit <<= 1;
}
return result;
}
--- 65,71 -----
buffer++;
}
}
! result++;
}
}
***************
*** 65,71
}
bit <<= 1;
}
- return result;
}
float
--- 67,72 -----
}
result++;
}
}
***************
*** 68,80
return result;
}
- float
- fbit_extract (buffer, offset, count)
- {
- union {
- int ival;
- float fval;
- } foo;
foo.ival = bit_extract (buffer, offset, 32);
return foo.fval;
--- 69,74 -----
}
}
sign_extend (value, bits)
int value, bits;
***************
*** 76,98
float fval;
} foo;
- foo.ival = bit_extract (buffer, offset, 32);
- return foo.fval;
- }
-
- double
- dbit_extract (buffer, offset, count)
- {
- union {
- struct {int low, high; } ival;
- double dval;
- } foo;
-
- foo.ival.low = bit_extract (buffer, offset, 32);
- foo.ival.high = bit_extract (buffer, offset+32, 32);
- return foo.dval;
- }
-
sign_extend (value, bits)
{
value = value & ((1 << bits) - 1);
--- 70,75 -----
}
sign_extend (value, bits)
int value, bits;
{
***************
*** 94,99
}
sign_extend (value, bits)
{
value = value & ((1 << bits) - 1);
return (value & (1 << (bits-1))
--- 71,77 -----
sign_extend (value, bits)
+ int value, bits;
{
value = value & ((1 << bits) - 1);
return (value & (1 << (bits-1))
***************
*** 222,228
case 'W':
case 'D':
case 'A':
! addr_mode = bit_extract (buffer, ioffset-5, 5);
ioffset -= 5;
switch (addr_mode)
{
--- 200,207 -----
case 'W':
case 'D':
case 'A':
! bit_extract (buffer, ioffset-5, 5, (char *) &addr_mode);
! addr_mode &= ((1 << 5) - 1);
ioffset -= 5;
switch (addr_mode)
{
***************
*** 258,264
switch (d)
{
case 'B':
! Ivalue = bit_extract (buffer, *aoffsetp, 8);
Ivalue = sign_extend (Ivalue, 8);
*aoffsetp += 8;
sprintf (result, "$%d", Ivalue);
--- 237,244 -----
switch (d)
{
case 'B':
! bit_extract (buffer, *aoffsetp, 8, (char *) &Ivalue);
! Ivalue &= ((1 << 8) - 1);
Ivalue = sign_extend (Ivalue, 8);
*aoffsetp += 8;
sprintf (result, "$%d", Ivalue);
***************
*** 264,270
sprintf (result, "$%d", Ivalue);
break;
case 'W':
! Ivalue = bit_extract (buffer, *aoffsetp, 16);
flip_bytes (&Ivalue, 2);
*aoffsetp += 16;
Ivalue = sign_extend (Ivalue, 16);
--- 244,251 -----
sprintf (result, "$%d", Ivalue);
break;
case 'W':
! bit_extract (buffer, *aoffsetp, 16, (char *) &Ivalue);
! Ivalue &= ((1 << 16) - 1);
flip_bytes (&Ivalue, 2);
*aoffsetp += 16;
Ivalue = sign_extend (Ivalue, 16);
***************
*** 271,277
sprintf (result, "$%d", Ivalue);
break;
case 'D':
! Ivalue = bit_extract (buffer, *aoffsetp, 32);
flip_bytes (&Ivalue, 4);
*aoffsetp += 32;
sprintf (result, "$%d", Ivalue);
--- 252,258 -----
sprintf (result, "$%d", Ivalue);
break;
case 'D':
! bit_extract (buffer, *aoffsetp, 32, (char *) &Ivalue);
flip_bytes (&Ivalue, 4);
*aoffsetp += 32;
sprintf (result, "$%d", Ivalue);
***************
*** 277,283
sprintf (result, "$%d", Ivalue);
break;
case 'A':
! Ivalue = bit_extract (buffer, *aoffsetp, 32);
flip_bytes (&Ivalue, 4);
*aoffsetp += 32;
sprintf (result, "$|%d|", Ivalue);
--- 258,264 -----
sprintf (result, "$%d", Ivalue);
break;
case 'A':
! bit_extract (buffer, *aoffsetp, 32, (char *) &Ivalue);
flip_bytes (&Ivalue, 4);
*aoffsetp += 32;
sprintf (result, "$|%d|", Ivalue);
***************
*** 283,289
sprintf (result, "$|%d|", Ivalue);
break;
case 'F':
! Fvalue = fbit_extract (buffer, *aoffsetp, 32);
flip_bytes (&Fvalue, 4);
*aoffsetp += 32;
sprintf (result, "$%g", Fvalue);
--- 264,270 -----
sprintf (result, "$|%d|", Ivalue);
break;
case 'F':
! bit_extract (buffer, *aoffsetp, 32, (char *) &Fvalue);
flip_bytes (&Fvalue, 4);
*aoffsetp += 32;
if (INVALID_FLOAT (&Fvalue, 4))
***************
*** 286,292
Fvalue = fbit_extract (buffer, *aoffsetp, 32);
flip_bytes (&Fvalue, 4);
*aoffsetp += 32;
! sprintf (result, "$%g", Fvalue);
break;
case 'L':
Lvalue = dbit_extract (buffer, *aoffsetp, 64);
--- 267,276 -----
bit_extract (buffer, *aoffsetp, 32, (char *) &Fvalue);
flip_bytes (&Fvalue, 4);
*aoffsetp += 32;
! if (INVALID_FLOAT (&Fvalue, 4))
! sprintf (result, "<>", *(int *) &Fvalue);
! else
! sprintf (result, "$%g", Fvalue);
break;
case 'L':
bit_extract (buffer, *aoffsetp, 64, (char *) &Lvalue);
***************
*** 289,295
sprintf (result, "$%g", Fvalue);
break;
case 'L':
! Lvalue = dbit_extract (buffer, *aoffsetp, 64);
flip_bytes (&Lvalue, 8);
*aoffsetp += 64;
sprintf (result, "$%g", Lvalue);
--- 273,279 -----
sprintf (result, "$%g", Fvalue);
break;
case 'L':
! bit_extract (buffer, *aoffsetp, 64, (char *) &Lvalue);
flip_bytes (&Lvalue, 8);
*aoffsetp += 64;
if (INVALID_FLOAT (&Lvalue, 8))
***************
*** 292,298
Lvalue = dbit_extract (buffer, *aoffsetp, 64);
flip_bytes (&Lvalue, 8);
*aoffsetp += 64;
! sprintf (result, "$%g", Lvalue);
break;
}
break;
--- 276,286 -----
bit_extract (buffer, *aoffsetp, 64, (char *) &Lvalue);
flip_bytes (&Lvalue, 8);
*aoffsetp += 64;
! if (INVALID_FLOAT (&Lvalue, 8))
! sprintf (result, "<>",
! *(((int *) &Lvalue) + 1), *(int *) &Lvalue);
! else
! sprintf (result, "$%g", Lvalue);
break;
}
break;
***************
*** 328,334
case 0x1d:
case 0x1e:
case 0x1f:
! index = bit_extract (buffer, *aoffsetp, 8);
*aoffsetp += 8;
print_insn_arg (d, *aoffsetp, aoffsetp, buffer, addr,
result);
--- 316,323 -----
case 0x1d:
case 0x1e:
case 0x1f:
! bit_extract (buffer, *aoffsetp, 8, (char *) &index);
! index &= ((1 << 8) - 1);
*aoffsetp += 8;
print_insn_arg (d, *aoffsetp, aoffsetp, buffer, addr,
result);
***************
*** 344,350
}
break;
case 'q':
! Ivalue = bit_extract (buffer, ioffset-4, 4);
Ivalue = sign_extend (Ivalue, 4);
sprintf (result, "%d", Ivalue);
ioffset -= 4;
--- 333,340 -----
}
break;
case 'q':
! bit_extract (buffer, ioffset-4, 4, (char *) &Ivalue);
! Ivalue &= ((1 << 4) - 1);
Ivalue = sign_extend (Ivalue, 4);
sprintf (result, "%d", Ivalue);
ioffset -= 4;
***************
*** 350,356
ioffset -= 4;
break;
case 'r':
! Ivalue = bit_extract (buffer, ioffset-3, 3);
sprintf (result, "r%d", Ivalue&7);
ioffset -= 3;
break;
--- 340,347 -----
ioffset -= 4;
break;
case 'r':
! bit_extract (buffer, ioffset-3, 3, (char *) &Ivalue);
! Ivalue &= ((1 << 3) - 1);
sprintf (result, "r%d", Ivalue&7);
ioffset -= 3;
break;
***************
*** 363,369
NEXT_IS_ADDR);
break;
case 'i':
! Ivalue = bit_extract (buffer, *aoffsetp, 8);
*aoffsetp += 8;
sprintf (result, "0x%x", Ivalue);
break;
--- 354,361 -----
NEXT_IS_ADDR);
break;
case 'i':
! bit_extract (buffer, *aoffsetp, 8, (char *) &Ivalue);
! Ivalue &= ((1 << 8) - 1);
*aoffsetp += 8;
sprintf (result, "0x%x", Ivalue);
break;
***************
*** 377,383
{
int Ivalue;
! Ivalue = bit_extract (buffer, *aoffsetp, 8);
switch (Ivalue & 0xc0)
{
case 0x00:
--- 369,376 -----
{
int Ivalue;
! bit_extract (buffer, *aoffsetp, 8, (char *) &Ivalue);
! Ivalue &= ((1 << 8) - 1);
switch (Ivalue & 0xc0)
{
case 0x00:
***************
*** 386,392
*aoffsetp += 8;
break;
case 0x80:
! Ivalue = bit_extract (buffer, *aoffsetp, 16);
flip_bytes (&Ivalue, 2);
Ivalue = sign_extend (Ivalue, 14);
*aoffsetp += 16;
--- 379,386 -----
*aoffsetp += 8;
break;
case 0x80:
! bit_extract (buffer, *aoffsetp, 16, (char *) &Ivalue);
! Ivalue &= ((1 << 16) - 1);
flip_bytes (&Ivalue, 2);
Ivalue = sign_extend (Ivalue, 14);
*aoffsetp += 16;
***************
*** 392,398
*aoffsetp += 16;
break;
case 0xc0:
! Ivalue = bit_extract (buffer, *aoffsetp, 32);
flip_bytes (&Ivalue, 4);
Ivalue = sign_extend (Ivalue, 30);
*aoffsetp += 32;
--- 386,392 -----
*aoffsetp += 16;
break;
case 0xc0:
! bit_extract (buffer, *aoffsetp, 32, (char *) &Ivalue);
flip_bytes (&Ivalue, 4);
Ivalue = sign_extend (Ivalue, 30);
*aoffsetp += 32;
***************
*** 437,443
ns32k_get_enter_addr (pc)
CORE_ADDR pc;
{
! CORE_ADDR enter_addr;
unsigned char op;
if (ABOUT_TO_RETURN (pc))
--- 431,437 -----
ns32k_get_enter_addr (pc)
CORE_ADDR pc;
{
! CORE_ADDR enter_addr, get_pc_function_start();
unsigned char op;
if (ABOUT_TO_RETURN (pc))
***************
*** 454,457
return 0; /* function has no enter/exit */
return enter_addr; /* pc is between enter and exit */
}
--- 448,472 -----
return 0; /* function has no enter/exit */
return enter_addr; /* pc is between enter and exit */
+ }
+
+ int invalid_float(p, len)
+ register union { double d;
+ float f;
+ struct { unsigned m:23, e:8, :1} sf;
+ struct { unsigned lm; unsigned m:20, e:11, :1} sd;
+ } *p;
+ register int len;
+ {
+ register val;
+
+ if ( len == sizeof (float) )
+ val = (p->sf.e == 0xff
+ || (p->sf.e == 0 && p->sf.m != 0));
+ else if ( len == sizeof (double) )
+ val = (p->sd.e == 0x7ff
+ || (p->sd.e == 0 && (p->sd.m != 0 || p->sd.lm != 0)));
+ else
+ val = 1;
+ return (val);
}
*** ../gdb.dist/printcmd.c Sat Jul 23 13:43:34 1988
--- printcmd.c Thu Nov 17 00:51:18 1988
***************
*** 18,23
anyone else from sharing it farther. Help stamp out software hoarding!
*/
#include
#include "defs.h"
#include "initialize.h"
--- 18,24 -----
anyone else from sharing it farther. Help stamp out software hoarding!
*/
+ #include "config.h"
#include
#include "defs.h"
#include "initialize.h"
***************
*** 64,70
void do_displays ();
void print_address ();
! void print_scalar_formatted ();
START_FILE
--- 65,71 -----
void do_displays ();
void print_address ();
! void print_scalar_formatted (), get_selected_block(), dont_repeat();
START_FILE
***************
*** 171,176
int size;
FILE *stream;
{
long val_long;
int len = TYPE_LENGTH (type);
--- 172,178 -----
int size;
FILE *stream;
{
+ extern void print_invalid_float();
long val_long;
int len = TYPE_LENGTH (type);
***************
*** 236,241
type = builtin_type_float;
if (len == sizeof (double))
type = builtin_type_double;
#ifdef IEEE_FLOAT
if (is_nan (unpack_double (type, valaddr)))
{
--- 238,252 -----
type = builtin_type_float;
if (len == sizeof (double))
type = builtin_type_double;
+
+ /* Test for invalid float here because "unpack_double" can't handle
+ invalid floats very elegantly */
+ if (INVALID_FLOAT(valaddr, len))
+ {
+ print_invalid_float(stdout, valaddr, len);
+ break;
+ }
+
#ifdef IEEE_FLOAT
if (is_nan (unpack_double (type, valaddr)))
{
*** ../gdb.dist/remote.c Fri Apr 8 11:06:11 1988
--- remote.c Wed Nov 9 02:02:21 1988
***************
*** 62,67
kill req k
*/
#include
#include
--- 62,68 -----
kill req k
*/
+ #include "config.h"
#include
#include
***************
*** 74,79
#include "wait.h"
#include
#include
#include
#ifdef HAVE_TERMIO
--- 75,83 -----
#include "wait.h"
#include
#include
+ #ifdef NS5
+ #include
+ #include
#include
#endif
***************
*** 75,80
#include
#include
#include
#ifdef HAVE_TERMIO
#include
--- 79,85 -----
#include
#include
#include
+ #endif
#ifdef HAVE_TERMIO
#include
@//E*O*F patch#3//
chmod u=rw,g=r,o=r patch#3
echo Inspecting for damage in transit...
temp=/tmp/shar$$; dtemp=/tmp/.shar$$
trap "rm -f $temp $dtemp; exit" 0 1 2 3 15
cat > $temp <<\!!!
836 2379 18153 patch#3
!!!
wc patch#3 | sed 's=[^ ]*/==' | diff -b $temp - >$dtemp
if [ -s $dtemp ]
then echo "Ouch [diff of wc output]:" ; cat $dtemp
else echo "No problems found."
fi
exit 0