From: Stan Shebs <shebs@cygnus.com>
To: guo@cup.hp.com
Cc: gdb-patches@sourceware.cygnus.com
Subject: Re: submission: gdb/testsuite/gdb.chill patch
Date: Fri, 25 Jun 1999 12:20:00 -0000 [thread overview]
Message-ID: <199906251920.MAA26844@andros.cygnus.com> (raw)
In-Reply-To: <Pine.LNX.4.10.9906251058580.9699-100000@hpcll168.cup.hp.com>
Date: Fri, 25 Jun 1999 11:07:18 -0700 (PDT)
From: Jimmy Guo <guo@cup.hp.com>
This is the (trivial) patch to gdb/testsuite/gdb.chill. It contains
file renames and corresponding changes (reflect file name changes):
Thanks much! I added a ChangeLog entry and committed to the repository.
Now on to the big hard one...
Stan
From dj@delorie.com Sun Jun 27 10:48:00 1999
From: DJ Delorie <dj@delorie.com>
To: gdb-patches@sourceware.cygnus.com
Subject: [eliz@is.elta.co.il: Patches to gdb/go32-nat.c]
Date: Sun, 27 Jun 1999 10:48:00 -0000
Message-id: <199906271747.NAA32004@envy.delorie.com>
X-SW-Source: 1999-q2/msg00153.html
Content-length: 24615
------- Start of forwarded message -------
Date: Sun, 27 Jun 1999 18:46:05 +0300 (IDT)
From: Eli Zaretskii <eliz@is.elta.co.il>
X-Sender: eliz@is
To: gdb-patches@sourceware.cygnus.com
cc: DJ Delorie <dj@delorie.com>
Subject: Patches to gdb/go32-nat.c
Content-Type: TEXT/PLAIN; charset=US-ASCII
The following patches to go32-nat.c correct quite a few problems in
the DJGPP version.
1999-06-26 Eli Zaretskii <eliz@is.elta.co.il>
* go32-nat.c (redir_cmdline_parse, redir_cmdline_delete,
redir_to_child, redir_to_debugger, redir_debug_init)
[__DJGPP_MINOR__ < 3]: Dummy stubs for redirecting debuggee's
standard handles.
(print_387_status): Print "last FP instruction", not "last
exception". Restore the upper 5 bits of the opcode that aren't
stored in the FPU state. Print the FPU stack in its physical
order, not relative to ST(0). Print "special", not "trap" for
unnormals and infinities. Print all 10 bytes of each FP register,
and print them with 19 significant digits.
(regno_mapping): Make the mapping consistent with tm-go32.h.
(sig_map): Add mappings for SIGQUIT, SIGFPE, SIGALRM. Map NMI to
SIGBUS.
(excep_map): New variable, maps GDB signals to DJGPP exceptions.
(go32_attach): Signal an error: we cannot attach to other
processes.
(go32_resume): Record the signal with which the inferior should be
resumed, mapped to the DJGPP exception number.
(go32_wait): Pass the signal recorded in go32_resume to the
debuggee. Save and restore debugger's and debuggee's current
working directory.
[__DJGPP_MINOR__ < 3]: Save and restore inferior's FPU state.
(store_register): FPU regsiters have numbers less than 31.
(go32_kill_inferior): Delete the parsed command-line storage.
(go32_create_inferior): Initialize the parsed command-line
storage. Parse the command line and create the redirections for
inferior's standard handles.
[__DJGPP_MINOR__ < 3]: Init the inferior's FPU state.
(ignore2): Function deleted.
(device_mode): New function, switches a character device between
raw and cooked mode.
(go32_terminal_init): Invalidate the raw/cooked mode information.
(go32_terminal_info): Print whether the inferior's terminal is in
raw or cooked mode.
[__DJGPP_MINOR__ > 2]: Say if standard handles are redirected or
closed by the inferior.
(go32_terminal_inferior): Switch standard handles to the
inferior's files/devices. Put the inferior's input device to
raw/cooked mode, exactly like we found it last time.
(go32_terminal_ours): Restore debugger's standard handles and put
the terminal into cooked mode. Save the mode of inferior's input
device.
(init_go32_ops): Assign go32_ops.to_attach,
go32_ops.to_terminal_info, go32_ops.to_terminal_ours_for_output.
Initialize inferior's cwd and the command-line storage.
*** cvs/gdb/go32-nat.c Mon Jun 7 22:17:28 1999
- --- ./gdb/go32-nat.c Sat Jun 26 19:27:58 1999
*************** Foundation, Inc., 59 Temple Place - Suit
*** 32,40 ****
- --- 32,46 ----
#include <stdio.h> /* required for __DJGPP_MINOR__ */
#include <stdlib.h>
#include <string.h>
+ #include <errno.h>
#include <unistd.h>
+ #include <io.h>
+ #include <dpmi.h>
#include <debug/v2load.h>
#include <debug/dbgcom.h>
+ #if __DJGPP_MINOR__ > 2
+ #include <debug/redir.h>
+ #endif
#if __DJGPP_MINOR__ < 3
/* This code will be provided from DJGPP 2.03 on. Until then I code it
*************** load_npx (void)
*** 93,98 ****
- --- 99,125 ----
{
asm ("frstor %0" : "=m" (npx));
}
+ /* ------------------------------------------------------------------------- */
+ /* Stubs for the missing redirection functions. */
+ typedef struct {
+ char *command;
+ int redirected;
+ } cmdline_t;
+
+ void redir_cmdline_delete (cmdline_t *ptr) {ptr->redirected = 0;}
+ int redir_cmdline_parse (const char *args, cmdline_t *ptr)
+ {
+ return -1;
+ }
+ int redir_to_child (cmdline_t *ptr)
+ {
+ return 1;
+ }
+ int redir_to_debugger (cmdline_t *ptr)
+ {
+ return 1;
+ }
+ int redir_debug_init (cmdline_t *ptr) { return 0; }
#endif /* __DJGPP_MINOR < 3 */
extern void _initialize_go32_nat (void);
*************** print_387_status (unsigned short status,
*** 197,204 ****
}
print_387_control_word (ep->control & 0xffff);
! printf_unfiltered ("last exception: ");
! printf_unfiltered ("opcode %s; ", local_hex_string (ep->opcode));
printf_unfiltered ("pc %s:", local_hex_string (ep->code_seg));
printf_unfiltered ("%s; ", local_hex_string (ep->eip));
printf_unfiltered ("operand %s", local_hex_string (ep->operand_seg));
- --- 224,237 ----
}
print_387_control_word (ep->control & 0xffff);
! /* Other platforms say "last exception", but that's not true: the
! FPU stores the last non-control instruction there. */
! printf_unfiltered ("last FP instruction: ");
! /* The ORing with D800h restores the upper 5 bits of the opcode that
! are not stored by the FPU (since these bits are the same for all
! floating-point instructions). */
! printf_unfiltered ("opcode %s; ",
! local_hex_string (ep->opcode ? (ep->opcode|0xd800) : 0));
printf_unfiltered ("pc %s:", local_hex_string (ep->code_seg));
printf_unfiltered ("%s; ", local_hex_string (ep->eip));
printf_unfiltered ("operand %s", local_hex_string (ep->operand_seg));
*************** print_387_status (unsigned short status,
*** 206,240 ****
top = (ep->status >> 11) & 7;
! printf_unfiltered ("regno tag msb lsb value\n");
! for (fpreg = 0; fpreg < 8; fpreg++)
{
long double val;
printf_unfiltered ("%s %d: ", fpreg == top ? "=>" : " ", fpreg);
switch ((ep->tag >> (fpreg * 2)) & 3)
{
case 0:
! printf_unfiltered ("valid ");
break;
case 1:
! printf_unfiltered ("zero ");
break;
case 2:
! printf_unfiltered ("trap ");
break;
case 3:
! printf_unfiltered ("empty ");
break;
}
! for (i = 0; i < 8; i++)
! printf_unfiltered ("%02x", ep->regs[fpreg][i]);
! REGISTER_CONVERT_TO_VIRTUAL (FP0_REGNUM + fpreg, builtin_type_long_double,
! &ep->regs[fpreg], &val);
! printf_unfiltered (" %LG\n", val);
}
}
- --- 239,282 ----
top = (ep->status >> 11) & 7;
! printf_unfiltered ("regno tag msb lsb value\n");
! for (fpreg = 7; fpreg >= 0; fpreg--)
{
+ /* FNSAVE saves the FP registers in their logical TOP-relative
+ order, beginning with ST(0). Since we need to print them in
+ their physical order, we have to remap them. */
+ int regno = fpreg - top;
long double val;
+ if (regno < 0)
+ regno += 8;
+
printf_unfiltered ("%s %d: ", fpreg == top ? "=>" : " ", fpreg);
switch ((ep->tag >> (fpreg * 2)) & 3)
{
case 0:
! printf_unfiltered ("valid ");
break;
case 1:
! printf_unfiltered ("zero ");
break;
case 2:
! /* All other versions of print_387_status use TRAP here, but I
! think this is misleading, since Intel manuals say SPECIAL. */
! printf_unfiltered ("special ");
break;
case 3:
! printf_unfiltered ("empty ");
break;
}
! for (i = 9; i >= 0; i--)
! printf_unfiltered ("%02x", ep->regs[regno][i]);
! REGISTER_CONVERT_TO_VIRTUAL (FP0_REGNUM+regno, builtin_type_long_double,
! &ep->regs[regno], &val);
! printf_unfiltered (" %.19LG\n", val);
}
}
*************** i386_go32_float_info (void)
*** 244,259 ****
print_387_status (0, (struct env387 *) &npx);
}
! #define r_ofs(x) ((int)(&(((TSS *)0)->x)))
static struct
{
! int tss_ofs;
! int size;
}
regno_mapping[] =
{
! r_ofs (tss_eax), 4,
r_ofs (tss_ecx), 4,
r_ofs (tss_edx), 4,
r_ofs (tss_ebx), 4,
- --- 286,301 ----
print_387_status (0, (struct env387 *) &npx);
}
! #define r_ofs(x) (offsetof(TSS,x))
static struct
{
! size_t tss_ofs;
! size_t size;
}
regno_mapping[] =
{
! r_ofs (tss_eax), 4, /* normal registers, from a_tss */
r_ofs (tss_ecx), 4,
r_ofs (tss_edx), 4,
r_ofs (tss_ebx), 4,
*************** regno_mapping[] =
*** 269,275 ****
r_ofs (tss_es), 2,
r_ofs (tss_fs), 2,
r_ofs (tss_gs), 2,
! 0, 10,
1, 10,
2, 10,
3, 10,
- --- 311,317 ----
r_ofs (tss_es), 2,
r_ofs (tss_fs), 2,
r_ofs (tss_gs), 2,
! 0, 10, /* 8 FP registers, from npx.reg[] */
1, 10,
2, 10,
3, 10,
*************** regno_mapping[] =
*** 277,289 ****
5, 10,
6, 10,
7, 10,
! 0, 2,
! 4, 2,
! 8, 2,
! 12, 4,
! 16, 2,
! 20, 4,
! 24, 2
};
static struct
- --- 319,333 ----
5, 10,
6, 10,
7, 10,
! /* The order of the next 7 registers must be consistent
! with their numbering in config/i386/tm-go32.h, which see. */
! 0, 2, /* control word, from npx */
! 4, 2, /* status word, from npx */
! 8, 2, /* tag word, from npx */
! 16, 2, /* last FP exception CS from npx */
! 24, 2, /* last FP exception operand selector from npx */
! 12, 4, /* last FP exception EIP from npx */
! 20, 4 /* last FP exception operand offset from npx */
};
static struct
*************** sig_map[] =
*** 295,301 ****
{
0, TARGET_SIGNAL_FPE,
1, TARGET_SIGNAL_TRAP,
! 2, TARGET_SIGNAL_UNKNOWN,
3, TARGET_SIGNAL_TRAP,
4, TARGET_SIGNAL_FPE,
5, TARGET_SIGNAL_SEGV,
- --- 339,348 ----
{
0, TARGET_SIGNAL_FPE,
1, TARGET_SIGNAL_TRAP,
! /* Exception 2 is triggered by the NMI. DJGPP handles it as SIGILL,
! but I think SIGBUS is better, since the NMI is usually activated
! as a result of a memory parity check failure. */
! 2, TARGET_SIGNAL_BUS,
3, TARGET_SIGNAL_TRAP,
4, TARGET_SIGNAL_FPE,
5, TARGET_SIGNAL_SEGV,
*************** sig_map[] =
*** 306,325 ****
10, TARGET_SIGNAL_BUS,
11, TARGET_SIGNAL_SEGV,
12, TARGET_SIGNAL_SEGV,
! 13, TARGET_SIGNAL_ABRT,
14, TARGET_SIGNAL_SEGV,
16, TARGET_SIGNAL_FPE,
31, TARGET_SIGNAL_ILL,
0x75, TARGET_SIGNAL_FPE,
0x79, TARGET_SIGNAL_INT,
! 0x1b, TARGET_SIGNAL_INT,
-1, -1
};
static void
go32_open (char *name, int from_tty)
{
! printf_unfiltered ("Use the `run' command to run go32 programs\n");
}
static void
- --- 353,392 ----
10, TARGET_SIGNAL_BUS,
11, TARGET_SIGNAL_SEGV,
12, TARGET_SIGNAL_SEGV,
! 13, TARGET_SIGNAL_SEGV,
14, TARGET_SIGNAL_SEGV,
16, TARGET_SIGNAL_FPE,
+ 17, TARGET_SIGNAL_BUS,
31, TARGET_SIGNAL_ILL,
+ 0x1b, TARGET_SIGNAL_INT,
0x75, TARGET_SIGNAL_FPE,
+ 0x78, TARGET_SIGNAL_ALRM,
0x79, TARGET_SIGNAL_INT,
! 0x7a, TARGET_SIGNAL_QUIT,
-1, -1
};
+ static struct {
+ enum target_signal gdb_sig;
+ int djgpp_excepno;
+ } excepn_map[] = {
+ TARGET_SIGNAL_0, -1,
+ TARGET_SIGNAL_ILL, 6, /* Invalid Opcode */
+ TARGET_SIGNAL_TRAP, 1, /* Debug */
+ TARGET_SIGNAL_BUS, 17, /* Alignment Check */
+ TARGET_SIGNAL_SEGV, 13, /* GPF */
+ TARGET_SIGNAL_FPE, 0x75, /* this and the rest are fake exceptions */
+ TARGET_SIGNAL_INT, 0x79, /* see dpmiexcp.c in djlsr*.zip for details */
+ TARGET_SIGNAL_QUIT, 0x7a,
+ TARGET_SIGNAL_ALRM, 0x78,
+ TARGET_SIGNAL_PROF, 0x78,
+ 0, 0
+ };
+
static void
go32_open (char *name, int from_tty)
{
! printf_unfiltered ("Done. Use the \"run\" command to run the program.\n");
}
static void
*************** go32_close (int quitting)
*** 330,336 ****
static void
go32_attach (char *args, int from_tty)
{
! printf_unfiltered ("Use the `run' command to run go32 programs\n");
}
static void
- --- 397,405 ----
static void
go32_attach (char *args, int from_tty)
{
! error ("\
! You cannot attach to a running program on this platform.\n\
! Use the `run' command to run DJGPP programs.");
}
static void
*************** go32_detach (char *args, int from_tty)
*** 339,350 ****
}
static int resume_is_step;
static void
go32_resume (int pid, int step, enum target_signal siggnal)
! {
! resume_is_step = step;
! }
static int
go32_wait (int pid, struct target_waitstatus *status)
- --- 408,431 ----
}
static int resume_is_step;
+ static int resume_signal = -1;
static void
go32_resume (int pid, int step, enum target_signal siggnal)
! {
! int i;
!
! resume_is_step = step;
!
! for (i = 0, resume_signal = -1; excepn_map[i].gdb_sig != 0; i++)
! if (excepn_map[i].gdb_sig == siggnal)
! {
! resume_signal = excepn_map[i].djgpp_excepno;
! break;
! }
! }
!
! static char child_cwd[FILENAME_MAX];
static int
go32_wait (int pid, struct target_waitstatus *status)
*************** go32_wait (int pid, struct target_waitst
*** 355,369 ****
a_tss.tss_eflags |= 0x0100;
else
a_tss.tss_eflags &= 0xfeff;
#if __DJGPP_MINOR__ < 3
! save_npx ();
#endif
run_child ();
#if __DJGPP_MINOR__ < 3
! load_npx ();
#endif
if (a_tss.tss_irqn == 0x21)
{
status->kind = TARGET_WAITKIND_EXITED;
- --- 436,471 ----
a_tss.tss_eflags |= 0x0100;
else
a_tss.tss_eflags &= 0xfeff;
+ if (resume_signal <= -1)
+ a_tss.tss_trap = 0;
+ else
+ {
+ /* FIXME: this doesn't seem to work for all signals. SIGSEGV
+ and SIGTRAP do work, but SIGFPE and SIGBUS don't. Why? */
+ a_tss.tss_trap = 0xffff; /* run_child looks for this */
+ a_tss.tss_irqn = resume_signal;
+ }
+
+ /* The child might change working directory behind our back. The
+ GDB users won't like the side effects of that when they work with
+ relative file names, and GDB might be confused by its current
+ directory not being in sync with the truth. So we always make a
+ point of changing back to where GDB thinks is its cwd, when we
+ return control to the debugger, but restore child's cwd before we
+ run it. */
+ chdir (child_cwd);
#if __DJGPP_MINOR__ < 3
! load_npx ();
#endif
run_child ();
#if __DJGPP_MINOR__ < 3
! save_npx ();
#endif
+ getcwd (child_cwd, sizeof (child_cwd)); /* in case it has changed */
+ chdir (current_directory);
+
if (a_tss.tss_irqn == 0x21)
{
status->kind = TARGET_WAITKIND_EXITED;
*************** go32_wait (int pid, struct target_waitst
*** 377,385 ****
- --- 479,491 ----
{
if (a_tss.tss_irqn == sig_map[i].go32_sig)
{
+ #if __DJGPP_MINOR__ < 3
if ((status->value.sig = sig_map[i].gdb_sig) !=
TARGET_SIGNAL_TRAP)
status->kind = TARGET_WAITKIND_SIGNALLED;
+ #else
+ status->value.sig = sig_map[i].gdb_sig;
+ #endif
break;
}
}
*************** go32_fetch_registers (int regno)
*** 410,422 ****
(char *) &npx.reg[regno_mapping[regno].tss_ofs]);
else if (regno < 31)
supply_register (regno,
! (char *) &npx.reg + regno_mapping[regno].tss_ofs);
else
! {
! printf_unfiltered ("Invalid register in go32_fetch_register(%d)",
! regno);
! exit (1);
! }
}
}
- --- 516,524 ----
(char *) &npx.reg[regno_mapping[regno].tss_ofs]);
else if (regno < 31)
supply_register (regno,
! (char *) &npx + regno_mapping[regno].tss_ofs);
else
! fatal ("Invalid register no. %d in go32_fetch_register.", regno);
}
}
*************** store_register (int regno)
*** 430,442 ****
rp = (char *) &a_tss + regno_mapping[regno].tss_ofs;
else if (regno < 24)
rp = (char *) &npx.reg[regno_mapping[regno].tss_ofs];
! else if (regno > 31)
rp = (char *) &npx + regno_mapping[regno].tss_ofs;
else
! {
! printf_unfiltered ("Invalid register in store_register(%d)", regno);
! exit (1);
! }
memcpy (rp, v, regno_mapping[regno].size);
}
- --- 532,541 ----
rp = (char *) &a_tss + regno_mapping[regno].tss_ofs;
else if (regno < 24)
rp = (char *) &npx.reg[regno_mapping[regno].tss_ofs];
! else if (regno < 31)
rp = (char *) &npx + regno_mapping[regno].tss_ofs;
else
! fatal ("Invalid register no. %d in store_register.", regno);
memcpy (rp, v, regno_mapping[regno].size);
}
*************** go32_xfer_memory (CORE_ADDR memaddr, cha
*** 487,496 ****
}
}
static void
go32_files_info (struct target_ops *target)
{
! printf_unfiltered ("You are running a DJGPP V2 program\n");
}
static void
- --- 586,597 ----
}
}
+ static cmdline_t child_cmd; /* parsed child's command line kept here */
+
static void
go32_files_info (struct target_ops *target)
{
! printf_unfiltered ("You are running a DJGPP V2 program.\n");
}
static void
*************** go32_stop (void)
*** 505,510 ****
- --- 606,614 ----
static void
go32_kill_inferior (void)
{
+ redir_cmdline_delete (&child_cmd);
+ resume_signal = -1;
+ resume_is_step = 0;
unpush_target (&go32_ops);
}
*************** go32_create_inferior (char *exec_file, c
*** 520,525 ****
- --- 624,645 ----
go32_stop ();
go32_kill_inferior ();
}
+ resume_signal = -1;
+ resume_is_step = 0;
+ /* Init command line storage. */
+ if (redir_debug_init (&child_cmd) == -1)
+ fatal ("Cannot allocate redirection storage: not enough memory.\n");
+
+ /* Parse the command line and create redirections. */
+ if (strpbrk (args, "<>"))
+ {
+ if (redir_cmdline_parse (args, &child_cmd) == 0)
+ args = child_cmd.command;
+ else
+ error ("Syntax error in command line.");
+ }
+ else
+ child_cmd.command = strdup (args);
cmdline = (char *) alloca (strlen (args) + 4);
cmdline[0] = strlen (args);
*************** go32_create_inferior (char *exec_file, c
*** 537,542 ****
- --- 657,665 ----
environ = env_save;
edi_init (start_state);
+ #if __DJGPP_MINOR__ < 3
+ save_npx ();
+ #endif
inferior_pid = SOME_PID;
push_target (&go32_ops);
*************** ignore (void)
*** 564,574 ****
{
}
- - static void
- - ignore2 (char *a, int b)
- - {
- - }
- -
/* Hardware watchpoint support. */
#define DR_STATUS 6
- --- 687,692 ----
*************** go32_insert_hw_breakpoint (CORE_ADDR add
*** 818,856 ****
return 0;
}
! static int inf_flags_valid = 0;
! static int inf_in_flag;
! static int inf_out_flag;
static void
go32_terminal_init (void)
{
! /* Save the filemodes for stdin/stout */
! inf_in_flag = setmode(0, 0);
! setmode(0, inf_in_flag);
! inf_out_flag = setmode(1, 0);
! setmode(1, inf_out_flag);
! inf_flags_valid = 1;
}
static void
go32_terminal_inferior (void)
{
! /* set the filemodes for stdin/stdout of the inferior */
! if (inf_flags_valid)
! {
! setmode(0, inf_in_flag);
! setmode(1, inf_out_flag);
! }
}
static void
go32_terminal_ours (void)
{
! /* Switch to text mode on stdin/stdout always on the gdb terminal and
! save the inferior modes to be restored later */
! inf_in_flag = setmode(0, O_TEXT);
! inf_out_flag = setmode(1, O_TEXT);
}
static void
- --- 936,1067 ----
return 0;
}
! /* Put the device open on handle FD into either raw or cooked
! mode, return 1 if it was in raw mode, zero otherwise. */
!
! static int
! device_mode (int fd, int raw_p)
! {
! int oldmode, newmode;
! __dpmi_regs regs;
!
! regs.x.ax = 0x4400;
! regs.x.bx = fd;
! __dpmi_int(0x21, ®s);
! if (regs.x.flags & 1)
! return -1;
! newmode = oldmode = regs.x.dx;
!
! if (raw_p)
! newmode |= 0x20;
! else
! newmode &= ~0x20;
!
! if (oldmode & 0x80) /* Only for character dev */
! {
! regs.x.ax = 0x4401;
! regs.x.bx = fd;
! regs.x.dx = newmode & 0xff; /* Force upper byte zero, else it fails */
! __dpmi_int(0x21, ®s);
! if (regs.x.flags & 1)
! return -1;
! }
! return (oldmode & 0x20) == 0x20;
! }
!
!
! static int inf_mode_valid = 0;
! static int inf_terminal_mode;
!
! /* This semaphore is needed because, amazingly enough, GDB calls
! target.to_terminal_ours more than once after the inferior stops.
! But we need the information from the first call only, since the
! second call will always see GDB's own cooked terminal. */
! static int terminal_is_ours = 1;
static void
go32_terminal_init (void)
{
! inf_mode_valid = 0; /* reinitialize, in case they are restarting child */
! terminal_is_ours = 1;
! }
!
! static void
! go32_terminal_info (char *args, int from_tty)
! {
! printf_unfiltered ("Inferior's terminal is in %s mode.\n",
! !inf_mode_valid
! ? "default" : inf_terminal_mode ? "raw" : "cooked");
!
! #if __DJGPP_MINOR__ > 2
! if (child_cmd.redirection)
! {
! int i;
!
! for (i = 0; i < DBG_HANDLES; i++)
! {
! if (child_cmd.redirection[i]->file_name)
! printf_unfiltered ("\tFile handle %d is redirected to `%s'.\n",
! i, child_cmd.redirection[i]->file_name);
! else if (_get_dev_info(child_cmd.redirection[i]->inf_handle) == -1)
! printf_unfiltered
! ("\tFile handle %d appears to be closed by inferior.\n", i);
! /* Mask off the raw/cooked bit when comparing device info words. */
! else if ((_get_dev_info(child_cmd.redirection[i]->inf_handle) & 0xdf)
! != (_get_dev_info(i) & 0xdf))
! printf_unfiltered
! ("\tFile handle %d appears to be redirected by inferior.\n", i);
! }
! }
! #endif
}
static void
go32_terminal_inferior (void)
{
! /* Redirect standard handles as child wants them. */
! errno = 0;
! if (redir_to_child (&child_cmd) == -1)
! {
! redir_to_debugger (&child_cmd);
! error ("Cannot redirect standard handles for program: %s.",
! strerror (errno));
! }
! /* set the console device of the inferior to whatever mode
! (raw or cooked) we found it last time */
! if (terminal_is_ours)
! {
! if (inf_mode_valid)
! device_mode (0, inf_terminal_mode);
! terminal_is_ours = 0;
! }
}
static void
go32_terminal_ours (void)
{
! /* Switch to cooked mode on the gdb terminal and save the inferior
! terminal mode to be restored when it is resumed */
! if (!terminal_is_ours)
! {
! inf_terminal_mode = device_mode (0, 0);
! if (inf_terminal_mode != -1)
! inf_mode_valid = 1;
! else
! /* If device_mode returned -1, we don't know what happens with
! handle 0 anymore, so make the info invalid. */
! inf_mode_valid = 0;
! terminal_is_ours = 1;
!
! /* Restore debugger's standard handles. */
! errno = 0;
! if (redir_to_debugger (&child_cmd) == -1)
! {
! redir_to_child (&child_cmd);
! error ("Cannot redirect standard handles for debugger: %s.",
! strerror (errno));
! }
! }
}
static void
*************** init_go32_ops (void)
*** 862,867 ****
- --- 1073,1079 ----
"Program loaded by djgpp, when gdb is used as an external debugger";
go32_ops.to_open = go32_open;
go32_ops.to_close = go32_close;
+ go32_ops.to_attach = go32_attach;
go32_ops.to_detach = go32_detach;
go32_ops.to_resume = go32_resume;
go32_ops.to_wait = go32_wait;
*************** init_go32_ops (void)
*** 874,882 ****
go32_ops.to_remove_breakpoint = memory_remove_breakpoint;
go32_ops.to_terminal_init = go32_terminal_init;
go32_ops.to_terminal_inferior = go32_terminal_inferior;
! go32_ops.to_terminal_ours_for_output = ignore;
go32_ops.to_terminal_ours = go32_terminal_ours;
! go32_ops.to_terminal_info = ignore2;
go32_ops.to_kill = go32_kill_inferior;
go32_ops.to_create_inferior = go32_create_inferior;
go32_ops.to_mourn_inferior = go32_mourn_inferior;
- --- 1086,1094 ----
go32_ops.to_remove_breakpoint = memory_remove_breakpoint;
go32_ops.to_terminal_init = go32_terminal_init;
go32_ops.to_terminal_inferior = go32_terminal_inferior;
! go32_ops.to_terminal_ours_for_output = go32_terminal_ours;
go32_ops.to_terminal_ours = go32_terminal_ours;
! go32_ops.to_terminal_info = go32_terminal_info;
go32_ops.to_kill = go32_kill_inferior;
go32_ops.to_create_inferior = go32_create_inferior;
go32_ops.to_mourn_inferior = go32_mourn_inferior;
*************** init_go32_ops (void)
*** 889,894 ****
- --- 1101,1113 ----
go32_ops.to_has_registers = 1;
go32_ops.to_has_execution = 1;
go32_ops.to_magic = OPS_MAGIC;
+
+ /* Initialize child's cwd with the current one. */
+ getcwd (child_cwd, sizeof (child_cwd));
+
+ /* Initialize child's command line storage. */
+ if (redir_debug_init (&child_cmd) == -1)
+ fatal ("Cannot allocate redirection storage: not enough memory.\n");
}
void
------- End of forwarded message -------
From dj@delorie.com Sun Jun 27 10:48:00 1999
From: DJ Delorie <dj@delorie.com>
To: gdb-patches@sourceware.cygnus.com
Subject: [eliz@is.elta.co.il: More signal-related patches for GDB]
Date: Sun, 27 Jun 1999 10:48:00 -0000
Message-id: <199906271748.NAA32033@envy.delorie.com>
X-SW-Source: 1999-q2/msg00156.html
Content-length: 976
------- Start of forwarded message -------
Date: Sun, 27 Jun 1999 19:00:13 +0300 (IDT)
From: Eli Zaretskii <eliz@is.elta.co.il>
X-Sender: eliz@is
To: DJ Delorie <dj@delorie.com>
cc: Robert Hoehne <robert.hoehne@gmx.net>
Subject: More signal-related patches for GDB
Content-Type: TEXT/PLAIN; charset=US-ASCII
1999-06-26 Eli Zaretskii <eliz@is.elta.co.il>
* maint.c (maintenance_dump_me) [__DJGPP__]: Make it so SIGQUIT
produces traceback, the equivalent of a core dump.
*** ./gdb/maint.c~0 Fri Jun 13 17:30:06 1997
- --- ./gdb/maint.c Thu May 20 21:33:42 1999
*************** maintenance_dump_me (args, from_tty)
*** 99,105 ****
- --- 99,110 ----
{
if (query ("Should GDB dump core? "))
{
+ #ifdef __DJGPP__
+ /* SIG_DFL for SIGQUIT is the same as SIG_IGN. */
+ signal (SIGQUIT, __djgpp_traceback_exit);
+ #else
signal (SIGQUIT, SIG_DFL);
+ #endif
kill (getpid (), SIGQUIT);
}
}
------- End of forwarded message -------
From dj@delorie.com Sun Jun 27 10:48:00 1999
From: DJ Delorie <dj@delorie.com>
To: gdb-patches@sourceware.cygnus.com
Subject: [eliz@is.elta.co.il: DOSish filenames and CRLF source files]
Date: Sun, 27 Jun 1999 10:48:00 -0000
Message-id: <199906271748.NAA32018@envy.delorie.com>
X-SW-Source: 1999-q2/msg00154.html
Content-length: 5348
------- Start of forwarded message -------
Date: Sun, 27 Jun 1999 18:51:28 +0300 (IDT)
From: Eli Zaretskii <eliz@is.elta.co.il>
X-Sender: eliz@is
To: gdb-patches@sourceware.cygnus.com
cc: DJ Delorie <dj@delorie.com>
Subject: DOSish filenames and CRLF source files
Content-Type: TEXT/PLAIN; charset=US-ASCII
The following patches solve some problems with DOS/Windows file names and
with source files which have CRLF EOLs:
1999-06-26 Eli Zaretskii <eliz@is.elta.co.il>
* source.c (mod_path) [_WIN32 || __DJGPP__]: Don't remove trailing
slash from "d:/". Don't overstep the beginning of name.
[_WIN32 || __MSDOS__]: Convert "d:" to "d:.", otherwise appending
a slash changes its meaning.
(openp): Use SLASH_P, not equality with SLASH_CHAR.
(print_source_lines_base) [CRLF_SOURCE_FILES]: Skip \r only before
a \n.
(forward_search_command) [CRLF_SOURCE_FILES]: Remove \r at the end
of all lines.
(reverse_search_command) [CRLF_SOURCE_FILES]: Likewise.
*** cvs/gdb/source.c Mon Jun 21 16:26:06 1999
- --- ./gdb/source.c Sat Jun 26 15:12:08 1999
***************
*** 338,352 ****
}
}
! #ifndef _WIN32
! /* On win32 h:\ is different to h: */
! if (SLASH_P (p[-1]))
/* Sigh. "foo/" => "foo" */
--p;
- - #endif
*p = '\0';
! while (p[-1] == '.')
{
if (p - name == 1)
{
- --- 338,354 ----
}
}
! if (!(SLASH_P (*name) && p <= name + 1) /* "/" */
! #if defined(_WIN32) || defined(__MSDOS__)
! /* On MS-DOS and MS-Windows, h:\ is different from h: */
! && !(!SLASH_P (*name) && ROOTED_P (name) && p <= name + 3)/* d:/ */
! #endif
! && SLASH_P (p[-1]))
/* Sigh. "foo/" => "foo" */
--p;
*p = '\0';
! while (p > name && p[-1] == '.')
{
if (p - name == 1)
{
***************
*** 354,360 ****
name = current_directory;
goto append;
}
! else if (SLASH_P (p[-2]))
{
if (p - name == 2)
{
- --- 356,362 ----
name = current_directory;
goto append;
}
! else if (p > name + 1 && SLASH_P (p[-2]))
{
if (p - name == 2)
{
***************
*** 376,381 ****
- --- 378,387 ----
if (name[0] == '~')
name = tilde_expand (name);
+ #if defined(_WIN32) || defined(__MSDOS__)
+ else if (ROOTED_P (name) && p == name + 2) /* "d:" => "d:." */
+ name = concat (name, ".", NULL);
+ #endif
else if (!ROOTED_P (name) && name[0] != '$')
name = concat (current_directory, SLASH_STRING, name, NULL);
else
***************
*** 410,415 ****
- --- 416,429 ----
p = *which_path;
while (1)
{
+ /* FIXME: strncmp loses in interesting ways on MS-DOS and
+ MS-Windows because of case-insensitivity and two different
+ but functionally identical slash characters. We need a
+ special filesystem-dependent file-name comparison function.
+
+ Actually, even on Unix I would use realpath() or its work-
+ alike before comparing. Then all the code above which
+ removes excess slashes and dots could simply go away. */
if (!strncmp (p, name, len)
&& (p[len] == '\0' || p[len] == DIRNAME_SEPARATOR))
{
***************
*** 598,605 ****
/* Beware the // my son, the Emacs barfs, the botch that catch... */
*filename_opened = concat (current_directory,
! SLASH_CHAR
! == current_directory[strlen(current_directory)-1]
? "": SLASH_STRING,
filename, NULL);
}
- --- 612,618 ----
/* Beware the // my son, the Emacs barfs, the botch that catch... */
*filename_opened = concat (current_directory,
! SLASH_P (current_directory[strlen(current_directory)-1])
? "": SLASH_STRING,
filename, NULL);
}
***************
*** 1058,1064 ****
#ifdef CRLF_SOURCE_FILES
else if (c == '\r')
{
! /* Just skip \r characters. */
}
#endif
else
- --- 1071,1083 ----
#ifdef CRLF_SOURCE_FILES
else if (c == '\r')
{
! /* Skip a \r character, but only before a \n. */
! int c1 = fgetc (stream);
!
! if (c1 != '\n')
! printf_filtered ("^%c", c + 0100);
! if (c1 != EOF)
! ungetc (c1, stream);
}
#endif
else
***************
*** 1496,1501 ****
- --- 1515,1530 ----
}
} while (c != '\n' && (c = getc (stream)) >= 0);
+ #ifdef CRLF_SOURCE_FILES
+ /* Remove the \r, if any, at the end of the line, otherwise
+ regular expressions that end with $ or \n won't work. */
+ if (p - buf > 1 && p[-2] == '\r')
+ {
+ p--;
+ p[-1] = '\n';
+ }
+ #endif
+
/* we now have a source line in buf, null terminate and match */
*p = 0;
if (re_exec (buf) > 0)
***************
*** 1594,1599 ****
- --- 1623,1638 ----
*p++ = c;
} while (c != '\n' && (c = getc (stream)) >= 0);
+ #ifdef CRLF_SOURCE_FILES
+ /* Remove the \r, if any, at the end of the line, otherwise
+ regular expressions that end with $ or \n won't work. */
+ if (p - buf > 1 && p[-2] == '\r')
+ {
+ p--;
+ p[-1] = '\n';
+ }
+ #endif
+
/* We now have a source line in buf; null terminate and match. */
*p = 0;
if (re_exec (buf) > 0)
------- End of forwarded message -------
From dj@delorie.com Sun Jun 27 10:48:00 1999
From: DJ Delorie <dj@delorie.com>
To: gdb-patches@sourceware.cygnus.com
Subject: [eliz@is.elta.co.il: Directory- and filename-related problems in top.c]
Date: Sun, 27 Jun 1999 10:48:00 -0000
Message-id: <199906271748.NAA32021@envy.delorie.com>
X-SW-Source: 1999-q2/msg00155.html
Content-length: 3430
------- Start of forwarded message -------
Date: Sun, 27 Jun 1999 18:56:07 +0300 (IDT)
From: Eli Zaretskii <eliz@is.elta.co.il>
X-Sender: eliz@is
To: DJ Delorie <dj@delorie.com>
Subject: Directory- and filename-related problems in top.c
Content-Type: TEXT/PLAIN; charset=US-ASCII
1999-06-26 Eli Zaretskii <eliz@is.elta.co.il>
* top.c (gdb_init) [__MSDOS__]: Arrange for GDB to return to the
original directory before exiting.
(cd_command) [_WIN32 || __MSDOS__]: Canonicalize the new directory
name explicitly. Handle "d:/" names correctly.
(init_history) [__MSDOS__]: Use _gdb_history as the default GDB
history file name.
*** ./gdb/top.c~1 Fri Jan 29 09:46:02 1999
- --- ./gdb/top.c Sat Jun 5 16:38:46 1999
***************
*** 656,661 ****
- --- 656,667 ----
getcwd (gdb_dirbuf, sizeof (gdb_dirbuf));
current_directory = gdb_dirbuf;
+ #ifdef __MSDOS__
+ /* Make sure we return to the original directory upon exit, come
+ what may, since the OS doesn't do that for us. */
+ make_final_cleanup ((make_cleanup_func) chdir, strsave (current_directory));
+ #endif
+
init_cmd_lists (); /* This needs to be done first */
initialize_targets (); /* Setup target_terminal macros for utils.c */
initialize_utils (); /* Make errors and warnings possible */
***************
*** 3051,3063 ****
if (chdir (dir) < 0)
perror_with_name (dir);
len = strlen (dir);
! dir = savestring (dir, len - (len > 1 && SLASH_P(dir[len-1])));
if (ROOTED_P(dir))
current_directory = dir;
else
{
! if (SLASH_P (current_directory[0]) && current_directory[1] == '\0')
current_directory = concat (current_directory, dir, NULL);
else
current_directory = concat (current_directory, SLASH_STRING, dir, NULL);
- --- 3057,3087 ----
if (chdir (dir) < 0)
perror_with_name (dir);
+ #if defined(_WIN32) || defined(__MSDOS__)
+ /* There's too much mess with DOSish names like "d:", "d:.",
+ "d:./foo" etc. Instead of having lots of special #ifdef'ed code,
+ simply get the canonicalized name of the current directory. */
+ dir = getcwd (gdb_dirbuf, sizeof (gdb_dirbuf));
+ #endif
len = strlen (dir);
! if (SLASH_P (dir[len-1]))
! {
! /* Remove the trailing slash unless this is a root directory
! (including a drive letter on non-Unix systems). */
! if (!(len == 1) /* "/" */
! #if defined(_WIN32) || defined(__MSDOS__)
! && !(!SLASH_P (*dir) && ROOTED_P (dir) && len <= 3) /* "d:/" */
! #endif
! )
! len--;
! }
!
! dir = savestring (dir, len);
if (ROOTED_P(dir))
current_directory = dir;
else
{
! if (SLASH_P (current_directory[strlen (current_directory) - 1]))
current_directory = concat (current_directory, dir, NULL);
else
current_directory = concat (current_directory, SLASH_STRING, dir, NULL);
***************
*** 3442,3448 ****
- --- 3466,3477 ----
/* We include the current directory so that if the user changes
directories the file written will be the same as the one
that was read. */
+ #ifdef __MSDOS__
+ /* No leading dots in file names are allowed on MSDOS. */
+ history_filename = concat (current_directory, "/_gdb_history", NULL);
+ #else
history_filename = concat (current_directory, "/.gdb_history", NULL);
+ #endif
}
read_history (history_filename);
}
------- End of forwarded message -------
From dj@delorie.com Sun Jun 27 10:49:00 1999
From: DJ Delorie <dj@delorie.com>
To: gdb-patches@sourceware.cygnus.com
Subject: [eliz@is.elta.co.il: Terminal support in DJGPP port of GDB]
Date: Sun, 27 Jun 1999 10:49:00 -0000
Message-id: <199906271748.NAA32036@envy.delorie.com>
X-SW-Source: 1999-q2/msg00159.html
Content-length: 1996
------- Start of forwarded message -------
Date: Sun, 27 Jun 1999 19:13:18 +0300 (IDT)
From: Eli Zaretskii <eliz@is.elta.co.il>
X-Sender: eliz@is
To: DJ Delorie <dj@delorie.com>
cc: Robert Hoehne <robert.hoehne@gmx.net>
Subject: Terminal support in DJGPP port of GDB
Content-Type: TEXT/PLAIN; charset=US-ASCII
1999-06-26 Eli Zaretskii <eliz@is.elta.co.il>
* terminal.h [__GO32__]: Remove conditional; DJGPP now supports
termios.
*** cvs/gdb/terminal.h Fri Apr 16 04:34:06 1999
- --- ./gdb/terminal.h Fri May 21 22:44:08 1999
*************** Foundation, Inc., 59 Temple Place - Suit
*** 29,36 ****
nothing has already defined the one of the names, and do the right
thing. */
- - /* nothing works with go32, and the headers aren't complete */
- - #if !defined (__GO32__)
#if !defined (HAVE_TERMIOS) && !defined(HAVE_TERMIO) && !defined(HAVE_SGTTY)
#if defined(HAVE_TERMIOS_H)
#define HAVE_TERMIOS
- --- 29,34 ----
*************** Foundation, Inc., 59 Temple Place - Suit
*** 44,56 ****
#endif /* ! defined (HAVE_TERMIO_H) */
#endif /* ! defined (HAVE_TERMIOS_H) */
#endif /* !defined (HAVE_TERMIOS) && !defined(HAVE_TERMIO) && !defined(HAVE_SGTTY) */
- - #endif /* ! defined (__GO32__) */
#if defined(HAVE_TERMIOS)
#include <termios.h>
#endif
! #if !defined(__GO32__) && !defined(_WIN32) && !defined (HAVE_TERMIOS)
/* Define a common set of macros -- BSD based -- and redefine whatever
the system offers to make it look like that. FIXME: serial.h and
- --- 42,53 ----
#endif /* ! defined (HAVE_TERMIO_H) */
#endif /* ! defined (HAVE_TERMIOS_H) */
#endif /* !defined (HAVE_TERMIOS) && !defined(HAVE_TERMIO) && !defined(HAVE_SGTTY) */
#if defined(HAVE_TERMIOS)
#include <termios.h>
#endif
! #if !defined(_WIN32) && !defined (HAVE_TERMIOS)
/* Define a common set of macros -- BSD based -- and redefine whatever
the system offers to make it look like that. FIXME: serial.h and
------- End of forwarded message -------
From dj@delorie.com Sun Jun 27 10:49:00 1999
From: DJ Delorie <dj@delorie.com>
To: gdb-patches@sourceware.cygnus.com
Subject: [eliz@is.elta.co.il: GDB: pexecute patches]
Date: Sun, 27 Jun 1999 10:49:00 -0000
Message-id: <199906271749.NAA32053@envy.delorie.com>
X-SW-Source: 1999-q2/msg00163.html
Content-length: 1795
------- Start of forwarded message -------
Date: Sun, 27 Jun 1999 19:18:33 +0300 (IDT)
From: Eli Zaretskii <eliz@is.elta.co.il>
X-Sender: eliz@is
To: DJ Delorie <dj@delorie.com>
cc: Robert Hoehne <robert.hoehne@gmx.net>
Subject: GDB: pexecute patches
Content-Type: TEXT/PLAIN; charset=US-ASCII
1999-06-26 Eli Zaretskii <eliz@is.elta.co.il>
* pexecute.c (pexecute) [__GO32__]: Use P_WAIT rather than a
literal constant.
[__DJGPP__]: Don't shift left the return code of spawn.
*** ./libiberty/pexecute.c~0 Fri Jan 15 06:35:26 1999
- --- ./libiberty/pexecute.c Mon May 17 14:04:40 1999
*************** pexecute (program, argv, this_pname, tem
*** 150,156 ****
#ifdef __GO32__
/* ??? What are the possible return values from spawnv? */
! rc = (flags & PEXECUTE_SEARCH ? spawnvp : spawnv) (1, program, argv);
#else
char *scmd, *rf;
FILE *argfile;
- --- 150,156 ----
#ifdef __GO32__
/* ??? What are the possible return values from spawnv? */
! rc = (flags & PEXECUTE_SEARCH ? spawnvp : spawnv) (P_WAIT, program, argv);
#else
char *scmd, *rf;
FILE *argfile;
*************** pexecute (program, argv, this_pname, tem
*** 197,208 ****
if (rc == -1)
{
*errmsg_fmt = install_error_msg;
! *errmsg_arg = program;
return -1;
}
/* Tuck the status away for pwait, and return a "pid". */
last_status = rc << 8;
return last_pid;
}
- --- 197,212 ----
if (rc == -1)
{
*errmsg_fmt = install_error_msg;
! *errmsg_arg = (char *)program;
return -1;
}
/* Tuck the status away for pwait, and return a "pid". */
+ #ifdef __DJGPP__
+ last_status = rc;
+ #else
last_status = rc << 8;
+ #endif
return last_pid;
}
------- End of forwarded message -------
From dj@delorie.com Sun Jun 27 10:49:00 1999
From: DJ Delorie <dj@delorie.com>
To: gdb-patches@sourceware.cygnus.com
Subject: [eliz@is.elta.co.il: Shell escape in the DJGPP port of GDB]
Date: Sun, 27 Jun 1999 10:49:00 -0000
Message-id: <199906271748.NAA32027@envy.delorie.com>
X-SW-Source: 1999-q2/msg00166.html
Content-length: 2233
------- Start of forwarded message -------
Date: Sun, 27 Jun 1999 18:58:13 +0300 (IDT)
From: Eli Zaretskii <eliz@is.elta.co.il>
X-Sender: eliz@is
To: DJ Delorie <dj@delorie.com>
cc: Robert Hoehne <robert.hoehne@gmx.net>
Subject: Shell escape in the DJGPP port of GDB
Content-Type: TEXT/PLAIN; charset=US-ASCII
These patches make the shell command work correctly in the GDB port.
1999-06-26 Eli Zaretskii <eliz@is.elta.co.il>
* command.c (CANT_FORK) [__MSDOS__]: Define.
(shell_escape) [CANT_FORK]: If ARG is NULL, pass an empty string
to `system'.
[__DJGPP__]: Return to the original directory after the shell
exits.
*** ./gdb/command.c~0 Thu Dec 31 21:58:04 1998
- --- ./gdb/command.c Sat May 22 12:56:30 1999
*************** Foundation, Inc., 59 Temple Place - Suit
*** 35,40 ****
- --- 35,45 ----
#include "wait.h"
+ /* FIXME: this should be auto-configured! */
+ #ifdef __MSDOS__
+ # define CANT_FORK
+ #endif
+
/* Prototypes for local functions */
static void undef_cmd_error PARAMS ((char *, char *));
*************** shell_escape (arg, from_tty)
*** 1441,1449 ****
int from_tty;
{
#ifdef CANT_FORK
! /* FIXME: what about errors (I don't know how GO32 system() handles
! them)? */
! system (arg);
#else /* Can fork. */
int rc, status, pid;
char *p, *user_shell;
- --- 1446,1474 ----
int from_tty;
{
#ifdef CANT_FORK
! /* If ARG is NULL, they want an inferior shell, but `system' just
! reports if the shell is available when passed a NULL arg. */
! int rc = system (arg ? arg : "");
!
! if (!arg)
! arg = "inferior shell";
!
! if (rc == -1)
! {
! fprintf_unfiltered (gdb_stderr, "Cannot execute %s: %s\n", arg,
! safe_strerror (errno));
! gdb_flush (gdb_stderr);
! }
! else if (rc)
! {
! fprintf_unfiltered (gdb_stderr, "%s exited with status %d\n", arg, rc);
! gdb_flush (gdb_stderr);
! }
! #ifdef __DJGPP__
! /* Make sure to return to the directory GDB thinks it is, in case the
! shell command we just ran changed it. */
! chdir (current_directory);
! #endif
#else /* Can fork. */
int rc, status, pid;
char *p, *user_shell;
------- End of forwarded message -------
From dj@delorie.com Sun Jun 27 10:49:00 1999
From: DJ Delorie <dj@delorie.com>
To: gdb-patches@sourceware.cygnus.com
Subject: [eliz@is.elta.co.il: GDB: Stray bytes left in buffer by "info float"]
Date: Sun, 27 Jun 1999 10:49:00 -0000
Message-id: <199906271749.NAA32047@envy.delorie.com>
X-SW-Source: 1999-q2/msg00165.html
Content-length: 1209
------- Start of forwarded message -------
Date: Sun, 27 Jun 1999 19:15:13 +0300 (IDT)
From: Eli Zaretskii <eliz@is.elta.co.il>
X-Sender: eliz@is
To: DJ Delorie <dj@delorie.com>
cc: Robert Hoehne <robert.hoehne@gmx.net>
Subject: GDB: Stray bytes left in buffer by "info float"
Content-Type: TEXT/PLAIN; charset=US-ASCII
1999-06-26 Eli Zaretskii <eliz@is.elta.co.il>
* infcmd.c (do_registers_info): Zero out buffers before filling
them with data from registers.
*** ./gdb/infcmd.c~0 Wed Jan 6 03:06:20 1999
- --- ./gdb/infcmd.c Sat Jun 5 13:23:26 1999
*************** do_registers_info (regnum, fpregs)
*** 1076,1081 ****
- --- 1076,1086 ----
char raw_buffer[MAX_REGISTER_RAW_SIZE];
char virtual_buffer[MAX_REGISTER_VIRTUAL_SIZE];
+ /* Zero out buffers, otherwise shorter registers may inherit stray
+ bits from longer ones. */
+ memset (raw_buffer, 0, MAX_REGISTER_RAW_SIZE);
+ memset (virtual_buffer, 0, MAX_REGISTER_VIRTUAL_SIZE);
+
/* Decide between printing all regs, nonfloat regs, or specific reg. */
if (regnum == -1) {
if (TYPE_CODE (REGISTER_VIRTUAL_TYPE (i)) == TYPE_CODE_FLT && !fpregs)
------- End of forwarded message -------
From dj@delorie.com Sun Jun 27 10:49:00 1999
From: DJ Delorie <dj@delorie.com>
To: gdb-patches@sourceware.cygnus.com
Subject: [eliz@is.elta.co.il: Problem with gnu-regex.c when wctype.h is available]
Date: Sun, 27 Jun 1999 10:49:00 -0000
Message-id: <199906271748.NAA32010@envy.delorie.com>
X-SW-Source: 1999-q2/msg00161.html
Content-length: 1574
------- Start of forwarded message -------
Date: Sun, 27 Jun 1999 18:49:48 +0300 (IDT)
From: Eli Zaretskii <eliz@is.elta.co.il>
X-Sender: eliz@is
To: gdb-patches@sourceware.cygnus.com
cc: DJ Delorie <dj@delorie.com>
Subject: Problem with gnu-regex.c when wctype.h is available
Content-Type: TEXT/PLAIN; charset=US-ASCII
If wctype.h and wchar.h are available, but btowc is not (DJGPP is a case
in point), gnu-regex.c causes link errors. Here's a patch:
1999-06-26 Eli Zaretskii <eliz@is.elta.co.il>
* gnu-regex.c (CHAR_CLASS_MAX_LENGTH): Don't use wide characters
unless HAVE_BTOWC is defined.
*** cvs/gdb/gnu-regex.c Fri Apr 16 04:34:00 1999
- --- ./gdb/gnu-regex.c Mon May 17 17:21:56 1999
***************
*** 1700,1706 ****
} \
}
! #if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H)
/* The GNU C library provides support for user-defined character classes
and the functions from ISO C amendement 1. */
# ifdef CHARCLASS_NAME_MAX
- --- 1700,1710 ----
} \
}
! /* Use this only if they have btowc(), since wctype() is used below
! together with btowc(). btowc() is defined in the 1994 Amendment 1
! to ISO C and may not be present on systems where we have wchar.h
! and wctype.h. */
! #if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H && defined HAVE_BTOWC)
/* The GNU C library provides support for user-defined character classes
and the functions from ISO C amendement 1. */
# ifdef CHARCLASS_NAME_MAX
------- End of forwarded message -------
From dj@delorie.com Sun Jun 27 10:49:00 1999
From: DJ Delorie <dj@delorie.com>
To: gdb-patches@sourceware.cygnus.com
Subject: [eliz@is.elta.co.il: Hardware breakpoints in DJGPP port of GDB]
Date: Sun, 27 Jun 1999 10:49:00 -0000
Message-id: <199906271747.NAA32007@envy.delorie.com>
X-SW-Source: 1999-q2/msg00162.html
Content-length: 1780
------- Start of forwarded message -------
Date: Sun, 27 Jun 1999 18:47:54 +0300 (IDT)
From: Eli Zaretskii <eliz@is.elta.co.il>
X-Sender: eliz@is
To: gdb-patches@sourceware.cygnus.com
cc: DJ Delorie <dj@delorie.com>
Subject: Hardware breakpoints in DJGPP port of GDB
Content-Type: TEXT/PLAIN; charset=US-ASCII
The following change resurrects hardware breakpoints in the DJGPP port of
GDB, and avoid referencing a char array beyond its end:
1999-06-26 Eli Zaretskii <eliz@is.elta.co.il>
* config/i386/xm-go32.h (ROOTED_P): Don't reference X[1] if X[0]
is a null character.
* config/i386/nm-go32.h (DECR_PC_AFTER_HW_BREAK): Define to 1.
*** cvs/gdb/config/i386/xm-go32.h Mon Apr 26 21:26:22 1999
- --- gdb/config/i386/xm-go32.h Fri May 21 09:45:34 1999
***************
*** 25,31 ****
#define SLASH_P(X) ((X)=='\\' || (X) == '/')
! #define ROOTED_P(X) ((SLASH_P((X)[0]))|| ((X)[1] ==':'))
#define SLASH_CHAR '/'
#define SLASH_STRING "/"
- --- 25,31 ----
#define SLASH_P(X) ((X)=='\\' || (X) == '/')
! #define ROOTED_P(X) ((SLASH_P((X)[0])) || ((X)[0] && (X)[1] ==':'))
#define SLASH_CHAR '/'
#define SLASH_STRING "/"
*** cvs/gdb/config/i386/nm-go32.h Tue Apr 27 04:26:18 1999
- --- gdb/config/i386/nm-go32.h Tue May 25 20:13:40 1999
***************
*** 48,54 ****
#define target_remove_hw_breakpoint(addr, shadow) \
go32_remove_hw_breakpoint(addr, shadow)
! #define DECR_PC_AFTER_HW_BREAK 0
#undef FLOAT_INFO
#define FLOAT_INFO { i386_go32_float_info (); }
- --- 48,54 ----
#define target_remove_hw_breakpoint(addr, shadow) \
go32_remove_hw_breakpoint(addr, shadow)
! #define DECR_PC_AFTER_HW_BREAK 1
#undef FLOAT_INFO
#define FLOAT_INFO { i386_go32_float_info (); }
------- End of forwarded message -------
From dj@delorie.com Sun Jun 27 10:49:00 1999
From: DJ Delorie <dj@delorie.com>
To: gdb-patches@sourceware.cygnus.com
Subject: [eliz@is.elta.co.il: Termios support in the DJGPP port of GDB]
Date: Sun, 27 Jun 1999 10:49:00 -0000
Message-id: <199906271748.NAA32030@envy.delorie.com>
X-SW-Source: 1999-q2/msg00158.html
Content-length: 902
------- Start of forwarded message -------
Date: Sun, 27 Jun 1999 18:59:32 +0300 (IDT)
From: Eli Zaretskii <eliz@is.elta.co.il>
X-Sender: eliz@is
To: DJ Delorie <dj@delorie.com>
cc: Robert Hoehne <robert.hoehne@gmx.net>
Subject: Termios support in the DJGPP port of GDB
Content-Type: TEXT/PLAIN; charset=US-ASCII
Since we now use termios in GDB, these two functions need to be ifdef'ed
away:
1999-06-26 Eli Zaretskii <eliz@is.elta.co.il>
* inflow.c (tcgetpgrp, tcsetpgrp) [__DJGPP__]: Define away.
*** ./gdb/inflow.c~1 Thu Dec 10 21:25:42 1998
- --- ./gdb/inflow.c Fri May 21 23:32:20 1999
*************** Foundation, Inc., 59 Temple Place - Suit
*** 36,41 ****
- --- 36,45 ----
#ifdef HAVE_TERMIOS
#define PROCESS_GROUP_TYPE pid_t
+ #ifdef __DJGPP__
+ #define tcgetpgrp(x) 42
+ #define tcsetpgrp(f,x) 0
+ #endif
#endif
#ifdef HAVE_TERMIO
------- End of forwarded message -------
From dj@delorie.com Sun Jun 27 10:49:00 1999
From: DJ Delorie <dj@delorie.com>
To: gdb-patches@sourceware.cygnus.com
Subject: [eliz@is.elta.co.il: GDB: suffix at end of numbers]
Date: Sun, 27 Jun 1999 10:49:00 -0000
Message-id: <199906271749.NAA32050@envy.delorie.com>
X-SW-Source: 1999-q2/msg00160.html
Content-length: 6387
------- Start of forwarded message -------
Date: Sun, 27 Jun 1999 19:17:52 +0300 (IDT)
From: Eli Zaretskii <eliz@is.elta.co.il>
X-Sender: eliz@is
To: DJ Delorie <dj@delorie.com>
cc: Robert Hoehne <robert.hoehne@gmx.net>
Subject: GDB: suffix at end of numbers
Content-Type: TEXT/PLAIN; charset=US-ASCII
Numbers like 1.0000L didn't work. Now they do:
1999-06-26 Eli Zaretskii <eliz@is.elta.co.il>
* c-exp.y (parse_number): Don't let sscanf bail out prematurely
when the number has a suffix.
* jv-exp.y (parse_number): Likewise.
*** ./gdb/c-exp.y~0 Wed Jan 6 16:52:16 1999
- --- ./gdb/c-exp.y Wed Jun 16 21:36:30 1999
*************** parse_number (p, len, parsed_float, puti
*** 947,976 ****
if (parsed_float)
{
/* It's a float since it contains a point or an exponent. */
! char c;
int num = 0; /* number of tokens scanned by scanf */
char saved_char = p[len];
p[len] = 0; /* null-terminate the token */
if (sizeof (putithere->typed_val_float.dval) <= sizeof (float))
! num = sscanf (p, "%g%c", (float *) &putithere->typed_val_float.dval,&c);
else if (sizeof (putithere->typed_val_float.dval) <= sizeof (double))
! num = sscanf (p, "%lg%c", (double *) &putithere->typed_val_float.dval,&c);
else
{
#ifdef SCANF_HAS_LONG_DOUBLE
! num = sscanf (p, "%Lg%c", &putithere->typed_val_float.dval,&c);
#else
/* Scan it into a double, then assign it to the long double.
This at least wins with values representable in the range
of doubles. */
double temp;
! num = sscanf (p, "%lg%c", &temp,&c);
putithere->typed_val_float.dval = temp;
#endif
}
p[len] = saved_char; /* restore the input stream */
! if (num != 1) /* check scanf found ONLY a float ... */
return ERROR;
/* See if it has `f' or `l' suffix (float or long double). */
- --- 947,977 ----
if (parsed_float)
{
/* It's a float since it contains a point or an exponent. */
! char c = 0, c2;
int num = 0; /* number of tokens scanned by scanf */
char saved_char = p[len];
p[len] = 0; /* null-terminate the token */
if (sizeof (putithere->typed_val_float.dval) <= sizeof (float))
! num = sscanf (p, "%g%c%c", (float *) &putithere->typed_val_float.dval,&c,&c2);
else if (sizeof (putithere->typed_val_float.dval) <= sizeof (double))
! num = sscanf (p, "%lg%c%c", (double *) &putithere->typed_val_float.dval,&c,&c2);
else
{
#ifdef SCANF_HAS_LONG_DOUBLE
! num = sscanf (p, "%Lg%c%c", &putithere->typed_val_float.dval,&c,&c2);
#else
/* Scan it into a double, then assign it to the long double.
This at least wins with values representable in the range
of doubles. */
double temp;
! num = sscanf (p, "%lg%c%c", &temp,&c,&c2);
putithere->typed_val_float.dval = temp;
#endif
}
p[len] = saved_char; /* restore the input stream */
! if (num > 2 /* check scanf found ONLY a float ... */
! || (num == 2 && strchr ("lLfF.", c) == NULL))
return ERROR;
/* See if it has `f' or `l' suffix (float or long double). */
*** ./gdb/jv-exp.y~0 Thu Mar 4 20:56:38 1999
- --- ./gdb/jv-exp.y Wed Jun 16 21:41:04 1999
*************** parse_number (p, len, parsed_float, puti
*** 697,734 ****
if (parsed_float)
{
/* It's a float since it contains a point or an exponent. */
! char c;
int num = 0; /* number of tokens scanned by scanf */
char saved_char = p[len];
p[len] = 0; /* null-terminate the token */
if (sizeof (putithere->typed_val_float.dval) <= sizeof (float))
! num = sscanf (p, "%g%c", (float *) &putithere->typed_val_float.dval, &c);
else if (sizeof (putithere->typed_val_float.dval) <= sizeof (double))
! num = sscanf (p, "%lg%c", (double *) &putithere->typed_val_float.dval, &c);
else
{
#ifdef SCANF_HAS_LONG_DOUBLE
! num = sscanf (p, "%Lg%c", &putithere->typed_val_float.dval, &c);
#else
/* Scan it into a double, then assign it to the long double.
This at least wins with values representable in the range
of doubles. */
double temp;
! num = sscanf (p, "%lg%c", &temp, &c);
putithere->typed_val_float.dval = temp;
#endif
}
p[len] = saved_char; /* restore the input stream */
! if (num != 1) /* check scanf found ONLY a float ... */
return ERROR;
/* See if it has `f' or `d' suffix (float or double). */
c = tolower (p[len - 1]);
! if (c == 'f' || c == 'F')
putithere->typed_val_float.type = builtin_type_float;
! else if (isdigit (c) || c == '.' || c == 'd' || c == 'D')
putithere->typed_val_float.type = builtin_type_double;
else
return ERROR;
- --- 697,735 ----
if (parsed_float)
{
/* It's a float since it contains a point or an exponent. */
! char c = 0, c2;
int num = 0; /* number of tokens scanned by scanf */
char saved_char = p[len];
p[len] = 0; /* null-terminate the token */
if (sizeof (putithere->typed_val_float.dval) <= sizeof (float))
! num = sscanf (p, "%g%c%c", (float *) &putithere->typed_val_float.dval, &c, &c2);
else if (sizeof (putithere->typed_val_float.dval) <= sizeof (double))
! num = sscanf (p, "%lg%c%c", (double *) &putithere->typed_val_float.dval, &c, &c2);
else
{
#ifdef SCANF_HAS_LONG_DOUBLE
! num = sscanf (p, "%Lg%c%c", &putithere->typed_val_float.dval,&c,&c2);
#else
/* Scan it into a double, then assign it to the long double.
This at least wins with values representable in the range
of doubles. */
double temp;
! num = sscanf (p, "%lg%c%c", &temp, &c, &c2);
putithere->typed_val_float.dval = temp;
#endif
}
p[len] = saved_char; /* restore the input stream */
! if (num > 2 /* check scanf found ONLY a float ... */
! || (num == 2 && strchr ("fFdD.", c) == NULL))
return ERROR;
/* See if it has `f' or `d' suffix (float or double). */
c = tolower (p[len - 1]);
! if (c == 'f')
putithere->typed_val_float.type = builtin_type_float;
! else if (isdigit (c) || c == '.' || c == 'd')
putithere->typed_val_float.type = builtin_type_double;
else
return ERROR;
------- End of forwarded message -------
From dj@delorie.com Sun Jun 27 10:49:00 1999
From: DJ Delorie <dj@delorie.com>
To: gdb-patches@sourceware.cygnus.com
Subject: [eliz@is.elta.co.il: Signals support in DJGPP port of GDB]
Date: Sun, 27 Jun 1999 10:49:00 -0000
Message-id: <199906271748.NAA32024@envy.delorie.com>
X-SW-Source: 1999-q2/msg00164.html
Content-length: 2805
------- Start of forwarded message -------
Date: Sun, 27 Jun 1999 18:57:10 +0300 (IDT)
From: Eli Zaretskii <eliz@is.elta.co.il>
X-Sender: eliz@is
To: DJ Delorie <dj@delorie.com>
Subject: Signals support in DJGPP port of GDB
Content-Type: TEXT/PLAIN; charset=US-ASCII
These changes fix some signal-related problems:
1999-06-26 Eli Zaretskii <eliz@is.elta.co.il>
* utils.c (endif) [__DJGPP__]: Simulate a core dump with SIGABRT.
(quit) [__MSDOS__]: Don't mention SIGINT, since it's not gonna
happen.
(notice_quit): No need to define this function for the DJGPP
port.
*** ./gdb/utils.c~0 Thu Feb 11 00:24:40 1999
- --- ./gdb/utils.c Sat May 22 08:47:34 1999
*************** fatal_dump_core (va_alist)
*** 512,519 ****
- --- 512,525 ----
fprintf_unfiltered (gdb_stderr, "\n");
va_end (args);
+ #ifdef __DJGPP__
+ /* SIGQUIT by default is ignored, so use SIGABRT instead. */
+ signal (SIGABRT, SIG_DFL);
+ kill (getpid (), SIGABRT);
+ #else
signal (SIGQUIT, SIG_DFL);
kill (getpid (), SIGQUIT);
+ #endif
/* We should never get here, but just in case... */
exit (1);
}
*************** quit ()
*** 637,642 ****
- --- 643,653 ----
if (quit_pre_print)
fprintf_unfiltered (gdb_stderr, quit_pre_print);
+ #ifdef __MSDOS__
+ /* No steenking SIGINT will ever be coming our way when the
+ program is resumed. Don't lie. */
+ fprintf_unfiltered (gdb_stderr, "Quit\n");
+ #else
if (job_control
/* If there is no terminal switching for this target, then we can't
possibly get screwed by the lack of job control. */
*************** quit ()
*** 645,680 ****
else
fprintf_unfiltered (gdb_stderr,
"Quit (expect signal SIGINT when the program is resumed)\n");
return_to_top_level (RETURN_QUIT);
}
!
! #if defined(__GO32__)
!
! /* In the absence of signals, poll keyboard for a quit.
! Called from #define QUIT pollquit() in xm-go32.h. */
!
! void
! notice_quit()
! {
! if (kbhit ())
! switch (getkey ())
! {
! case 1:
! quit_flag = 1;
! break;
! case 2:
! immediate_quit = 2;
! break;
! default:
! /* We just ignore it */
! /* FIXME!! Don't think this actually works! */
! fprintf_unfiltered (gdb_stderr, "CTRL-A to quit, CTRL-B to quit harder\n");
! break;
! }
! }
!
! #elif defined(_MSC_VER) /* should test for wingdb instead? */
/*
* Windows translates all keyboard and mouse events
- --- 656,666 ----
else
fprintf_unfiltered (gdb_stderr,
"Quit (expect signal SIGINT when the program is resumed)\n");
+ #endif
return_to_top_level (RETURN_QUIT);
}
! #if defined(_MSC_VER) /* should test for wingdb instead? */
/*
* Windows translates all keyboard and mouse events
------- End of forwarded message -------
From dj@delorie.com Sun Jun 27 10:49:00 1999
From: DJ Delorie <dj@delorie.com>
To: gdb-patches@sourceware.cygnus.com
Subject: [eliz@is.elta.co.il: Empty header printed by "handle" command]
Date: Sun, 27 Jun 1999 10:49:00 -0000
Message-id: <199906271748.NAA32039@envy.delorie.com>
X-SW-Source: 1999-q2/msg00157.html
Content-length: 1238
------- Start of forwarded message -------
Date: Sun, 27 Jun 1999 19:14:25 +0300 (IDT)
From: Eli Zaretskii <eliz@is.elta.co.il>
X-Sender: eliz@is
To: DJ Delorie <dj@delorie.com>
cc: Robert Hoehne <robert.hoehne@gmx.net>
Subject: Empty header printed by "handle" command
Content-Type: TEXT/PLAIN; charset=US-ASCII
1999-06-26 Eli Zaretskii <eliz@is.elta.co.il>
* infrun.c (handle_command): Don't print header if no signal had
its handling changed.
*** ./gdb/infrun.c~1 Mon Mar 1 04:51:52 1999
- --- ./gdb/infrun.c Sat May 22 09:06:26 1999
*************** Are you sure you want to change it? ",
*** 3328,3339 ****
if (from_tty)
{
/* Show the results. */
- - sig_print_header ();
for (signum = 0; signum < nsigs; signum++)
{
if (sigs[signum])
{
sig_print_info (signum);
}
}
- --- 3328,3345 ----
if (from_tty)
{
+ int header_printed = 0;
+
/* Show the results. */
for (signum = 0; signum < nsigs; signum++)
{
if (sigs[signum])
{
+ if (!header_printed)
+ {
+ sig_print_header ();
+ header_printed = 1;
+ }
sig_print_info (signum);
}
}
------- End of forwarded message -------
From dj@delorie.com Sun Jun 27 10:50:00 1999
From: DJ Delorie <dj@delorie.com>
To: gdb-patches@sourceware.cygnus.com
Subject: [eliz@is.elta.co.il: GDB: DJGPP-related problems in readline]
Date: Sun, 27 Jun 1999 10:50:00 -0000
Message-id: <199906271749.NAA32059@envy.delorie.com>
X-SW-Source: 1999-q2/msg00167.html
Content-length: 20850
------- Start of forwarded message -------
Date: Sun, 27 Jun 1999 19:20:06 +0300 (IDT)
From: Eli Zaretskii <eliz@is.elta.co.il>
X-Sender: eliz@is
To: DJ Delorie <dj@delorie.com>
cc: Robert Hoehne <robert.hoehne@gmx.net>
Subject: GDB: DJGPP-related problems in readline
Content-Type: TEXT/PLAIN; charset=US-ASCII
Note-from-DJ: This may be spam
1999-06-26 Eli Zaretskii <eliz@is.elta.co.il>
* complete.c (username_completion_function) [__WIN32__]: Don't
return NULL under DJGPP.
(filename_completion_function) [__WIN32__ || __MSDOS__]: Handle
drive-relative file names like "d:foo/bar".
* bind.c (O_BINARY): If not defined, define to zero.
(_rl_read_file): Open file in binary mode. Strip \r characters
before every \n, and update the buffer size.
(rl_read_init_file) [__MSDOS__]: Try ~/_inputrc if ~/.inputrc
failed.
* rltty.c [__GO32__]: Don't disable signals, don't include
<pc.h>.
(prepare_terminal_settings) [__GO32__]: No need to ifdef away,
termios is supported now.
(rl_prep_terminal): Ditto.
(rl_deprep_terminal): Ditto.
* input.c [__GO32__]: Don't include <pc.h>.
(rl_gather_tyi) [__GO32__]: Remove ifdef'ed code; DJGPP now
supports `select'.
(rl_getc) [__GO32__]: Remove ifdef'ed code; DJGPP supports
termios, single-character read's, and signals.
* readline.c [__GO32__]: Don't disable signal handling.
(rl_refresh_line) [__GO32__]: Remove old buggy code.
* terminal.c (_rl_get_screen_size) [__DJGPP__]: Call ScreenCols
and ScreenRows to get the screen size.
(_rl_init_terminal_io) [__GO32__]: Call _rl_get_screen_size to set
the screen size.
(ding) [__DJGPP__]: Support visible bell.
* signals.c [__DJGPP__]: Don't disable signal handling. Include
<pc.h>.
* histfile.c (read_history_range) [__MSDOS__]: Allow the default
history file to begin with an underscore. Don't fail if the
number of characters read is smaller than the file's size, due to
stripped \r characters.
(history_truncate_file) [__MSDOS__]: Allow the default history
file to begin with an underscore. Use the actual number of chars
read as the number of characters to write back.
(history_do_write) [__MSDOS__]: Allow the default history file to
begin with an underscore.
* display.c (_rl_move_vert) [__GO32__]: fflush the output, to make
sure the cursor position is updated.
(_rl_clear_screen) [__GO32__]: Clear the text-mode screen.
(insert_some_chars, delete_chars) [__GO32__]: Make these two
functions a no-op: they are not called in the DJGPP version, and
the code will crash if it runs.
*** cvs/readline/complete.c Fri Apr 16 04:34:52 1999
- --- ./readline/complete.c Wed Jun 2 22:53:00 1999
*************** username_completion_function (text, stat
*** 1361,1369 ****
int state;
char *text;
{
! #if defined (__GO32__) || defined (__WIN32__)
return (char *)NULL;
! #else /* !__GO32__ */
static char *username = (char *)NULL;
static struct passwd *entry;
static int namelen, first_char, first_char_loc;
- --- 1361,1369 ----
int state;
char *text;
{
! #if defined (__WIN32__)
return (char *)NULL;
! #else /* !__WIN32__ */
static char *username = (char *)NULL;
static struct passwd *entry;
static int namelen, first_char, first_char_loc;
*************** username_completion_function (text, stat
*** 1406,1412 ****
return (value);
}
! #endif /* !__GO32__ */
}
/* Okay, now we write the entry_function for filename completion. In the
- --- 1406,1412 ----
return (value);
}
! #endif /* !__WIN32__ */
}
/* Okay, now we write the entry_function for filename completion. In the
*************** filename_completion_function (text, stat
*** 1453,1458 ****
- --- 1453,1466 ----
strcpy (filename, ++temp);
*temp = '\0';
}
+ #if defined (__WIN32__) || defined (__MSDOS__)
+ /* Handle the drive-relative names "d:foo/bar". */
+ else if (dirname[1] == ':')
+ {
+ strcpy (filename, dirname + 2);
+ dirname[2] = '\0';
+ }
+ #endif
else
{
dirname[0] = '.';
*** cvs/readline/bind.c Fri Apr 16 04:34:52 1999
- --- ./readline/bind.c Thu Jun 3 18:58:04 1999
*************** extern int errno;
*** 62,67 ****
- --- 62,71 ----
extern char *strchr (), *strrchr ();
#endif /* !strchr && !__STDC__ */
+ #ifndef O_BINARY
+ # define O_BINARY 0
+ #endif
+
extern int _rl_horizontal_scroll_mode;
extern int _rl_mark_modified_lines;
extern int _rl_bell_preference;
*************** _rl_read_file (filename, sizep)
*** 642,648 ****
char *buffer;
int i, file;
! if ((stat (filename, &finfo) < 0) || (file = open (filename, O_RDONLY, 0666)) < 0)
return ((char *)NULL);
file_size = (size_t)finfo.st_size;
- --- 646,652 ----
char *buffer;
int i, file;
! if ((stat (filename, &finfo) < 0) || (file = open (filename, O_RDONLY|O_BINARY, 0666)) < 0)
return ((char *)NULL);
file_size = (size_t)finfo.st_size;
*************** _rl_read_file (filename, sizep)
*** 670,675 ****
- --- 674,703 ----
}
buffer[file_size] = '\0';
+
+ #if O_BINARY
+ {
+ /* Systems which distinguish between text and binary files need
+ to strip the CR characters before each Newline, otherwise the
+ parsing functions won't work. */
+ char *s, *d;
+ size_t removed = 0;
+
+ for (s = buffer, d = buffer; s < buffer + file_size; s++)
+ {
+ if (removed)
+ *d = *s;
+ if (*s != '\r' || s[1] != '\n')
+ d++;
+ else
+ removed++;
+ }
+
+ file_size -= removed;
+ buffer[file_size] = '\0';
+ }
+ #endif
+
if (sizep)
*sizep = file_size;
return (buffer);
*************** rl_re_read_init_file (count, ignore)
*** 691,696 ****
- --- 719,725 ----
1. the filename used for the previous call
2. the value of the shell variable `INPUTRC'
3. ~/.inputrc
+ 4. (for __MSDOS__ only) ~/_inputrc
If the file existed and could be opened and read, 0 is returned,
otherwise errno is returned. */
int
*************** rl_read_init_file (filename)
*** 710,715 ****
- --- 739,758 ----
if (*filename == 0)
filename = DEFAULT_INPUTRC;
+ #ifdef __MSDOS__
+ {
+ /* DOS doesn't allow leading dots in file names. If the original
+ name fails (it could work if we are on Windows), fall back to
+ ~/_inputrc. */
+ int retval = _rl_read_init_file (filename, 0);
+
+ if (retval == 0)
+ return retval;
+ else if (strcmp (filename, "~/.inputrc") == 0)
+ filename = "~/_inputrc";
+ }
+ #endif
+
return (_rl_read_init_file (filename, 0));
}
*** cvs/readline/rltty.c Fri Apr 16 04:34:52 1999
- --- ./readline/rltty.c Thu May 20 19:20:02 1999
*************** extern int _rl_enable_keypad, _rl_enable
*** 55,65 ****
extern void _rl_control_keypad ();
- - #if defined (__GO32__)
- - # include <pc.h>
- - # undef HANDLE_SIGNALS
- - #endif /* __GO32__ */
- -
/* Indirect functions to allow apps control over terminal management. */
extern void rl_prep_terminal (), rl_deprep_terminal ();
- --- 55,60 ----
*************** prepare_terminal_settings (meta_flag, ot
*** 260,266 ****
int meta_flag;
TIOTYPE otio, *tiop;
{
- - #if !defined (__GO32__)
readline_echoing_p = (otio.sgttyb.sg_flags & ECHO);
/* Copy the original settings to the structure we're going to use for
- --- 255,260 ----
*************** prepare_terminal_settings (meta_flag, ot
*** 326,332 ****
tiop->ltchars.t_dsuspc = -1; /* C-y */
tiop->ltchars.t_lnextc = -1; /* C-v */
#endif /* TIOCGLTC */
- - #endif /* !__GO32__ */
}
#else /* !defined (NEW_TTY_DRIVER) */
- --- 320,325 ----
*************** void
*** 521,527 ****
rl_prep_terminal (meta_flag)
int meta_flag;
{
- - #if !defined (__GO32__)
int tty;
TIOTYPE tio;
- --- 514,519 ----
*************** rl_prep_terminal (meta_flag)
*** 556,569 ****
terminal_prepped = 1;
release_sigint ();
- - #endif /* !__GO32__ */
}
/* Restore the terminal's normal settings and modes. */
void
rl_deprep_terminal ()
{
- - #if !defined (__GO32__)
int tty;
if (!terminal_prepped)
- --- 548,559 ----
*************** rl_deprep_terminal ()
*** 588,594 ****
terminal_prepped = 0;
release_sigint ();
- - #endif /* !__GO32__ */
}
\f
/* **************************************************************** */
- --- 578,583 ----
*** cvs/readline/input.c Fri Apr 16 04:34:52 1999
- --- ./readline/input.c Wed May 19 22:26:44 1999
*************** extern Keymap _rl_keymap;
*** 96,105 ****
extern int _rl_convert_meta_chars_to_ascii;
- - #if defined (__GO32__)
- - # include <pc.h>
- - #endif /* __GO32__ */
- -
/* Non-null means it is a pointer to a function to run while waiting for
character input. */
Function *rl_event_hook = (Function *)NULL;
- --- 96,101 ----
*************** rl_unget_char (key)
*** 201,217 ****
static void
rl_gather_tyi ()
{
- - #if defined (__GO32__)
- - char input;
- -
- - if (isatty (0) && kbhit () && ibuffer_space ())
- - {
- - int i;
- - i = (*rl_getc_function) (rl_instream);
- - rl_stuff_char (i);
- - }
- - #else /* !__GO32__ */
- -
int tty;
register int tem, result;
int chars_avail;
- --- 197,202 ----
*************** rl_gather_tyi ()
*** 280,286 ****
if (chars_avail)
rl_stuff_char (input);
}
- - #endif /* !__GO32__ */
}
/* Is there input available to be read on the readline input file
- --- 265,270 ----
*************** rl_getc (stream)
*** 392,402 ****
int result, flags;
unsigned char c;
- - #if defined (__GO32__)
- - if (isatty (0))
- - return (getkey () & 0x7F);
- - #endif /* __GO32__ */
- -
while (1)
{
result = read (fileno (stream), &c, sizeof (unsigned char));
- --- 376,381 ----
*************** rl_getc (stream)
*** 438,449 ****
}
#endif /* _POSIX_VERSION && EAGAIN && O_NONBLOCK */
- - #if !defined (__GO32__)
/* If the error that we received was SIGINT, then try again,
this is simply an interrupted system call to read ().
Otherwise, some error ocurred, also signifying EOF. */
if (errno != EINTR)
return (EOF);
- - #endif /* !__GO32__ */
}
}
- --- 417,426 ----
*** cvs/readline/readline.c Fri Apr 16 04:34:52 1999
- --- ./readline/readline.c Thu May 20 18:09:24 1999
*************** static void readline_default_bindings ()
*** 174,180 ****
#if defined (__GO32__)
# include <go32.h>
# include <pc.h>
- - # undef HANDLE_SIGNALS
#endif /* __GO32__ */
extern char *xmalloc (), *xrealloc ();
- --- 174,179 ----
*************** rl_refresh_line ()
*** 1249,1267 ****
_rl_move_vert (curr_line);
_rl_move_cursor_relative (0, the_line); /* XXX is this right */
- -
- - #if defined (__GO32__)
- - {
- - int row, col, width, row_start;
- -
- - ScreenGetCursor (&row, &col);
- - width = ScreenCols ();
- - row_start = ScreenPrimary + (row * width);
- - memset (row_start + col, 0, (width - col) * 2);
- - }
- - #else /* !__GO32__ */
_rl_clear_to_eol (0); /* arg of 0 means to not use spaces */
- - #endif /* !__GO32__ */
rl_forced_update_display ();
rl_display_fixed = 1;
- --- 1248,1254 ----
*** cvs/readline/terminal.c Mon Apr 26 21:30:28 1999
- --- ./readline/terminal.c Sat May 22 17:12:48 1999
*************** _rl_get_screen_size (tty, ignore_env)
*** 186,192 ****
if (ignore_env == 0 && (ss = get_env_value ("COLUMNS")))
screenwidth = atoi (ss);
! #if !defined(__DJGPP__)
if (screenwidth <= 0 && term_string_buffer)
screenwidth = tgetnum ("co");
#endif
- --- 186,195 ----
if (ignore_env == 0 && (ss = get_env_value ("COLUMNS")))
screenwidth = atoi (ss);
! #if defined(__DJGPP__)
! if (screenwidth <= 0)
! screenwidth = ScreenCols ();
! #else
if (screenwidth <= 0 && term_string_buffer)
screenwidth = tgetnum ("co");
#endif
*************** _rl_get_screen_size (tty, ignore_env)
*** 199,205 ****
if (ignore_env == 0 && (ss = get_env_value ("LINES")))
screenheight = atoi (ss);
! #if !defined(__DJGPP__)
if (screenheight <= 0 && term_string_buffer)
screenheight = tgetnum ("li");
#endif
- --- 202,211 ----
if (ignore_env == 0 && (ss = get_env_value ("LINES")))
screenheight = atoi (ss);
! #if defined(__DJGPP__)
! if (screenheight <= 0)
! screenheight = ScreenRows ();
! #else
if (screenheight <= 0 && term_string_buffer)
screenheight = tgetnum ("li");
#endif
*************** _rl_init_terminal_io (terminal_name)
*** 295,303 ****
char *terminal_name;
{
#if defined (__GO32__)
! screenwidth = ScreenCols ();
! screenheight = ScreenRows ();
! screenchars = screenwidth * screenheight;
term_cr = "\r";
term_im = term_ei = term_ic = term_IC = (char *)NULL;
term_up = term_dc = term_DC = visible_bell = (char *)NULL;
- --- 301,309 ----
char *terminal_name;
{
#if defined (__GO32__)
! screenwidth = screenheight = 0;
! _rl_get_screen_size (rl_instream ? fileno (rl_instream) : 0, 0);
!
term_cr = "\r";
term_im = term_ei = term_ic = term_IC = (char *)NULL;
term_up = term_dc = term_DC = visible_bell = (char *)NULL;
*************** ding ()
*** 500,527 ****
{
if (readline_echoing_p)
{
- - #if !defined (__GO32__)
switch (_rl_bell_preference)
{
case NO_BELL:
default:
break;
case VISIBLE_BELL:
if (visible_bell)
{
tputs (visible_bell, 1, _rl_output_character_function);
break;
}
/* FALLTHROUGH */
case AUDIBLE_BELL:
fprintf (stderr, "\007");
fflush (stderr);
break;
}
- - #else /* __GO32__ */
- - fprintf (stderr, "\007");
- - fflush (stderr);
- - #endif /* __GO32__ */
return (0);
}
return (-1);
- --- 506,533 ----
{
if (readline_echoing_p)
{
switch (_rl_bell_preference)
{
case NO_BELL:
default:
break;
case VISIBLE_BELL:
+ #ifdef __DJGPP__
+ ScreenVisualBell ();
+ break;
+ #else
if (visible_bell)
{
tputs (visible_bell, 1, _rl_output_character_function);
break;
}
/* FALLTHROUGH */
+ #endif
case AUDIBLE_BELL:
fprintf (stderr, "\007");
fflush (stderr);
break;
}
return (0);
}
return (-1);
*** cvs/readline/signals.c Fri Apr 16 04:34:54 1999
- --- ./readline/signals.c Thu May 20 19:20:44 1999
***************
*** 40,48 ****
# include <sys/ioctl.h>
#endif /* GWINSZ_IN_SYS_IOCTL */
! #if defined (__GO32__)
! # undef HANDLE_SIGNALS
! #endif /* __GO32__ */
#if defined (HANDLE_SIGNALS)
/* Some standard library routines. */
- --- 40,48 ----
# include <sys/ioctl.h>
#endif /* GWINSZ_IN_SYS_IOCTL */
! #ifdef __DJGPP__
! # include <pc.h>
! #endif
#if defined (HANDLE_SIGNALS)
/* Some standard library routines. */
*** cvs/readline/histfile.c Fri Apr 16 04:34:52 1999
- --- ./readline/histfile.c Sat Jun 5 16:11:48 1999
*************** read_history_range (filename, from, to)
*** 140,145 ****
- --- 140,154 ----
input = history_filename (filename);
file = open (input, O_RDONLY|O_BINARY, 0666);
+ #ifdef __MSDOS__
+ /* MSDOS doesn't allow leading dots in file names. Try again
+ with the dot replaced by an underscore. */
+ if (file < 0 && !filename)
+ {
+ input[strlen (input) - 8] = '_';
+ file = open (input, O_RDONLY|O_BINARY, 0666);
+ }
+ #endif
if ((file < 0) || (fstat (file, &finfo) == -1))
goto error_and_exit;
*************** read_history_range (filename, from, to)
*** 155,161 ****
- --- 164,177 ----
}
buffer = xmalloc (file_size + 1);
+ #ifdef __MSDOS__
+ /* The actual number read might be smaller, due to CRs being
+ stripped. */
+ file_size = read (file, buffer, file_size);
+ if (file_size < 0)
+ #else
if (read (file, buffer, file_size) != file_size)
+ #endif
{
error_and_exit:
if (file >= 0)
*************** history_truncate_file (fname, lines)
*** 229,234 ****
- --- 245,260 ----
filename = history_filename (fname);
file = open (filename, O_RDONLY|O_BINARY, 0666);
+ #ifdef __MSDOS__
+ /* MSDOS doesn't allow leading dots in file names. Try again
+ with the dot replaced by an underscore. */
+ if (file < 0 && !fname)
+ {
+ filename[strlen (filename) - 8] = '_';
+ file = open (filename, O_RDONLY|O_BINARY, 0666);
+ }
+ #endif
+
if (file == -1 || fstat (file, &finfo) == -1)
goto truncate_exit;
*************** history_truncate_file (fname, lines)
*** 275,281 ****
truncate to. */
if (i && ((file = open (filename, O_WRONLY|O_TRUNC|O_BINARY, 0600)) != -1))
{
! write (file, buffer + i, file_size - i);
close (file);
}
- --- 301,307 ----
truncate to. */
if (i && ((file = open (filename, O_WRONLY|O_TRUNC|O_BINARY, 0600)) != -1))
{
! write (file, buffer + i, chars_read - i);
close (file);
}
*************** history_do_write (filename, nelements, o
*** 302,311 ****
- --- 328,353 ----
mode = overwrite ? O_WRONLY|O_CREAT|O_TRUNC|O_BINARY : O_WRONLY|O_APPEND|O_BINARY;
output = history_filename (filename);
+
if ((file = open (output, mode, 0600)) == -1)
{
+ #ifdef __MSDOS__
+ /* MSDOS doesn't allow leading dots in file names. If this is
+ the default file name, try again with the dot replaced by an
+ underscore. */
+ if (!filename)
+ {
+ output[strlen (output) - 8] = '_';
+ if ((file = open (output, mode, 0600)) == -1)
+ {
+ FREE (output);
+ return (errno);
+ }
+ }
+ #else
FREE (output);
return (errno);
+ #endif
}
if (nelements > history_length)
*** cvs/readline/display.c Mon Apr 26 21:30:26 1999
- --- ./readline/display.c Sat May 22 18:51:58 1999
*************** _rl_move_vert (to)
*** 1107,1112 ****
- --- 1107,1113 ----
{
int row, col;
+ fflush (rl_outstream); /* make sure the cursor pos is current! */
ScreenGetCursor (&row, &col);
ScreenSetCursor ((row + to - _rl_last_v_pos), col);
}
*************** void
*** 1333,1339 ****
_rl_clear_to_eol (count)
int count;
{
! #if !defined (__GO32__)
if (term_clreol)
tputs (term_clreol, 1, _rl_output_character_function);
else if (count)
- --- 1334,1340 ----
_rl_clear_to_eol (count)
int count;
{
! #ifndef __GO32__
if (term_clreol)
tputs (term_clreol, 1, _rl_output_character_function);
else if (count)
*************** space_to_eol (count)
*** 1358,1369 ****
void
_rl_clear_screen ()
{
! #if !defined (__GO32__)
if (term_clrpag)
tputs (term_clrpag, 1, _rl_output_character_function);
else
- - #endif /* !__GO32__ */
crlf ();
}
/* Insert COUNT characters from STRING to the output stream. */
- --- 1359,1373 ----
void
_rl_clear_screen ()
{
! #if defined (__GO32__)
! ScreenClear (); /* FIXME: only works in text modes */
! ScreenSetCursor (0, 0); /* term_clrpag is "cl" which homes the cursor */
! #else /* !__GO32__ */
if (term_clrpag)
tputs (term_clrpag, 1, _rl_output_character_function);
else
crlf ();
+ #endif /* !__GO32__ */
}
/* Insert COUNT characters from STRING to the output stream. */
*************** insert_some_chars (string, count)
*** 1372,1391 ****
char *string;
int count;
{
! #if defined (__GO32__)
! int row, col, width;
! char *row_start;
!
! ScreenGetCursor (&row, &col);
! width = ScreenCols ();
! row_start = ScreenPrimary + (row * width);
!
! memcpy (row_start + col + count, row_start + col, width - col - count);
!
! /* Place the text on the screen. */
! _rl_output_some_chars (string, count);
! #else /* !_GO32 */
!
/* If IC is defined, then we do not have to "enter" insert mode. */
if (term_IC)
{
- --- 1376,1382 ----
char *string;
int count;
{
! #ifndef __GO32__
/* If IC is defined, then we do not have to "enter" insert mode. */
if (term_IC)
{
*************** static void
*** 1426,1443 ****
delete_chars (count)
int count;
{
! #if defined (__GO32__)
! int row, col, width;
! char *row_start;
!
! ScreenGetCursor (&row, &col);
! width = ScreenCols ();
! row_start = ScreenPrimary + (row * width);
!
! memcpy (row_start + col, row_start + col + count, width - col - count);
! memset (row_start + width - count, 0, count * 2);
! #else /* !_GO32 */
!
if (count > screenwidth) /* XXX */
return;
- --- 1417,1423 ----
delete_chars (count)
int count;
{
! #ifndef __GO32__
if (count > screenwidth) /* XXX */
return;
------- End of forwarded message -------
From dj@delorie.com Sun Jun 27 10:50:00 1999
From: DJ Delorie <dj@delorie.com>
To: gdb-patches@sourceware.cygnus.com
Subject: [eliz@is.elta.co.il: GDB: fine print in 387 info]
Date: Sun, 27 Jun 1999 10:50:00 -0000
Message-id: <199906271749.NAA32056@envy.delorie.com>
X-SW-Source: 1999-q2/msg00168.html
Content-length: 2154
------- Start of forwarded message -------
Date: Sun, 27 Jun 1999 19:19:16 +0300 (IDT)
From: Eli Zaretskii <eliz@is.elta.co.il>
X-Sender: eliz@is
To: DJ Delorie <dj@delorie.com>
cc: Robert Hoehne <robert.hoehne@gmx.net>
Subject: GDB: fine print in 387 info
Content-Type: TEXT/PLAIN; charset=US-ASCII
1999-06-26 Eli Zaretskii <eliz@is.elta.co.il>
* i387-tdep.c (print_387_status_word): Don't print colons or
semi-colons if there's no data to follow/preceed them.
*** cvs/gdb/i387-tdep.c Fri Apr 16 04:34:02 1999
- --- ./gdb/i387-tdep.c Wed Jun 16 22:20:34 1999
*************** void
*** 88,97 ****
print_387_status_word (status)
unsigned int status;
{
! printf_unfiltered ("status %s: ", local_hex_string (status));
if (status & 0xff)
{
! printf_unfiltered ("exceptions:");
if (status & 0x0001) printf_unfiltered (" INVALID");
if (status & 0x0002) printf_unfiltered (" DENORM");
if (status & 0x0004) printf_unfiltered (" DIVZ");
- --- 88,97 ----
print_387_status_word (status)
unsigned int status;
{
! printf_unfiltered ("status %s", local_hex_string (status));
if (status & 0xff)
{
! printf_unfiltered (": exceptions:");
if (status & 0x0001) printf_unfiltered (" INVALID");
if (status & 0x0002) printf_unfiltered (" DENORM");
if (status & 0x0004) printf_unfiltered (" DIVZ");
*************** print_387_status_word (status)
*** 99,106 ****
if (status & 0x0010) printf_unfiltered (" UNDERF");
if (status & 0x0020) printf_unfiltered (" LOS");
if (status & 0x0040) printf_unfiltered (" FPSTACK");
- - printf_unfiltered ("; ");
}
printf_unfiltered ("flags: %d%d%d%d; ",
(status & 0x4000) != 0,
(status & 0x0400) != 0,
- --- 99,106 ----
if (status & 0x0010) printf_unfiltered (" UNDERF");
if (status & 0x0020) printf_unfiltered (" LOS");
if (status & 0x0040) printf_unfiltered (" FPSTACK");
}
+ printf_unfiltered ("; ");
printf_unfiltered ("flags: %d%d%d%d; ",
(status & 0x4000) != 0,
(status & 0x0400) != 0,
------- End of forwarded message -------
From jimb@cygnus.com Mon Jun 28 13:05:00 1999
From: Jim Blandy <jimb@cygnus.com>
To: Stan Shebs <shebs@cygnus.com>
Cc: gdb-patches@sourceware.cygnus.com
Subject: GDB produces unnecessary warnings
Date: Mon, 28 Jun 1999 13:05:00 -0000
Message-id: <199906282004.PAA02132@zwingli.cygnus.com>
X-SW-Source: 1999-q2/msg00169.html
Content-length: 2203
I'm not sure how worthwhile this is, since the code that produced the
warnings is now gone from GDB, with David Taylor's change of Mar 31.
But if you think it's interesting, I'll commit it.
1999-06-28 Jim Blandy <jimb@zwingli.cygnus.com>
* gdb.c++/derivation.exp ("print g_instance.a", "print
g_instance.b", "print g_instance.c"): Fail if the debugger
produces a warning. The compiler thinks these expressions are
fine, so GDB should too.
Index: derivation.exp
===================================================================
RCS file: /cvs/cvsfiles/devo/gdb/testsuite/gdb.c++/derivation.exp,v
retrieving revision 1.3
diff -c -r1.3 derivation.exp
*** derivation.exp 1999/04/02 02:22:42 1.3
--- derivation.exp 1999/06/28 20:00:52
***************
*** 1,4 ****
! # Copyright (C) 1998 Free Software Foundation, Inc.
# 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
--- 1,4 ----
! # Copyright (C) 1998, 1999 Free Software Foundation, Inc.
# 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
***************
*** 265,270 ****
--- 265,274 ----
send_gdb "print g_instance.a\n"
gdb_expect {
+ -re "warning.*$gdb_prompt $" {
+ # The compiler doesn't think this is ambiguous.
+ fail "print value of g_instance.a"
+ }
-re ".\[0-9\]* = 15.*$gdb_prompt $" {
pass "print value of g_instance.a"
}
***************
*** 274,279 ****
--- 278,287 ----
send_gdb "print g_instance.b\n"
gdb_expect {
+ -re "warning.*$gdb_prompt $" {
+ # The compiler doesn't think this is ambiguous.
+ fail "print value of g_instance.b"
+ }
-re ".\[0-9\]* = 16.*$gdb_prompt $" {
pass "print value of g_instance.b"
}
***************
*** 283,288 ****
--- 291,300 ----
send_gdb "print g_instance.c\n"
gdb_expect {
+ -re "warning.*$gdb_prompt $" {
+ # The compiler doesn't think this is ambiguous.
+ fail "print value of g_instance.c"
+ }
-re ".\[0-9\]* = 17.*$gdb_prompt $" {
pass "print value of g_instance.c"
}
From jimb@cygnus.com Mon Jun 28 13:12:00 1999
From: Jim Blandy <jimb@cygnus.com>
To: David Taylor <taylor@cygnus.com>
Cc: gdb-patches@sourceware.cygnus.com
Subject: RFA: printing true characters when lang is C
Date: Mon, 28 Jun 1999 13:12:00 -0000
Message-id: <199906282011.PAA02140@zwingli.cygnus.com>
X-SW-Source: 1999-q2/msg00170.html
Content-length: 1535
unpack_long returns a long long; the code passed it to printf, with a
%u or %d format specifier. We shouldn't use %llu / %lld, since those
aren't portable.
Note that this doesn't affect the C character type --- it only affects
true character types, like Java's. And, with the patch I committed
a few days ago, like the type used by 'print/c'.
(Thanks for catching this, Stan.)
1999-06-18 Jim Blandy <jimb@zwingli.cygnus.com>
* c-valprint.c (c_val_print): Cast a character's numeric value
from long long to int before trying to print it with %u or %d. I
don't think we'll find a language with characters wider than a
long.
Index: c-valprint.c
===================================================================
RCS file: /cvs/cvsfiles/devo/gdb/c-valprint.c,v
retrieving revision 2.41
diff -c -c -b -F'^(' -r2.41 c-valprint.c
*** c-valprint.c 1999/01/05 17:08:19 2.41
--- c-valprint.c 1999/06/18 07:08:10
***************
*** 402,409 ****
}
else
{
! fprintf_filtered (stream, TYPE_UNSIGNED (type) ? "%u" : "%d",
! unpack_long (type, valaddr + embedded_offset));
fputs_filtered (" ", stream);
LA_PRINT_CHAR ((unsigned char) unpack_long (type, valaddr + embedded_offset), stream);
}
--- 402,409 ----
}
else
{
! fprintf_filtered (stream, TYPE_UNSIGNED (type) ? "%lu" : "%ld",
! (long) unpack_long (type, valaddr + embedded_offset));
fputs_filtered (" ", stream);
LA_PRINT_CHAR ((unsigned char) unpack_long (type, valaddr + embedded_offset), stream);
}
From jimb@cygnus.com Mon Jun 28 13:43:00 1999
From: Jim Blandy <jimb@cygnus.com>
To: DJ Delorie <dj@delorie.com>
Cc: gdb-patches@sourceware.cygnus.com, Eli Zaretskii <eliz@is.elta.co.il>
Subject: Re: [eliz@is.elta.co.il: GDB: fine print in 387 info]
Date: Mon, 28 Jun 1999 13:43:00 -0000
Message-id: <np3dzcxdju.fsf@zwingli.cygnus.com>
References: <199906271749.NAA32056@envy.delorie.com>
X-SW-Source: 1999-q2/msg00171.html
Content-length: 303
> 1999-06-26 Eli Zaretskii <eliz@is.elta.co.il>
>
> * i387-tdep.c (print_387_status_word): Don't print colons or
> semi-colons if there's no data to follow/preceed them.
I'm about to merge a patch from Bill Metzenthen which changes this
code a lot. So I don't think this patch should be applied.
From ac131313@cygnus.com Mon Jun 28 19:15:00 1999
From: Andrew Cagney <ac131313@cygnus.com>
To: gdb-patches@sourceware.cygnus.com
Subject: gdb/testsuite/gdb.base/lib/gdb.exp:gdb_expect_list() consistent pass/fail
Date: Mon, 28 Jun 1999 19:15:00 -0000
Message-id: <37782C24.B53DDBAF@cygnus.com>
X-SW-Source: 1999-q2/msg00172.html
Content-length: 2733
FYI,
I've just checked in the attached patch. It modifies the procedure
gdb_expect_list() so that it outputs a constant number of tests (pass or
fail) using a consistent format. This should make it easier to compare
before/after results. Thanks to Fernando Nasser for reporting this
problem.
Andrew
Tue Jun 29 11:56:06 1999 Andrew Cagney <cagney@b1.cygnus.com>
* lib/gdb.exp (gdb_expect_list): Output one message per pattern in
a consistent format.
Index: lib/gdb.exp
===================================================================
RCS file: /cvs/cvsfiles/devo/gdb/testsuite/lib/gdb.exp,v
retrieving revision 1.144
diff -p -r1.144 gdb.exp
*** gdb.exp 1999/06/25 23:39:42 1.144
--- gdb.exp 1999/06/29 02:07:10
*************** proc gdb_expect { args } {
*** 1105,1141 ****
proc gdb_expect_list {test sentinal list} {
global gdb_prompt
set index 0
! while { ${index} >= 0 && ${index} < [llength ${list}] } {
set pattern [lindex ${list} ${index}]
set index [expr ${index} + 1]
if { ${index} == [llength ${list}] } {
! gdb_expect {
! -re "${pattern}${sentinal}" {
! pass "${test} (sentinal)"
}
! timeout {
! fail "(timeout on sentinal) ${test}"
! set index -1
! }
}
} else {
! gdb_expect {
! -re "${pattern}" {
! pass "${test} (line ${index})"
! }
! -re "${sentinal}" {
! fail "${test} (line ${index})"
! set index -1
! }
! timeout {
! fail "(timeout on line ${index}) ${test}"
! set index -1
}
}
}
- }
- if { ${index} >= 0 } {
- pass "${test}"
}
}
--- 1105,1147 ----
proc gdb_expect_list {test sentinal list} {
global gdb_prompt
set index 0
! set ok 1
! while { ${index} < [llength ${list}] } {
set pattern [lindex ${list} ${index}]
set index [expr ${index} + 1]
if { ${index} == [llength ${list}] } {
! if { ${ok} } {
! gdb_expect {
! -re "${pattern}${sentinal}" {
! pass "${test}, pattern ${index} + sentinal"
! }
! timeout {
! fail "${test}, pattern ${index} + sentinal (timeout)"
! set ok 0
! }
}
! } else {
! fail "${test}, pattern ${index} + sentinal"
}
} else {
! if { ${ok} } {
! gdb_expect {
! -re "${pattern}" {
! pass "${test}, pattern ${index}"
! }
! -re "${sentinal}" {
! fail "${test}, pattern ${index}"
! set ok 0
! }
! timeout {
! fail "${test}, pattern ${index} (timeout)"
! set ok 0
! }
}
+ } else {
+ fail "${test}, pattern ${index}"
}
}
}
}
prev parent reply other threads:[~1999-06-25 12:20 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
1999-06-25 11:07 Jimmy Guo
1999-06-25 12:20 ` Stan Shebs [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=199906251920.MAA26844@andros.cygnus.com \
--to=shebs@cygnus.com \
--cc=gdb-patches@sourceware.cygnus.com \
--cc=guo@cup.hp.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox