* Linux i387 fix
@ 1999-12-13 14:57 Mark Kettenis
0 siblings, 0 replies; only message in thread
From: Mark Kettenis @ 1999-12-13 14:57 UTC (permalink / raw)
To: jimb; +Cc: gdb, gdb-patches
Hi Jim,
The current i386-linux.c:supply_fpregset() passes whatever is in the
reserved bits on to the GDB register file. Since the coporocessor
seems to be initialized in a state where these reserved bits are
turned on (at least in non-fpu using threads, see
linux/arch/i386/kernel/ptrace.c) this means that `info float' and
`info all-registers' will print some funny numbers. At the end of
this message you'll find a patch that fixes this.
I don't know if supply_xfpregs needs to be fixed too. Depends on the
Cygnus-specific Linux kernel patch I guess.
Maybe we should make some changes to convert_to_fpregset() too, such
that it doesn't change the reserved bits in *FPREGSETP. Right now it
overwrites those with the padding that's present in the GDB register
file.
Mark
1999-12-13 Mark Kettenis <kettenis@gnu.org>
* i386-linux-nat.c (supply_fpregset): Mask off the reserved bits
in *FPREGSETP before storing the values in the GDB register file.
Index: gdb/i386-linux-nat.c
===================================================================
RCS file: /var/cvsroot/gdb/gdb/i386-linux-nat.c,v
retrieving revision 1.1.1.4
diff -u -r1.1.1.4 i386-linux-nat.c
--- gdb/i386-linux-nat.c 1999/12/13 21:10:21 1.1.1.4
+++ gdb/i386-linux-nat.c 1999/12/13 22:44:20
@@ -195,29 +195,36 @@
void
supply_fpregset (fpregset_t *fpregsetp)
{
+ long l;
int i;
/* Supply the floating-point registers. */
for (i = 0; i < 8; i++)
supply_register (FP0_REGNUM + i, FPREGSET_T_FPREG_ADDR (fpregsetp, i));
- supply_register (FCTRL_REGNUM, (char *) &fpregsetp->cwd);
- supply_register (FSTAT_REGNUM, (char *) &fpregsetp->swd);
- supply_register (FTAG_REGNUM, (char *) &fpregsetp->twd);
+ /* We have to mask off the reserved bits in *FPREGSETP before
+ storing the values in the GDB register file, since the reserved
+ parts of the structure typically are initialized with all bits
+ turned on. */
+#define supply(REGNO, MEMBER) \
+ l = fpregsetp->MEMBER & 0xffff; \
+ supply_register (REGNO, (char *) &l)
+
+ supply (FCTRL_REGNUM, cwd);
+ supply (FSTAT_REGNUM, swd);
+ supply (FTAG_REGNUM, twd);
supply_register (FCOFF_REGNUM, (char *) &fpregsetp->fip);
- supply_register (FDS_REGNUM, (char *) &fpregsetp->fos);
+ supply (FDS_REGNUM, fos);
supply_register (FDOFF_REGNUM, (char *) &fpregsetp->foo);
-
- /* Extract the code segment and opcode from the "fcs" member. */
- {
- long l;
- l = fpregsetp->fcs & 0xffff;
- supply_register (FCS_REGNUM, (char *) &l);
+#undef supply
+
+ /* Extract the code segment and opcode from the "fcs" member. */
+ l = fpregsetp->fcs & 0xffff;
+ supply_register (FCS_REGNUM, (char *) &l);
- l = (fpregsetp->fcs >> 16) & ((1 << 11) - 1);
- supply_register (FOP_REGNUM, (char *) &l);
- }
+ l = (fpregsetp->fcs >> 16) & ((1 << 11) - 1);
+ supply_register (FOP_REGNUM, (char *) &l);
}
From ac131313@cygnus.com Mon Dec 13 22:49:00 1999
From: Andrew Cagney <ac131313@cygnus.com>
To: Stan Shebs <shebs@cygnus.com>
Cc: gdb-patches@sourceware.cygnus.com
Subject: Re: gdb.h, libgdb.h, gdblib.h, gdb-lib.h, ...?
Date: Mon, 13 Dec 1999 22:49:00 -0000
Message-id: <3855E84A.FB73EFA6@cygnus.com>
References: <199912132229.OAA16265@andros.cygnus.com>
X-SW-Source: 1999-q4/msg00376.html
Content-length: 2370
Stan Shebs wrote:
>
> Date: Mon, 13 Dec 1999 11:35:31 +1100
> From: Andrew Cagney <ac131313@cygnus.com>
>
> So, ok I've been ignoring this one.
>
> We're going to try to create a library. Some bits, like ``struct
> gdb_file'' can easily live in ``gdb-file.h'' where they can be (fairly
> safely) included by non-core GDB code.
>
> But what of the main GDB functions? Eg:
>
> XXX {lib,}gdb{,lib}_breakpoint_query (..., b, ...);
>
> For the moment, based on a detailed probabilistic analysis (coin toss)
> I'll assume ``gdb.h''. If anyone can think of a compelling case for
> some other name, please speak now :-)
>
> I'd vote for libgdb.h, since a) it's the term we've been using for the
> past seven years, and b) it's useful to emphasize that this is a
> library interface, not something that is purely internal to GDB. For
> instance, if you look at X11, X clients normally include Xlib.h.
> Xlib.h then includes X.h, which is the lower-level stuff that's (at
> least partly) common to both clients and servers.
>
> I'd also like us just to have a single .h file that includes
> everything that a libgdb client would need. It's going to be very
> hard for someone to use just part of libgdb, because of all the
> internal interconnections. If GDB ever gets decoupled internally,
> and anybody cares, they can split libgdb.h too - until then we'd
> just be deceiving ourselves.
While initially there will be only one file ``libgdb.h'' I think we
still need to make it our clear objective that the interface presented
be clearly decoupled from the internals and, consequently modularized.
Even if the internal spaghetti is never eliminated that tangle should
not be reflected in the interface :-).
BTW, off the top of my head, I can already see the separate components:
libgdb.h:
basic types for gdb including *$(*@ CORE_ADDR
bit like defs.h was like before it lost the plot :-)
libgdb-varobj.h:
A cleanup/rewrite of GDBtk's variable object code.
Only code wanting to manage variable objects would
need to pull that in.
libgdb-eventloop.h:
GDB's event-loop requirements/interface. Only the
clients ``xxx-top.c'' would need to worry about
that.
Any way, next question. In a futile attempt to avoid name space
pollution, are all external names prefixed with ``gdb_'' or ``libgdb_''?
Andrew
From ac131313@cygnus.com Tue Dec 14 00:38:00 1999
From: Andrew Cagney <ac131313@cygnus.com>
To: GDB Patches <gdb-patches@sourceware.cygnus.com>
Subject: [breakpoint.c] Does ``break overloaded if x'' leak memory?
Date: Tue, 14 Dec 1999 00:38:00 -0000
Message-id: <385601E8.FB7BDE66@cygnus.com>
X-SW-Source: 1999-q4/msg00377.html
Content-length: 5418
Hello,
Now that I understand how breapoint.c:break_command_1() can end up with
several breakpoints :-) I'm wondering if the code that parses the ``if''
condition leaks memory:
/* Resolve all line numbers to PC's, and verify that conditions
can be parsed, before setting any breakpoints. */
for (i = 0; i < sals.nelts; i++)
{
char *tok, *end_tok;
int toklen;
resolve_sal_pc (&sals.sals[i]);
[...]
tok = arg;
while (tok && *tok)
{
while (*tok == ' ' || *tok == '\t')
tok++;
end_tok = tok;
while (*end_tok != ' ' && *end_tok != '\t' && *end_tok != '\000')
end_tok++;
toklen = end_tok - tok;
if (toklen >= 1 && strncmp (tok, "if", toklen) == 0)
{
tok = cond_start = end_tok + 1;
cond = parse_exp_1 (&tok, block_for_pc (sals.sals[i].pc), 0);
cond_end = tok;
}
[...]
As far as I can tell the if statement is re-parsed each time round this
loop but, unfortunatly, each time, the old result is thrown away :-(.
At the end the code ends up with just one expression and that is stored
in all the created breakpoints.
Andrew
PS: Why? I'm looking to split break_command_1() into the part that
creates the breakpoint and the part that does the parsing.
PPS: I strongly suspect this is correct :-)
(gdb) break foo::overload1arg if 1
[0] cancel
[1] all
[2] foo::overload1arg(double) at
/home/scratch/wip-gdb-breakpoint-B-devo/devo/gdb/testsuite/gdb.c++/ovldbreak.cc:121
[3] foo::overload1arg(float) at
/home/scratch/wip-gdb-breakpoint-B-devo/devo/gdb/testsuite/gdb.c++/ovldbreak.cc:120
[4] foo::overload1arg(unsigned long) at
/home/scratch/wip-gdb-breakpoint-B-devo/devo/gdb/testsuite/gdb.c++/ovldbreak.cc:119
[5] foo::overload1arg(long) at
/home/scratch/wip-gdb-breakpoint-B-devo/devo/gdb/testsuite/gdb.c++/ovldbreak.cc:118
[6] foo::overload1arg(unsigned int) at
/home/scratch/wip-gdb-breakpoint-B-devo/devo/gdb/testsuite/gdb.c++/ovldbreak.cc:117
[7] foo::overload1arg(int) at
/home/scratch/wip-gdb-breakpoint-B-devo/devo/gdb/testsuite/gdb.c++/ovldbreak.cc:116
[8] foo::overload1arg(unsigned short) at
/home/scratch/wip-gdb-breakpoint-B-devo/devo/gdb/testsuite/gdb.c++/ovldbreak.cc:115
[9] foo::overload1arg(short) at
/home/scratch/wip-gdb-breakpoint-B-devo/devo/gdb/testsuite/gdb.c++/ovldbreak.cc:114
[10] foo::overload1arg(unsigned char) at
/home/scratch/wip-gdb-breakpoint-B-devo/devo/gdb/testsuite/gdb.c++/ovldbreak.cc:113
[11] foo::overload1arg(signed char) at
/home/scratch/wip-gdb-breakpoint-B-devo/devo/gdb/testsuite/gdb.c++/ovldbreak.cc:112
[12] foo::overload1arg(char) at
/home/scratch/wip-gdb-breakpoint-B-devo/devo/gdb/testsuite/gdb.c++/ovldbreak.cc:111
[13] foo::overload1arg(void) at
/home/scratch/wip-gdb-breakpoint-B-devo/devo/gdb/testsuite/gdb.c++/ovldbreak.cc:110
> 1
Note: breakpoint 14 also set at pc 0x4d6.
Breakpoint 26 at 0x4d6: file
/home/scratch/wip-gdb-breakpoint-B-devo/devo/gdb/testsuite/gdb.c++/ovldbreak.cc,
line 121.
Note: breakpoint 15 also set at pc 0x4c1.
Breakpoint 27 at 0x4c1: file
/home/scratch/wip-gdb-breakpoint-B-devo/devo/gdb/testsuite/gdb.c++/ovldbreak.cc,
line 120.
Note: breakpoint 16 also set at pc 0x4ac.
Breakpoint 28 at 0x4ac: file
/home/scratch/wip-gdb-breakpoint-B-devo/devo/gdb/testsuite/gdb.c++/ovldbreak.cc,
line 119.
Note: breakpoint 17 also set at pc 0x497.
Breakpoint 29 at 0x497: file
/home/scratch/wip-gdb-breakpoint-B-devo/devo/gdb/testsuite/gdb.c++/ovldbreak.cc,
line 118.
Note: breakpoint 18 also set at pc 0x482.
Breakpoint 30 at 0x482: file
/home/scratch/wip-gdb-breakpoint-B-devo/devo/gdb/testsuite/gdb.c++/ovldbreak.cc,
line 117.
Note: breakpoint 19 also set at pc 0x46d.
Breakpoint 31 at 0x46d: file
/home/scratch/wip-gdb-breakpoint-B-devo/devo/gdb/testsuite/gdb.c++/ovldbreak.cc,
line 116.
Note: breakpoint 20 also set at pc 0x458.
Breakpoint 32 at 0x458: file
/home/scratch/wip-gdb-breakpoint-B-devo/devo/gdb/testsuite/gdb.c++/ovldbreak.cc,
line 115.
Note: breakpoint 21 also set at pc 0x43f.
Breakpoint 33 at 0x43f: file
/home/scratch/wip-gdb-breakpoint-B-devo/devo/gdb/testsuite/gdb.c++/ovldbreak.cc,
line 114.
Note: breakpoint 22 also set at pc 0x426.
Breakpoint 34 at 0x426: file
/home/scratch/wip-gdb-breakpoint-B-devo/devo/gdb/testsuite/gdb.c++/ovldbreak.cc,
line 113.
Note: breakpoint 23 also set at pc 0x40d.
Breakpoint 35 at 0x40d: file
/home/scratch/wip-gdb-breakpoint-B-devo/devo/gdb/testsuite/gdb.c++/ovldbreak.cc,
line 112.
Note: breakpoint 24 also set at pc 0x3f4.
Breakpoint 36 at 0x3f4: file
/home/scratch/wip-gdb-breakpoint-B-devo/devo/gdb/testsuite/gdb.c++/ovldbreak.cc,
line 111.
Note: breakpoint 25 also set at pc 0x3df.
Breakpoint 37 at 0x3df: file
/home/scratch/wip-gdb-breakpoint-B-devo/devo/gdb/testsuite/gdb.c++/ovldbreak.cc,
line 110.
warning: Multiple breakpoints were set.
warning: Use the "delete" command to delete unwanted breakpoints.
(gdb) delete
Delete all breakpoints? (y or n) y
gdb in free(): warning: chunk is already free.
gdb in free(): warning: chunk is already free.
gdb in free(): warning: chunk is already free.
gdb in free(): warning: chunk is already free.
gdb in free(): warning: chunk is already free.
gdb in free(): warning: chunk is already free.
gdb in free(): warning: chunk is already free.
gdb in free(): warning: chunk is already free.
gdb in free(): warning: chunk is already free.
gdb in free(): warning: chunk is already free.
gdb in free(): warning: chunk is already free.
(gdb)
From ac131313@cygnus.com Tue Dec 14 05:04:00 1999
From: Andrew Cagney <ac131313@cygnus.com>
To: GDB Patches <gdb-patches@sourceware.cygnus.com>
Subject: Re: [breakpoint.c] Does ``break overloaded if x'' leak memory?
Date: Tue, 14 Dec 1999 05:04:00 -0000
Message-id: <3856403B.4F8CE484@cygnus.com>
References: <385601E8.FB7BDE66@cygnus.com>
X-SW-Source: 1999-q4/msg00378.html
Content-length: 9023
Andrew Cagney wrote:
>
> Hello,
>
> Now that I understand how breapoint.c:break_command_1() can end up with
> several breakpoints :-) I'm wondering if the code that parses the ``if''
> condition leaks memory:
>
> [....]
>
> As far as I can tell the if statement is re-parsed each time round this
> loop but, unfortunatly, each time, the old result is thrown away :-(.
> At the end the code ends up with just one expression and that is stored
> in all the created breakpoints.
>
> Andrew
>
I've attatched a patch that fixes this problem. It goes through and
ensures that each breakpoint has an individual copy of everything (and
simplifying things a tiny bit I think :-).
Andrew
Tue Dec 14 23:47:15 1999 Andrew Cagney <cagney@b1.cygnus.com>
* breakpoint.c (break_command_1): Pre-allocate each breakpoints
addr_string. Allocate a separate cond and cond_string for each
breakpoint.
Index: breakpoint.c
===================================================================
RCS file: /cvs/cvsfiles/devo/gdb/breakpoint.c,v
retrieving revision 1.278
diff -p -r1.278 breakpoint.c
*** breakpoint.c 1999/12/13 21:27:12 1.278
--- breakpoint.c 1999/12/14 12:58:43
*************** break_command_1 (arg, flag, from_tty)
*** 4729,4749 ****
int tempflag, hardwareflag;
struct symtabs_and_lines sals;
struct symtab_and_line sal;
! register struct expression *cond = 0;
register struct breakpoint *b;
!
! /* Pointers in arg to the start, and one past the end, of the condition. */
char *cond_start = NULL;
char *cond_end = NULL;
! /* Pointers in arg to the start, and one past the end,
! of the address part. */
char *addr_start = NULL;
char *addr_end = NULL;
struct cleanup *old_chain;
! struct cleanup *canonical_strings_chain = NULL;
! char **canonical = (char **) NULL;
int i;
! int thread;
hardwareflag = flag & BP_HARDWAREFLAG;
tempflag = flag & BP_TEMPFLAG;
--- 4748,4770 ----
int tempflag, hardwareflag;
struct symtabs_and_lines sals;
struct symtab_and_line sal;
! register struct expression **cond = 0;
register struct breakpoint *b;
! /* Pointers in arg to the start, and one past the end, of the
! condition. */
char *cond_start = NULL;
char *cond_end = NULL;
! char **cond_string = (char **) NULL;
! /* Pointers in arg to the start, and one past the end, of the
! address part. */
char *addr_start = NULL;
char *addr_end = NULL;
+ char **addr_string = (char **) NULL;
struct cleanup *old_chain;
! struct cleanup *breakpoint_chain = NULL;
int i;
! int thread = -1;
! int ignore_count = 0;
hardwareflag = flag & BP_HARDWAREFLAG;
tempflag = flag & BP_TEMPFLAG;
*************** break_command_1 (arg, flag, from_tty)
*** 4753,4759 ****
INIT_SAL (&sal); /* initialize to zeroes */
! /* If no arg given, or if first arg is 'if ', use the default breakpoint. */
if (!arg || (arg[0] == 'i' && arg[1] == 'f'
&& (arg[2] == ' ' || arg[2] == '\t')))
--- 4774,4781 ----
INIT_SAL (&sal); /* initialize to zeroes */
! /* If no arg given, or if first arg is 'if ', use the default
! breakpoint. */
if (!arg || (arg[0] == 'i' && arg[1] == 'f'
&& (arg[2] == ' ' || arg[2] == '\t')))
*************** break_command_1 (arg, flag, from_tty)
*** 4784,4792 ****
&& (!current_source_symtab
|| (arg && (*arg == '+' || *arg == '-'))))
sals = decode_line_1 (&arg, 1, default_breakpoint_symtab,
! default_breakpoint_line, &canonical);
else
! sals = decode_line_1 (&arg, 1, (struct symtab *) NULL, 0, &canonical);
addr_end = arg;
}
--- 4806,4814 ----
&& (!current_source_symtab
|| (arg && (*arg == '+' || *arg == '-'))))
sals = decode_line_1 (&arg, 1, default_breakpoint_symtab,
! default_breakpoint_line, &addr_string);
else
! sals = decode_line_1 (&arg, 1, (struct symtab *) NULL, 0, &addr_string);
addr_end = arg;
}
*************** break_command_1 (arg, flag, from_tty)
*** 4794,4811 ****
if (!sals.nelts)
return;
! /* Make sure that all storage allocated in decode_line_1 gets freed
! in case the following `for' loop errors out. */
! old_chain = make_cleanup (free, sals.sals);
! if (canonical != (char **) NULL)
! {
! make_cleanup (free, canonical);
! canonical_strings_chain = make_cleanup (null_cleanup, 0);
! for (i = 0; i < sals.nelts; i++)
! {
! if (canonical[i] != NULL)
! make_cleanup (free, canonical[i]);
! }
}
thread = -1; /* No specific thread yet */
--- 4816,4856 ----
if (!sals.nelts)
return;
! /* Create a chain of things at always need to be cleaned up. */
! old_chain = make_cleanup (null_cleanup, 0);
!
! /* Make sure that all storage allocated to SALS gets freed. */
! make_cleanup (free, sals.sals);
!
! /* Allocate space for all the cond expressions. */
! cond = xcalloc (sals.nelts, sizeof (struct expression *));
! make_cleanup (free, cond);
!
! /* Allocate space for all the cond strings. */
! cond_string = xcalloc (sals.nelts, sizeof (char **));
! make_cleanup (free, cond_string);
!
! /* Always have a addr_string array, even if it is empty. */
! if (addr_string == NULL)
! addr_string = xcalloc (sals.nelts, sizeof (char **));
! make_cleanup (free, addr_string);
!
! /* ----------------------------- SNIP -----------------------------
! Anything added to the cleanup chain beyond this point is assumed
! to be part of a breakpoint. If the breakpoint create goes
! through then that memory is not cleaned up. */
! breakpoint_chain = make_cleanup (null_cleanup, 0);
!
! /* Go through the addr_string SAL's and fill in the gaps with the
! addr_start/end string found above. */
! for (i = 0; i < sals.nelts; i++)
! {
! /* Add the string if not present. */
! if (addr_string[i] == NULL && addr_start != NULL)
! addr_string[i] = savestring (addr_start, addr_end - addr_start);
! /* Mark this as recoverable. */
! if (addr_string[i] != NULL)
! make_cleanup (free, addr_string[i]);
}
thread = -1; /* No specific thread yet */
*************** break_command_1 (arg, flag, from_tty)
*** 4855,4862 ****
if (toklen >= 1 && strncmp (tok, "if", toklen) == 0)
{
tok = cond_start = end_tok + 1;
! cond = parse_exp_1 (&tok, block_for_pc (sals.sals[i].pc), 0);
cond_end = tok;
}
else if (toklen >= 1 && strncmp (tok, "thread", toklen) == 0)
{
--- 4900,4910 ----
if (toklen >= 1 && strncmp (tok, "if", toklen) == 0)
{
tok = cond_start = end_tok + 1;
! cond[i] = parse_exp_1 (&tok, block_for_pc (sals.sals[i].pc), 0);
! make_cleanup (free, cond[i]);
cond_end = tok;
+ cond_string[i] = savestring (cond_start, cond_end - cond_start);
+ make_cleanup (free, cond_string[i]);
}
else if (toklen >= 1 && strncmp (tok, "thread", toklen) == 0)
{
*************** break_command_1 (arg, flag, from_tty)
*** 4888,4896 ****
error ("Hardware breakpoints used exceeds limit.");
}
! /* Remove the canonical strings from the cleanup, they are needed below. */
! if (canonical != (char **) NULL)
! discard_cleanups (canonical_strings_chain);
/* Now set all the breakpoints. */
for (i = 0; i < sals.nelts; i++)
--- 4936,4944 ----
error ("Hardware breakpoints used exceeds limit.");
}
! /* This is it: Discard all the cleanups for data inserted into the
! breakpoint. */
! discard_cleanups (breakpoint_chain);
/* Now set all the breakpoints. */
for (i = 0; i < sals.nelts; i++)
*************** break_command_1 (arg, flag, from_tty)
*** 4904,4921 ****
set_breakpoint_count (breakpoint_count + 1);
b->number = breakpoint_count;
b->type = hardwareflag ? bp_hardware_breakpoint : bp_breakpoint;
! b->cond = cond;
b->thread = thread;
!
! /* If a canonical line spec is needed use that instead of the
! command string. */
! if (canonical != (char **) NULL && canonical[i] != NULL)
! b->addr_string = canonical[i];
! else if (addr_start)
! b->addr_string = savestring (addr_start, addr_end - addr_start);
! if (cond_start)
! b->cond_string = savestring (cond_start, cond_end - cond_start);
!
b->enable = enabled;
b->disposition = tempflag ? del : donttouch;
mention (b);
--- 4952,4962 ----
set_breakpoint_count (breakpoint_count + 1);
b->number = breakpoint_count;
b->type = hardwareflag ? bp_hardware_breakpoint : bp_breakpoint;
! b->cond = cond[i];
b->thread = thread;
! b->addr_string = addr_string[i];
! b->cond_string = cond_string[i];
! b->ignore_count = ignore_count;
b->enable = enabled;
b->disposition = tempflag ? del : donttouch;
mention (b);
From msnyder@cygnus.com Tue Dec 14 13:07:00 1999
From: Michael Snyder <msnyder@cygnus.com>
To: gdb-patches@sourceware.cygnus.com
Cc: cagney@cygnus.com
Subject: moving target_pid_to_str into the target vector.
Date: Tue, 14 Dec 1999 13:07:00 -0000
Message-id: <3856B173.3740@cygnus.com>
X-SW-Source: 1999-q4/msg00379.html
Content-length: 570
This is a heads-up: I plan to change the macro "target_pid_to_str"
into a target vector method, allowing the same sort of inheritance
and overriding as the other target vector methods. This will be
of especial use to architectures that may have more than one
possible representation of threads (such as solaris, maybe hpux).
Native target files that I will touch in making this change
include the following (if I've left any out, please let me know):
inftarg.c
gnu-nat.c
hppah-nat.c and infttrace.c
sol-thread.c
procfs.c
linux-thread.c
win32-nat.c
lynx-nat.c
From ac131313@cygnus.com Tue Dec 14 21:17:00 1999
From: Andrew Cagney <ac131313@cygnus.com>
To: GDB Patches <gdb-patches@sourceware.cygnus.com>
Subject: Is ``break main if(1)'' legal?
Date: Tue, 14 Dec 1999 21:17:00 -0000
Message-id: <38572456.8C003027@cygnus.com>
X-SW-Source: 1999-q4/msg00380.html
Content-length: 138
(vs ``break main if (1)'')
Some parts of the code (decode_line_1()) think it is legal but other
parts (break_command_1()) don't.
Andrew
From law@cygnus.com Wed Dec 15 00:59:00 1999
From: Jeffrey A Law <law@cygnus.com>
To: Andrew Cagney <ac131313@cygnus.com>
Cc: Jimmy Guo <guo@cup.hp.com>, gdb-patches@sourceware.cygnus.com
Subject: Re: (patch) hpjyg15: hppah-nat.c & related
Date: Wed, 15 Dec 1999 00:59:00 -0000
Message-id: <881.945247412@upchuck>
References: <382B585D.421E98F3@cygnus.com>
X-SW-Source: 1999-q4/msg00381.html
Content-length: 1119
In message < 382B585D.421E98F3@cygnus.com >you write:
> Jimmy Guo wrote:
> >
> > This patch updates hppah-nat.c and related files target.[ch] and
> > infrun.c. See ChangeLog below.
>
> Jim,
>
> Don't forget that the GDB's coding style is defined by the output of
> indent. Looking more closely I noticed that some of the changes are to
> ``fix'' the indentation. Please just grit your teath and ignore it.
>
> It's a good idea to carefully review the diffs and revert/remove any
> changes not specific to the problem at hand.
>
> Doing this makes the reviewers life so much easier.
Agreed.
What I would recommend is to send pure formatting changes to unrelated
code as a separate change. That makes it *much* easier for the review to
separate the formatting fixes from patches that require one to think about
the consequences of a change.
Additionally, raw formatting patches can go almost immediately since by
definition they do not change the behavior of GDB.
This is a special case of the general rule that independent changes should be
sent as independent patches.
jeff
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~1999-12-13 14:57 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1999-12-13 14:57 Linux i387 fix Mark Kettenis
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox