* Re: gdb doesn't work very well with dynamic linked binaries [not found] ` <200009050548.BAA05890@indy.delorie.com> @ 2000-09-04 23:32 ` H . J . Lu [not found] ` <200009051035.GAA06054@indy.delorie.com> 0 siblings, 1 reply; 5+ messages in thread From: H . J . Lu @ 2000-09-04 23:32 UTC (permalink / raw) To: Eli Zaretskii; +Cc: kettenis, gdb On Tue, Sep 05, 2000 at 01:48:56AM -0400, Eli Zaretskii wrote: > > > > Date: Mon, 4 Sep 2000 16:44:58 -0700 > > From: "H . J . Lu" <hjl@lucon.org> > > > > 1. Delete hardware watchpoints to free hardware debug registers. Set 4 > > hardware watchpoints. Then delete/disable one hardware watchpoint. Set > > another hardware watchpoint. Can gdb free a hardware debug register > > when I delete/disable the hardware watchpoint which uses it? > > 2. Watch for different values on a viariable with one hardware debug > > register. That is do > > > > (gdb) watch foobar == 1 > > (gdb) watch foobar == 2 > > (gdb) watch foobar == 3 > > (gdb) watch foobar == 4 > > (gdb) watch foobar == 5 > > > > only using one hardware debug register. > > > > I have reported them long before 5.0 was released. But at least #1 > > still doesn't work right in 5.0 under Linux/ia32. > > These are not GDB/ia32 issues per se: the above features are all > implemented in the DJGPP port of GDB and work in v5.0. Every > x86-based target should be able to lift the relevant parts of > go32-nat.c and use them almost verbatim. You get debug register > sharing through reference counts, and the ability to watch large > regions (up to 16 bytes) using multiple registers. (The required > infrastructure in high-level GDB application code, mostly in > breakpoint.c, is also working since v5.0.) > > What is missing is something that we discussed here some time ago: a > unified handling for debug registers common for ALL ia32 targets. If > you want to get this done before 5.1 is out, I'm for it. I said in > the past that I'm willing to volunteer to pull the code out of > go32-nat.c and generalize it as appropriate, as the first step towards > this goal. Provided that it's decided to do that for 5.1, of course > (otherwise, I have too many other important things to do ;-). > If you can generalize it for ia32, I will implement it for Linux/ia32. If it won't be fixed in 5.1, I will follow your hints and implement a Linux only solution when it happens to me again. It is just one of those things which makes me to roll my own stuff. Hardware watchpoints have been known to be broken on Linux/ia32 for a long time and nothing has been done to it. H.J. From eliz@delorie.com Tue Sep 05 03:36:00 2000 From: Eli Zaretskii <eliz@delorie.com> To: hjl@lucon.org Cc: kettenis@wins.uva.nl, gdb@sourceware.cygnus.com Subject: Re: gdb doesn't work very well with dynamic linked binaries Date: Tue, 05 Sep 2000 03:36:00 -0000 Message-id: <200009051035.GAA06054@indy.delorie.com> References: <20000901192328.A28312@valinux.com> <200009041047.LAA10659@phal.cygnus.co.uk> <20000904084934.A11100@lucon.org> <200009041751.e84HprD11517@debye.wins.uva.nl> <20000904164458.A12270@lucon.org> <200009050548.BAA05890@indy.delorie.com> <20000904233222.A13933@lucon.org> X-SW-Source: 2000-09/msg00027.html Content-length: 1581 > Date: Mon, 4 Sep 2000 23:32:22 -0700 > From: "H . J . Lu" <hjl@lucon.org> > > If you can generalize it for ia32, I will implement it for Linux/ia32. The code on go32-nat.c manipulates an array which represents the ia32 debug registers, including the status and control registers. It leaves it to resume() and its subroutines on the target end to actually insert the watchpoints when the inferior is resumed and remove them when the inferior stops and control is passed to GDB. If this model suits most or all ia32 targets, pulling the code from go32-nat.c into a separate module (probably, as part of i386-nat.c) would be very easy for me. If not, I'd ask the relevant maintainers to tell what provisions should I make for other platforms to fit in. > If it won't be fixed in 5.1, I will follow your hints and implement a > Linux only solution when it happens to me again. I can do this Very Soon (tm) provided that I hear a GO from The Powers That Be. Andrew? Stan? What say you? > Hardware watchpoints > have been known to be broken on Linux/ia32 for a long time and nothing > has been done to it. That's not 100% true: a few important patches related to watchpoints went into mainstream sources (mainly in breakpoint.c) in preparation for v5.0. This is the infrastructure I was talking about in my previous message; without those patches the watchpoint support in go32-nat.c could not work reliably. (IIRC, a major part of these patches were resubmitted by me and approved by Michael Snyder as a result of a discussion in which you participated.) From gnalle@dirac.ruc.dk Tue Sep 05 03:56:00 2000 From: Niels L Ellegaard <gnalle@dirac.ruc.dk> To: gdb@sourceware.cygnus.com Subject: gdb + egcs: break __raise_exception Date: Tue, 05 Sep 2000 03:56:00 -0000 Message-id: <7wr96zt9fu.fsf@dirac.ruc.dk> X-SW-Source: 2000-09/msg00028.html Content-length: 928 I am using gdb to debug a program compiled by egcs-2.91.66, and I would like to do the following: To make the debugger catch all exceptions before any stack unwinding takes place, set a breakpoint on __raise_exception (see section Breakpoints, watchpoints, and exceptions). I can easily break at other functions, but when I try to break at __raise_exception I get the following problem: (gdb) break __raise_exception Function "__raise_exception" not defined. I would be most greatful for any help. btw::~> gdb -version GNU gdb 4.17.m68k.objc.threads.hwwp.fpu.gnat .... This GDB was configured as "i486-pc-linux-gnu". -- Niels L Ellegaard http://dirac.ruc.dk/~gnalle/ SPECIAL OFFER! I proofread unsolicited commercial email sent to this address at a rate of US $500.00 per incident! Include billing address in your message and save US $500.00 per hour off ordinary address resolution and tracking charge! From kettenis@wins.uva.nl Tue Sep 05 06:34:00 2000 From: Mark Kettenis <kettenis@wins.uva.nl> To: eliz@is.elta.co.il Cc: hjl@lucon.org, gdb@sourceware.cygnus.com Subject: Re: gdb doesn't work very well with dynamic linked binaries Date: Tue, 05 Sep 2000 06:34:00 -0000 Message-id: <200009051333.e85DXsv12272@debye.wins.uva.nl> References: <20000901192328.A28312@valinux.com> <200009041047.LAA10659@phal.cygnus.co.uk> <20000904084934.A11100@lucon.org> <200009041751.e84HprD11517@debye.wins.uva.nl> <20000904164458.A12270@lucon.org> <200009050548.BAA05890@indy.delorie.com> <20000904233222.A13933@lucon.org> <200009051035.GAA06054@indy.delorie.com> X-SW-Source: 2000-09/msg00029.html Content-length: 2232 Date: Tue, 5 Sep 2000 06:35:52 -0400 (EDT) From: Eli Zaretskii <eliz@delorie.com> > Date: Mon, 4 Sep 2000 23:32:22 -0700 > From: "H . J . Lu" <hjl@lucon.org> > > If you can generalize it for ia32, I will implement it for Linux/ia32. The code on go32-nat.c manipulates an array which represents the ia32 debug registers, including the status and control registers. It leaves it to resume() and its subroutines on the target end to actually insert the watchpoints when the inferior is resumed and remove them when the inferior stops and control is passed to GDB. If this model suits most or all ia32 targets, pulling the code from go32-nat.c into a separate module (probably, as part of i386-nat.c) would be very easy for me. If not, I'd ask the relevant maintainers to tell what provisions should I make for other platforms to fit in. I looked into the the hardware watchpoint support some time ago, and actually started coding, seperating the generic bits out of the go32 code. I was thinking of having some sort of register cache for the debugging registers but didn't immedeately see the right solution to do that. Perhaps they should simply be added to the register cache? I also couldn't directly see how the hardware watchpoint supports interacts with multiple threads, especially in presence of the nifty way the go32 code maps multiple waitchpoints on a single debugging register. In principle I see no reason why x86 hardware waitchpoints couldn't be implemented by i386-tdep.c though. > If it won't be fixed in 5.1, I will follow your hints and implement a > Linux only solution when it happens to me again. A generic x86 solution would be preferable, but a clean, well documented Linux-only solution is certainly welcome. I can do this Very Soon (tm) provided that I hear a GO from The Powers That Be. Andrew? Stan? What say you? > Hardware watchpoints > have been known to be broken on Linux/ia32 for a long time and nothing > has been done to it. Apparently nobody cares enough. It isn't at the top of my priority list so if nobody else contributes the necessary code, it probably won't happen in the near future. Mark From kettenis@wins.uva.nl Tue Sep 05 07:41:00 2000 From: Mark Kettenis <kettenis@wins.uva.nl> To: gnalle@dirac.ruc.dk Cc: gdb@sourceware.cygnus.com Subject: Re: gdb + egcs: break __raise_exception Date: Tue, 05 Sep 2000 07:41:00 -0000 Message-id: <200009051441.e85Efuh12357@debye.wins.uva.nl> References: <7wr96zt9fu.fsf@dirac.ruc.dk> X-SW-Source: 2000-09/msg00030.html Content-length: 794 From: Niels L Ellegaard <gnalle@dirac.ruc.dk> Date: 05 Sep 2000 12:33:25 +0200 I am using gdb to debug a program compiled by egcs-2.91.66, and I would like to do the following: To make the debugger catch all exceptions before any stack unwinding takes place, set a breakpoint on __raise_exception (see section Breakpoints, watchpoints, and exceptions). I can easily break at other functions, but when I try to break at __raise_exception I get the following problem: (gdb) break __raise_exception Function "__raise_exception" not defined. I would be most greatful for any help. GDB cannot find the symbol "__raise_exception" in the executable. Did you verify (for example with `nm') that the executable does contain such a symbol? Mark From hjl@lucon.org Tue Sep 05 08:44:00 2000 From: "H . J . Lu" <hjl@lucon.org> To: Eli Zaretskii <eliz@is.elta.co.il> Cc: kettenis@wins.uva.nl, gdb@sourceware.cygnus.com Subject: Re: gdb doesn't work very well with dynamic linked binaries Date: Tue, 05 Sep 2000 08:44:00 -0000 Message-id: <20000905084429.B15547@lucon.org> References: <20000901192328.A28312@valinux.com> <200009041047.LAA10659@phal.cygnus.co.uk> <20000904084934.A11100@lucon.org> <200009041751.e84HprD11517@debye.wins.uva.nl> <20000904164458.A12270@lucon.org> <200009050548.BAA05890@indy.delorie.com> <20000904233222.A13933@lucon.org> <200009051035.GAA06054@indy.delorie.com> X-SW-Source: 2000-09/msg00031.html Content-length: 1747 On Tue, Sep 05, 2000 at 06:35:52AM -0400, Eli Zaretskii wrote: > > Date: Mon, 4 Sep 2000 23:32:22 -0700 > > From: "H . J . Lu" <hjl@lucon.org> > > > > If you can generalize it for ia32, I will implement it for Linux/ia32. > > The code on go32-nat.c manipulates an array which represents the ia32 > debug registers, including the status and control registers. It > leaves it to resume() and its subroutines on the target end to > actually insert the watchpoints when the inferior is resumed and > remove them when the inferior stops and control is passed to GDB. > > If this model suits most or all ia32 targets, pulling the code from > go32-nat.c into a separate module (probably, as part of i386-nat.c) > would be very easy for me. If not, I'd ask the relevant maintainers > to tell what provisions should I make for other platforms to fit in. > > > If it won't be fixed in 5.1, I will follow your hints and implement a > > Linux only solution when it happens to me again. > > I can do this Very Soon (tm) provided that I hear a GO from The Powers > That Be. Andrew? Stan? What say you? I will vote for fixing it in 5.1. I will do the Linux work since I brought it up. It has been broken for too long. There is no excuse not to fix it given that at least 2 people are willing to do it. > > > Hardware watchpoints > > have been known to be broken on Linux/ia32 for a long time and nothing > > has been done to it. > > That's not 100% true: a few important patches related to watchpoints > went into mainstream sources (mainly in breakpoint.c) in preparation Sorry for the misunderstanding. Thanks for your work on breakpoints. It is just that hardware watchpoints under Linux/ia32 are as broken as before :-). H.J. From eliz@delorie.com Tue Sep 05 08:47:00 2000 From: Eli Zaretskii <eliz@delorie.com> To: kettenis@wins.uva.nl Cc: hjl@lucon.org, gdb@sourceware.cygnus.com Subject: Re: gdb doesn't work very well with dynamic linked binaries Date: Tue, 05 Sep 2000 08:47:00 -0000 Message-id: <200009051546.LAA06234@indy.delorie.com> References: <20000901192328.A28312@valinux.com> <200009041047.LAA10659@phal.cygnus.co.uk> <20000904084934.A11100@lucon.org> <200009041751.e84HprD11517@debye.wins.uva.nl> <20000904164458.A12270@lucon.org> <200009050548.BAA05890@indy.delorie.com> <20000904233222.A13933@lucon.org> <200009051035.GAA06054@indy.delorie.com> <200009051333.e85DXsv12272@debye.wins.uva.nl> X-SW-Source: 2000-09/msg00032.html Content-length: 2140 > Date: Tue, 5 Sep 2000 15:33:54 +0200 (MET DST) > From: Mark Kettenis <kettenis@wins.uva.nl> > > I was thinking of having some sort of register cache for the > debugging registers but didn't immedeately see the right solution to > do that. Perhaps they should simply be added to the register cache? I think all we need is to store the debug registers somewhere. They need to be accessed by (1) the x86-dependent code which is called by GDB's application level to insert and remove watchpoints; (2) the target-specific code which actually calls ptrace or the equivalent syscall to pass the values into the inferior's registers before resuming it, and set bits after the inferior stops to indicate which watchpoint(s) triggered; and (3) by stopped_by_watchpoint's target end. It's possible that the register cache is as good place as any to store DRi, even though they slightly differ from the rest of the registers. > I also couldn't directly see how the hardware watchpoint supports > interacts with multiple threads Sorry, I'm not sure I see the problem. Could you please elaborate? (I'm afraid I don't know much about Linux threads.) > especially in presence of the nifty way the go32 code maps multiple > waitchpoints on a single debugging register. I don't think this should matter. The reference counts are just a means to know which register is used and which isn't. As far as the higher-level GDB code is concerned, what's important is (a) which address, if any, triggered a watchpoint; and (b) which thread caused the watchpoint to trigger. However, if I'm missing the point, and there's some additional infrastructure that is required to make this work with multiple threads, please tell what is, or might be, missing. > Apparently nobody cares enough. It isn't at the top of my priority > list so if nobody else contributes the necessary code, it probably > won't happen in the near future. If v5.1 freeze date is far away, and if the current code in go32-nat.c is good enough to be used by other x86 platforms, I might take the silence as a sign of agreement, given the fact that making it happen is easy... ;-) From hjl@lucon.org Tue Sep 05 08:49:00 2000 From: "H . J . Lu" <hjl@lucon.org> To: Mark Kettenis <kettenis@wins.uva.nl> Cc: eliz@is.elta.co.il, gdb@sourceware.cygnus.com Subject: Re: gdb doesn't work very well with dynamic linked binaries Date: Tue, 05 Sep 2000 08:49:00 -0000 Message-id: <20000905084923.C15547@lucon.org> References: <20000901192328.A28312@valinux.com> <200009041047.LAA10659@phal.cygnus.co.uk> <20000904084934.A11100@lucon.org> <200009041751.e84HprD11517@debye.wins.uva.nl> <20000904164458.A12270@lucon.org> <200009050548.BAA05890@indy.delorie.com> <20000904233222.A13933@lucon.org> <200009051035.GAA06054@indy.delorie.com> <200009051333.e85DXsv12272@debye.wins.uva.nl> X-SW-Source: 2000-09/msg00033.html Content-length: 1070 On Tue, Sep 05, 2000 at 03:33:54PM +0200, Mark Kettenis wrote: > > > If it won't be fixed in 5.1, I will follow your hints and implement a > > Linux only solution when it happens to me again. > > A generic x86 solution would be preferable, but a clean, well > documented Linux-only solution is certainly welcome. Given do it clean, do it fast and make it to work, you can only pick 2 if I am the only one to do it. Since I don't have much time to do it, I have to pick do it fast. > > I can do this Very Soon (tm) provided that I hear a GO from The Powers > That Be. Andrew? Stan? What say you? > > > Hardware watchpoints > > have been known to be broken on Linux/ia32 for a long time and nothing > > has been done to it. > > Apparently nobody cares enough. It isn't at the top of my priority > list so if nobody else contributes the necessary code, it probably > won't happen in the near future. It has to be fixed in 5.1, one way or the other. The worst case is I will make my kludge available to the Linux community. H.J. From msokolov@ivan.Harhan.ORG Tue Sep 05 10:44:00 2000 From: msokolov@ivan.Harhan.ORG (Michael Sokolov) To: binutils@sources.redhat.com, crossgcc@sources.redhat.com, gcc@gcc.gnu.org, gdb@sources.redhat.com Subject: Re: An article about the Cygnus tree Date: Tue, 05 Sep 2000 10:44:00 -0000 Message-id: <0009051743.AA01913@ivan.Harhan.ORG> X-SW-Source: 2000-09/msg00034.html Content-length: 2896 Joe Buck <jbuck@racerx.synopsys.com> wrote: > Still wrong. The FSF never "closed their gcc project". This *is* the gcc > project. Same people for the most part, same code base. Not quite. Yes, politically it's the same project, has many of the same people, and the core code is a version of the same thing. But this is not what my article is about. My article is about the Cygnus tree, the top-level architecture, and the fact that all these projects are now dependent on the tree architecture and belong in the single unified repo. The old gcc which had all the actual gcc code at the top directory level and no libiberty *is* dead. The other, once forked, GCC that has the Cygnus configure script at the top directory level is the only one remaining. That was my whole point. > > BTW, what did EGCS stand for? > > eggs. I've checked in this: ------- cygnus-tree-intro ------- *** /tmp/d01094 Tue Sep 5 11:28:02 2000 --- cygnus-tree-intro Tue Sep 5 11:10:11 2000 *************** *** 42,52 **** its development, so Cygnus didn't take over its development by itself. First they synchronised their work on it (in their internal Cygnus tree) with the FSF maintainers. Then in August 1997 they created an open development project for ! it which they named EGCS (Extended GNU Compiler System). It was a public ! project and for a period of time, for better or worse, was in competition with ! FSF's gcc project. In spring 1999 FSF closed their gcc project and EGCS was ! renamed into GCC. At the same time GCC was changed to mean GNU Compiler ! Collection instead of GNU C Compiler. All these programs have been integrated into the Cygnus tree so completely that they no longer exist separately from it. Moreover, some of these programs are --- 42,52 ---- its development, so Cygnus didn't take over its development by itself. First they synchronised their work on it (in their internal Cygnus tree) with the FSF maintainers. Then in August 1997 they created an open development project for ! it which they named EGCS (eggs, just like the ones Americans eat for breakfast ! :-). It was a public project and for a period of time, for better or worse, was ! in competition with FSF's gcc project. In April 1999 FSF closed their gcc ! project and EGCS was renamed into GCC. At the same time GCC was changed to mean ! GNU Compiler Collection instead of GNU C Compiler. All these programs have been integrated into the Cygnus tree so completely that they no longer exist separately from it. Moreover, some of these programs are -- Michael Sokolov Harhan Engineering Laboratory Public Service Agent International Free Computing Task Force International Engineering and Science Task Force 615 N GOOD LATIMER EXPY STE #4 DALLAS TX 75204-5852 USA Phone: +1-214-824-7693 (Harhan Eng Lab office) E-mail: msokolov@ivan.Harhan.ORG (ARPA TCP/SMTP) (UUCP coming soon) From msokolov@ivan.Harhan.ORG Tue Sep 05 10:54:00 2000 From: msokolov@ivan.Harhan.ORG (Michael Sokolov) To: binutils@sources.redhat.com, crossgcc@sources.redhat.com, gcc@gcc.gnu.org, gdb@sources.redhat.com Subject: Re: An article about the Cygnus tree Date: Tue, 05 Sep 2000 10:54:00 -0000 Message-id: <0009051753.AA02054@ivan.Harhan.ORG> X-SW-Source: 2000-09/msg00035.html Content-length: 1110 "Russ.Shaw" <russell@webaxs.net> wrote: > I think there should be a newsgroup for the gnu tools etc, for applications > involving embedded systems. comp.arch.embedded is more hardware oriented. > What about a comp.gnu.embedded for all questions on installation, development, > use, and abuse of gnu/cygnus/open-source tools for embedded systems? How is the crossgcc mailing list not enough for you for this purpose? That's exactly what it's for. But what my article calls for is quite different. Here I'm concerned mostly with the *core developers*. I'm calling for the /cvs/src and /cvs/gcc repos on Sourceware to be merged and for creating a home for the Cygnus tree concerned with its core development and maintenance, rather than "abuse" you are talking about. -- Michael Sokolov Harhan Engineering Laboratory Public Service Agent International Free Computing Task Force International Engineering and Science Task Force 615 N GOOD LATIMER EXPY STE #4 DALLAS TX 75204-5852 USA Phone: +1-214-824-7693 (Harhan Eng Lab office) E-mail: msokolov@ivan.Harhan.ORG (ARPA TCP/SMTP) (UUCP coming soon) From nickc@redhat.com Tue Sep 05 11:58:00 2000 From: Nick Clifton <nickc@redhat.com> To: scottb@netwinder.org Cc: gdb@sources.redhat.com, ac131313@cygnus.com Subject: Re: src/ltcf-c.sh Date: Tue, 05 Sep 2000 11:58:00 -0000 Message-id: <200009051858.LAA02214@elmo.cygnus.com> X-SW-Source: 2000-09/msg00036.html Content-length: 903 Hi Scott, : The autobuild at netwinder.org fails with the following error: : : /home/build-rpm/BUILD/gdb/opcodes/../ltconfig: : /home/build-rpm/BUILD/gdb/opcodes/../ltcf-c.sh: No such file or directory : configure: error: libtool configure failed : Configure in /home/build-rpm/BUILD/obj-gdb-20000904/opcodes failed, exiting. : Bad exit status from /var/tmp/rpm-tmp.88907 (%build) : : The problem is a cvs checkout of gdb is not updating this file. It isn't : there so the build fails. I had a look at the modules file, and it is : included in the alias src-support, which is included in gdb-support which is : used by the gdb module. If I update my binutils tree, and my insight trees : the file is not checked out, though I expect it to be. If I check it out : manually by cvs co ltcf-c.sh, it works. : : Any ideas? Strange. It seems to work for us. Maybe this is a CVS bug ? Cheers Nick From jbuck@racerx.synopsys.com Tue Sep 05 12:01:00 2000 From: Joe Buck <jbuck@racerx.synopsys.com> To: msokolov@ivan.harhan.org (Michael Sokolov) Cc: binutils@sources.redhat.com, crossgcc@sources.redhat.com, gcc@gcc.gnu.org, gdb@sources.redhat.com Subject: Re: An article about the Cygnus tree Date: Tue, 05 Sep 2000 12:01:00 -0000 Message-id: <200009051859.LAA04233@racerx.synopsys.com> References: <0009051743.AA01913@ivan.Harhan.ORG> X-SW-Source: 2000-09/msg00037.html Content-length: 2141 > > Joe Buck <jbuck@racerx.synopsys.com> wrote: > > > Still wrong. The FSF never "closed their gcc project". This *is* the gcc > > project. Same people for the most part, same code base. > > Not quite. Yes, politically it's the same project, has many of the same people, > and the core code is a version of the same thing. But this is not what my > article is about. My article is about the Cygnus tree, the top-level > architecture, and the fact that all these projects are now dependent on the > tree architecture and belong in the single unified repo. I am starting to see the problem. You are confusing several things together and mashing them into one concept that you are calling "the Cygnus tree". Concept #1 is the software architecture that allows for a top-level makefile with tools placed underneath that top level that can be built all in one step. Yes, this was invented by folks at Cygnus. But what you're failing to see is that this system was designed so that a GNU source directory can be made a subdirectory and then built *without changing it*. Since you don't appreciate that, you falsely believe that a huge change had to be made to gcc to get it to build within this structure. Not at all: it just drops in. The Cygnus folks had to do it that way to work and play successfully with GNU maintainers that did not use the structure. Similarly, we noticed in the early days of egcs that the makeinfo sources were a lot smaller than the .info files, so we decided to include the source in the distribution (maybe not the greatest decision). It was not necessary to change texinfo/makeinfo to do this. Because you make this mistake, you think that gcc underwent a larger technical change than it did. In fact, you appear to believe that this was a revolution or something. Surprise: it is no big deal. Concept #2 is the CVS archive that Cygnus (now Red Hat) makes releases from for their own customers. This tree is *not* the same as the "net" version of gcc (or egcs before it). In many cases, work that Cygnus did went to customers first and only later was merged into the egcs or GCC distribution. ^ permalink raw reply [flat|nested] 5+ messages in thread
[parent not found: <200009051035.GAA06054@indy.delorie.com>]
[parent not found: <200009051333.e85DXsv12272@debye.wins.uva.nl>]
[parent not found: <3.0.6.32.20000906001339.00b0ae90@idefix.wisa.be>]
[parent not found: <200009060608.CAA06709@indy.delorie.com>]
* Re: About unified debug register handling for i386 CPU. [not found] ` <200009060608.CAA06709@indy.delorie.com> @ 2000-09-06 10:10 ` Chris Faylor 0 siblings, 0 replies; 5+ messages in thread From: Chris Faylor @ 2000-09-06 10:10 UTC (permalink / raw) To: gdb On Wed, Sep 06, 2000 at 02:08:10AM -0400, Eli Zaretskii wrote: >> Remember also that the win32 API does not support >> hardware debug registers > >Really? So you cannot have hardware-assisted debugging in Win32 >applications? I am not aware of any way to do this with the Win32 debugging API but I'd be thrilled to be proved wrong. cgf From msokolov@ivan.Harhan.ORG Wed Sep 06 12:45:00 2000 From: msokolov@ivan.Harhan.ORG (Michael Sokolov) To: binutils@sources.redhat.com, crossgcc@sources.redhat.com, gcc@gcc.gnu.org, gdb@sources.redhat.com Subject: Re: An article about the Cygnus tree Date: Wed, 06 Sep 2000 12:45:00 -0000 Message-id: <0009061944.AA08064@ivan.Harhan.ORG> X-SW-Source: 2000-09/msg00065.html Content-length: 4651 Joe Buck <jbuck@racerx.synopsys.com> wrote: > I am starting to see the problem. You are confusing several things > together and mashing them into one concept that you are calling "the > Cygnus tree". No, I'm not confusing anything. > But > what you're failing to see is that this system was designed so that > a GNU source directory can be made a subdirectory and then built *without > changing it*. No, I'm not failing to see this, I know this very well. > Since you don't appreciate that, you falsely believe that > a huge change had to be made to gcc to get it to build within this > structure. No, I know that there was no big change at that early stage. The big changes came when the original non-Cygnus-tree GNU packages went away and the ones in the Cygnus tree became the only ones remaining, at the same time undergoing a transformation to become dependent on the top level and on other modules. This was certainly much more significant for Binutils and GDB, but I'm arguing that GCC is really no different. I'm sorry that you've failed to see the whole point of my article, which is to persuade the powers that be to merge the src and gcc repos. What's keeping GCC in its own repo are the people on the GNU side of things who see it as independent from the Cygnus tree. But what I'm arguing in my article is that this perception of GCC's independence from the Cygnus tree by some GCC maintainers is bogus. To become really independent, they would have to really break all ties with the Cygnus tree, removing the top-level configure script and Makefile that support the rest of the tree and taking away the single tree build. I very seriously doubt that they'll be able to do that, unless they commit the change anonymously so that the angry mob of embedded developers using the single tree build doesn't get them, and if they are not going to do that, they are still tied to the Cygnus tree whether they are in the main repo with the master copies of the top-level files or using stale mirrors of those files in their own repo, and everyone would benefit and no one would lose anything from switching to the former. > Concept #2 is the CVS archive that Cygnus (now Red Hat) makes releases > from for their own customers. This tree is *not* the same as the "net" > version of gcc (or egcs before it). In many cases, work that Cygnus did > went to customers first and only later was merged into the egcs or GCC > distribution. I know that there are two Cygnus trees, one internal and one public, with the former being very old and the latter not being complete yet because of someone's reluctance to merge /cvs/src and /cvs/gcc on the Sourceware box. This is explained in my article too, clearly enough I think. And I also know that the differences between the two are generally kept to a minimum. Also don't forget that before the public CVS repos were created, there were still public daily or weekly snapshots. I can bet that those were made directly from the trunk of Cygnus' internal repo, proving that it can't be too far away from what the public is allowed to see. As for customer stuff, that's on branches, not on the trunk, or so I've heard. And still note the big problem with your wording. When you talk about the public tree, you are again talking about a separate tree for GCC or EGCS rather the a public version of the full Cygnus tree. *There is no separate GCC or EGCS tree, other than as a nuisance to the developers and users in the two-repo arrangement*. There is a public Cygnus tree now, in /cvs/src on the Sourceware box, which closely mirrors the structure of the old internal tree and contains all of its components that Cygnus was willing to make public, whether they are used in GNU projects (like bfd, opcodes, etc) or are completely non-GNU (like newlib, libgloss, winsup, etc). GCC is the only remaining exception, and I'm doing everything I can to persuade the powers that be to realise that it's no different from everyone else (including Binutils and GDB, which are just as GNU but happily live in the unified public Cygnus tree) and to merge the src and gcc repos. Haven't you noticed lately that every change to the top level has to be carefully applied to both /cvs/src and /cvs/gcc repos? If you have, how can you still think of a separate GCC tree? -- Michael Sokolov Harhan Engineering Laboratory Public Service Agent International Free Computing Task Force International Engineering and Science Task Force 615 N GOOD LATIMER EXPY STE #4 DALLAS TX 75204-5852 USA Phone: +1-214-824-7693 (Harhan Eng Lab office) E-mail: msokolov@ivan.Harhan.ORG (ARPA TCP/SMTP) (UUCP coming soon) From dje@watson.ibm.com Wed Sep 06 13:05:00 2000 From: David Edelsohn <dje@watson.ibm.com> To: msokolov@ivan.Harhan.ORG (Michael Sokolov) Cc: binutils@sources.redhat.com, crossgcc@sources.redhat.com, gcc@gcc.gnu.org, gdb@sources.redhat.com Subject: Re: An article about the Cygnus tree Date: Wed, 06 Sep 2000 13:05:00 -0000 Message-id: <200009062005.QAA14472@mal-ach.watson.ibm.com> References: <0009061944.AA08064@ivan.Harhan.ORG> X-SW-Source: 2000-09/msg00066.html Content-length: 2009 >>>>> Michael Sokolov writes: Michael> I'm sorry that you've failed to see the whole point of my article, which is to Michael> persuade the powers that be to merge the src and gcc repos. What's keeping GCC Michael> in its own repo are the people on the GNU side of things who see it as Michael> independent from the Cygnus tree. But what I'm arguing in my article is that Michael> this perception of GCC's independence from the Cygnus tree by some GCC Michael> maintainers is bogus. To become really independent, they would have to really Michael> break all ties with the Cygnus tree, removing the top-level configure script Michael> and Makefile that support the rest of the tree and taking away the single tree Michael> build. I very seriously doubt that they'll be able to do that, unless they Michael> commit the change anonymously so that the angry mob of embedded developers Michael> using the single tree build doesn't get them, and if they are not going to do Michael> that, they are still tied to the Cygnus tree whether they are in the main repo Michael> with the master copies of the top-level files or using stale mirrors of those Michael> files in their own repo, and everyone would benefit and no one would lose Michael> anything from switching to the former. No one sees the trees as independent and no one is trying to keep the independent. No one is arguing against merging the trees. It simply takes time and effort which no one has time to tackle at the moment. The only concern is being able to make a single, coordinated distribution in the face of the different schedules of the various packages. One still can create a release branch and stabilize the various dependent components in that branch for a particular package (gcc, binutils, gdb, etc.). I do not understand why you insist on looking for conspiracies and attributing ulterior motives where there are none. Have you ever heard of "Occam's razor"? If there is a simple explanation, it most likely is correct. David From Stephane.Carrez@worldnet.fr Wed Sep 06 13:53:00 2000 From: Stephane Carrez <Stephane.Carrez@worldnet.fr> To: gdb@sourceware.cygnus.com Subject: Monitor support in machine -tdep.c file? Date: Wed, 06 Sep 2000 13:53:00 -0000 Message-id: <39B6CBFB.9462A94E@worldnet.fr> X-SW-Source: 2000-09/msg00067.html Content-length: 1194 Hi! I'm adding the support for Buffalo monitor for 68hc11 in Gdb (using the CME11E9 board from Axiom Manufacturing). I'm using the Gdb generic monitor framework. Is it acceptable to put such monitor support in my m68hc11-tdep.c file? For other monitors, it's true that a separate file is defined for each kind of monitor. But I would like to avoid introducing a new file in Gdb for something that will always be there for 68hc11. I understand that in the past the various monitors were selected based on the configury stuff. With the multi-arch, it seems to me we should always have those monitors. In that context, do we really need to separate the monitor from the machine specific part? (most monitors are machine specific). Thanks for any opinions about that, Stephane ----------------------------------------------------------------------- Home Office E-mail: stcarrez@worldnet.fr Stephane.Carrez@sun.com WWW: http://home.worldnet.fr/stcarrez http://www.sun.com Mail: 17, rue Foucher Lepelletier 6, avenue Gustave Eiffel 92130 Issy Les Moulineaux 78182 Saint Quentin en Yvelines France From mrs@windriver.com Wed Sep 06 17:49:00 2000 From: Mike Stump <mrs@windriver.com> To: dje@watson.ibm.com, msokolov@ivan.Harhan.ORG Cc: binutils@sources.redhat.com, crossgcc@sources.redhat.com, gcc@gcc.gnu.org, gdb@sources.redhat.com Subject: Re: An article about the Cygnus tree Date: Wed, 06 Sep 2000 17:49:00 -0000 Message-id: <200009070049.RAA21087@kankakee.wrs.com> X-SW-Source: 2000-09/msg00068.html Content-length: 797 > To: msokolov@ivan.Harhan.ORG (Michael Sokolov) > Date: Wed, 06 Sep 2000 16:05:27 -0400 > From: David Edelsohn <dje@watson.ibm.com> > No one is arguing against merging the trees. It simply takes time > and effort which no one has time to tackle at the moment. Out of curiosity, would a sym link in the repo from src/gcc over to egcs/gcc not fix the bulk of the problem? If it does, could that be done to sync most of the files, with very little effort? It sounds like if that were done, and a forced merge for include and maybe two more symlinks for libiberty and include, that almost the entire problem would be solved. From there, new modules work and rationalizing the toplevel files, and testing, and then sym link from cvs/egcs over to cvs/src would drive it the rest of the way home. From law@cygnus.com Wed Sep 06 17:54:00 2000 From: Jeffrey A Law <law@cygnus.com> To: Mike Stump <mrs@windriver.com> Cc: dje@watson.ibm.com, msokolov@ivan.Harhan.ORG, binutils@sources.redhat.com, crossgcc@sources.redhat.com, gcc@gcc.gnu.org, gdb@sources.redhat.com Subject: Re: An article about the Cygnus tree Date: Wed, 06 Sep 2000 17:54:00 -0000 Message-id: <3145.968288162@upchuck> References: <200009070049.RAA21087@kankakee.wrs.com> X-SW-Source: 2000-09/msg00069.html Content-length: 555 In message < 200009070049.RAA21087@kankakee.wrs.com >you write: > > To: msokolov@ivan.Harhan.ORG (Michael Sokolov) > > Date: Wed, 06 Sep 2000 16:05:27 -0400 > > From: David Edelsohn <dje@watson.ibm.com> > > > No one is arguing against merging the trees. It simply takes time > > and effort which no one has time to tackle at the moment. > > Out of curiosity, would a sym link in the repo from src/gcc over to > egcs/gcc not fix the bulk of the problem? Because CVS doesn't DTRT with symlinks. At least that what I was told. jeff ^ permalink raw reply [flat|nested] 5+ messages in thread
[parent not found: <200009071009.e87A9oh14388@debye.wins.uva.nl>]
* Re: gdb doesn't work very well with dynamic linked binaries [not found] <200009071009.e87A9oh14388@debye.wins.uva.nl> @ 2000-09-09 14:39 ` Peter.Schauer 0 siblings, 0 replies; 5+ messages in thread From: Peter.Schauer @ 2000-09-09 14:39 UTC (permalink / raw) To: Mark Kettenis; +Cc: gdb, eliz > The bug I mentioned previously is exactly that they're getting > cleared by the kernel and then not getting restored on return > to user space, leaving them wrong until the next reschedule :-( > > I think I understand the problems now. It basically means that one > cannot reliably watch area's that are somehow used in system calls. > > I suspect that Linux isn't the only kernel with this bug. AFAICS > FreeBSD also simply disables any (user-space) watchpoints triggered > from within the kernel. I don't know what the various x86 System V's > (Solaris, SCO Open Server 5) do, but I wouldn't be surprised if it is > broken there too. AFAIK Solaris never provided access to the x86 debug registers. Starting with Solaris 2.6, support for hardware watchpoints is provided via procfs (protect pages which contain watchpoint areas, examine address on pagefault, cause breakpoint if address is within watchpoint area). Perhaps this scheme (which allows for an arbitrary number of watchpoints) could be adopted by the Linux kernel. Debug register access might be valuable for embedded targets, but the generic x86 target should not assume availability of debug register access. -- Peter Schauer pes@regent.e-technik.tu-muenchen.de From gkarabin@pobox.com Sat Sep 09 16:16:00 2000 From: George Karabin <gkarabin@pobox.com> To: gdb@sourceware.cygnus.com Subject: Multi-Ice server? Date: Sat, 09 Sep 2000 16:16:00 -0000 Message-id: <39BAC4C0.56EDC24@pobox.com> X-SW-Source: 2000-09/msg00095.html Content-length: 524 It's my understanding that gdb can interface to a Multi-Ice server running on Windows by using the "multi-ice-gdb-server", which wraps around the actual Multi-Ice server that ARM distributes. Has anyone looked into developing a replacement for ARM's Multi-Ice server, or talked to ARM about releasing the source for theirs? I'd really like to have the option of doing all of my ARM development on Linux, but the need to have a Windows box to interface to the Multi-Ice box itself is both kludgy and a waste of resources. ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: gdb doesn't work very well with dynamic linked binaries
@ 2000-09-06 3:54 James Cownie
0 siblings, 0 replies; 5+ messages in thread
From: James Cownie @ 2000-09-06 3:54 UTC (permalink / raw)
To: gdb
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 2606 bytes --]
This threads seems really to have morphed to be about using the
hardware watchpoint registers on IA32.
So :-
Note that there are a couple of linux kernel bugs in 2.2 (one of which
was fixed in 2.2.17) which affect the use of the debug registers.
The first bug (which was fixed in 2.2.17) was that the debug status
register wasn't being saved where it could be seen by ptrace, so if
you were relying on looking at the hardware status register you were
stuffed.
The second (which isn't yet fixed) I described with a test case in a
previous mail here. ( http://sources.redhat.com/ml/gdb/2000-08/msg00072.html )
Basically the kernel ignores all hardware
watchpoints from the point where one of them is triggered inside the
kernel until a reschedule. This means many watchpoints at user level
can be silently skipped :-(
AFAICS both bugs remain in 2.4.0-test7.
-- Jim
James Cownie <jcownie@etnus.com>
Etnus, LLC. +44 117 9071438
http://www.etnus.com
--
-- Jim
James Cownie
jcownie@etnus.com
Etnus, Inc.
Phone +44 117 9071438
From mdeans@algonet.se Wed Sep 06 04:13:00 2000
From: "Bjorn Eriksson" <mdeans@algonet.se>
To: "Russ.Shaw" <russell@webaxs.net>, "Michael Sokolov" <msokolov@ivan.Harhan.ORG>
Cc: <binutils@sources.redhat.com>, <crossgcc@sources.redhat.com>, <gcc@gcc.gnu.org>, <gdb@sources.redhat.com>
Subject: comp.gnu.embedded (was: embedded An article about the Cygnus tree)
Date: Wed, 06 Sep 2000 04:13:00 -0000
Message-id: <000001c017f3$5c69c020$0800a8c0@win95.inteloop.se>
References: <39B57E79.EADD4317@webaxs.net>
X-SW-Source: 2000-09/msg00059.html
Content-length: 1007
> > > I think there should be a newsgroup for the gnu tools etc,
> > > for applications involving embedded systems. comp.arch.embedded
> > > is more hardware oriented.
> > > What about a comp.gnu.embedded for all questions on
> > > installation, development, use, and abuse of gnu/cygnus/open-source
> > > tools for embedded systems?
> >
> > How is the crossgcc mailing list not enough for you for this
> > purpose? That's exactly what it's for.
>
> Its just that crossgcc traffic seems a bit on the low side
> for some reason. BTW, is all this cross-posting bad? A
> newsgroup is better suited for a wide range of questions
> and seems more 'publicly accessible' for beginners to
> ask all kinds of stupid questions.
I hope you haven't missed linux-embedded@waste.org. I'd also like to see a
comp.gnu.embedded newsgroup but not for the reason you stated. I like to
think we're all trying to help out anyone who spends time and effort to
research his problem and write coherent questions.
//Björnen.
^ permalink raw reply [flat|nested] 5+ messages in thread[parent not found: <Pine.LNX.4.21.0009041104140.3814-100000@propylaea.anduin.com>]
* Re: gdb doesn't work very well with dynamic linked binaries [not found] <Pine.LNX.4.21.0009041104140.3814-100000@propylaea.anduin.com> @ 2000-09-04 11:22 ` Ulrich Drepper 0 siblings, 0 replies; 5+ messages in thread From: Ulrich Drepper @ 2000-09-04 11:22 UTC (permalink / raw) To: Daniel Berlin; +Cc: Mark Kettenis, hjl, amylaar, gdb Daniel Berlin <dan@cgsoftware.com> writes: > If they were the same ones he sent me, They are > i forwarded them along to various gdb people, but the consensus was > that it didn't actually fix the real problem. Well, then fix it correctly. I'm using the patches for years without experiencing negative side effects. Only with them is it possible to debug ld.so. -- ---------------. ,-. 1325 Chesapeake Terrace Ulrich Drepper \ ,-------------------' \ Sunnyvale, CA 94089 USA Red Hat `--' drepper at redhat.com `------------------------ From msokolov@ivan.Harhan.ORG Mon Sep 04 14:21:00 2000 From: msokolov@ivan.Harhan.ORG (Michael Sokolov) To: binutils@sources.redhat.com, crossgcc@sources.redhat.com, gcc@gcc.gnu.org, gdb@sources.redhat.com Subject: An article about the Cygnus tree Date: Mon, 04 Sep 2000 14:21:00 -0000 Message-id: <0009042120.AA26535@ivan.Harhan.ORG> X-SW-Source: 2000-09/msg00009.html Content-length: 23571 Hi there, In light of the question of merging the src and gcc repos recently raised again in a thread on the GCC list about adding zlib to GCC, I've written an article about the Cygnus tree. It appears below. I hope it will start a better discussion about merging the repos and breaking the code of silence around the Cygnus tree. This article also appears on my FTP site in /pub/embedded/cygnus-tree-intro on ivan.Harhan.ORG. Whenever I release a toolchain for one of the embedded systems I'm working with based on the Cygnus tree, I have to explain to my users what it is, given its obscurity. Now I can just refer them to my article. Enjoy! -- Michael Sokolov Harhan Engineering Laboratory Public Service Agent International Free Computing Task Force International Engineering and Science Task Force 615 N GOOD LATIMER EXPY STE #4 DALLAS TX 75204-5852 USA Phone: +1-214-824-7693 (Harhan Eng Lab office) E-mail: msokolov@ivan.Harhan.ORG (ARPA TCP/SMTP) (UUCP coming soon) Here is the article: An Introduction to the Cygnus Tree By Michael Sokolov International Free Computing Task Force @(#)cygnus-tree-intro 1.1 00/09/04 1. What is the Cygnus tree? "The GNU configure and build system" by Ian Lance Taylor gives the following answer: The Cygnus tree is used for various packages including gdb, the GNU binutils, and egcs. It is also, of course, used for Cygnus releases. It is the build system which was developed at Cygnus, using the Cygnus configure script. It permits building many different packages with a single configure and make. The configure scripts in the tree are being converted to autoconf, but the general build structure remains intact. During the 1990s Cygnus Solutions (now part of Red Hat, Inc.) has created a remarkable system that is usually called the Cygnus tree. They have taken many GNU programs (which were all designed as completely self-contained stand-alone packages), most importantly the ones used for software development (gcc, gas, binutils, and gdb) and unified them into one source tree with a single top- level configure script and a single top-level Makefile. This allows all these packages to be configured, built, and installed together in one fell swoop. Initially, the Cygnus tree existed inside Cygnus only and was distributed only to their customers. At that point, most of the GNU programs were simply grafted into the tree with no changes of much interest to people outside of Cygnus. These programs existed and were completely public in their original GNU form, and the Cygnus tree was just a fancy packaging option of not much interest to people outside of Cygnus. Therefore, there was no pressure for a public Cygnus tree. However, as time went on, it turned out that Cygnus was the best and most active contributor to some of the GNU programs involved. As a result, they have taken over the maintenance of those programs and changed and enhanced them significantly. These GNU programs were gcc, gas, binutils, and gdb. Cygnus took over the maintenance of gas, binutils, and gdb back in early-mid 1990s, doing development behind closed doors and making occasional public releases. They were finally opened to the public in May 1999. gcc is bigger and has many more people interested in its development, so Cygnus didn't take over its development and do it behind closed doors. First they synchronised their work on it (in their internal Cygnus tree) with the FSF maintainers. Then in late 1997 they created an open development project for it which they named EGCS. It was run by Cygnus and competed with FSF's gcc project. Finally, in spring 1999 FSF closed their gcc project and EGCS was renamed into GCC. All these programs have been integrated into the Cygnus tree so completely that they no longer exist separately from it. Moreover, some of these programs are not even single modules any more. The Cygnus tree consists of many subdirectories called modules and some top-level glue. Initially, there was one module for each GNU program grafted into the tree. Then, however, Cygnus added some new modules, split some existing ones, and made some existing modules dependent on some new ones. As a result, some of the modules that initially (long ago) were grafted into the tree from stand-alone GNU packages can no longer be pulled back out of the tree and used separately. As Cygnus took over the maintenance of several GNU programs, they started making new releases of them. However, these programs had already been converted to work in the Cygnus tree only. How could they release them separately then? The answer is that these releases are NOT like typical GNU packages that have the program in the top-level directory of the distribution tarball. Instead, these releases are actually pruned checkouts of the Cygnus tree, made to look indistinguishable to the untrained eye from typical GNU packages. An important property of the Cygnus tree is that it doesn't have to be complete. The top- level configure script and Makefile check whether each directory they are about to descend into is actually present, and if it isn't, it's silently skipped. As a result, you can prune the Cygnus tree down to contain only the modules you need, and then just those modules will be configured and built. Cygnus-made GNU releases are all Cygnus tree checkouts pruned down to contain only the modules needed by the GNU release in question. GCC is still a single module in the Cygnus tree, but it now depends on the top level and on libiberty, the miscellaneous support code module that virtually every other module depends on. Current GCC releases consist of the top level, libiberty, the actual gcc module, and several modules with target libraries for different high-level languages that GCC now supports. Current Binutils releases consist of a lot of modules. There is still a binutils module that loosely corresponds to the old GNU binutils package, but GNU ld is now a separate module. (gas has always been a separate module.) The binutils, gas, and ld modules depend extensively on bfd and opcodes, two major host library modules invented by Cygnus. Current GDB releases also consist of a lot of modules. gdb itself is still a single module in the Cygnus tree, but it now depends extensively on bfd and opcodes, same as Binutils, as well as some other Cygnus- added modules that Binutils don't use. And of course on libiberty, which is included in all current GCC, Binutils, and GDB releases. In addition to the above GNU programs, the Cygnus tree contains many interesting non-GNU modules developed by Cygnus, most of which have been opened to the public. These include Newlib, Cygwin, a number of Tcl tools and GUI libraries, an extensive testsuite framework, and CGEN. 2. So where is this thing in terms of public CVS and mailing lists? This is where we currently have a problem. When Cygnus tree-based EGCS/GCC, Binutils, and GDB were first opened to the public, they were in the form of pruned Cygnus tree checkouts. We ended up with three GNU projects each having its own (stale, corresponding to a snapshot from the Cygnus tree at some point) copy of the top-level files, libiberty, and most of the headers. With Binutils and GDB it was even worse, as they had their own copies of bfd and opcodes, both of which are actively maintained and rapidly changing modules. This is OK for releases, but it's a problem for development. After all, the whole point of release branches and release engineering is to produce stability in a single software component, regardless of the staleness and deviation from the mainline this almost always causes. Before Cygnus opened the development to the public, they internally had a very sensible model: one master source tree with one master copy of each module where all development is done, so all developers are always on the same page, and specific bits of the tree are sent off on release branches as releases are made. Each release will inevitably have some oddities introduced into it by the release engineering process, and some things may become less generic than they could be (for example, the top-level configure and Makefile will still remind curious code readers of the other modules in the tree, but because of the potentially incompatible changes on the release branch, there may not be perfect interoperability with them). However, developers always have one single master tree to work with, to fix major bugs in, and to make major improvements to. It is perfectly synergistic and self- consistent, at the price of less stability because it isn't release-engineered. This means that releases have the property that some bits in them may be stale or duplicated elsewhere, both of which are highly undesirable for developers. The way releases should really work is by letting end users who are not expected to do their own development and bugfixing have a stable release that doesn't need any bugfixing. But as soon as a user does find a bug he/she wants to fix him/herself, he/she should really put the release aside, get the master copies of all components involved, fix any bugs there, and submit the fixes to the respective maintainers. This is the Free Software way, and this is what makes Free Software thrive. However, this arrangement was hampered by EGCS/GCC, Binutils, and GDB starting life as public GNU projects in the same branched form in which they exist in releases. What they should have done was to create a public Cygnus tree, fully explain to everyone what the Cygnus tree is, and have all development proceed in it like it did inside Cygnus before. But instead each of EGCS, Binutils, and GDB began life in its own CVS repository containing the same thing the FSF release tarballs have in them. The renaming of EGCS back to GCC didn't change anything. Unfortunately, the GCC (former EGCS) maintainers seem to not have grasped yet that this arrangement is troublesome and just plain wrong. (And they have been living with it since the start of the EGCS project!) Fortunately, the Binutils and GDB maintainers were much quicker to realise this. Almost immediately after the opening of these projects it became clear that a single master copy of each component is needed, instead of two teams working divergently on two branches made off of a once unified Cygnus tree. Also at the same time parts of the Cygnus tree other than GCC, Binutils, and GDB (i.e., the Cygnus-developed non- GNU modules) were being opened to the public. Those aren't GNU projects and virtually everyone doing significant work on them is from Cygnus. Those folks are used to the Cygnus tree and know that doing it any other way is just plain wrong. Therefore, it became clear that the Cygnus tree needed to be brought back. In February 2000, less than a year after the opening of Binutils and GDB, their separate CVS repositories were liquidated. Instead, a new CVS repository was created which was to be the public Cygnus tree. It is /cvs/src on sources.redhat.com (formerly sourceware.cygnus.com), and from the start it was designed as a real full Cygnus tree repository, rather than a repository for just one project, which is what they did with all their public CVS repositories before that. (You can check the CVS log on its modules file to convince yourself.) The modules that make up Binutils and GDB were moved into it, eliminating the separate Binutils and GDB repositories that existed before. Immediately after that Newlib and Cygwin were imported from Cygnus' internal tree (these are Cygnus-developed non-GNU tree modules), confirming without any doubt that finally the public Cygnus tree was born. After being born in February 2000, the public Cygnus tree in /cvs/src on the sourceware machine matured quickly. It is now almost complete. Unfortunately, there is still one omission. This omission and the need for users/developers to compensate for it manually is the reason why I'm boring you here with history lessons instead of just telling you where to get the public Cygnus tree and what to do with it. This omission is GCC. Ever since the start of EGCS in late 1997 it has lived in its own CVS repository. Currently it is /cvs/gcc on the sourceware machine (sources.redhat.com). Officially it's on gcc.gnu.org, but the dirty little secret is that gcc.gnu.org is just a DNS record, it points to the very same sourceware machine, same as sources.redhat.com. Everything else has now been integrated into the /cvs/src repository, bringing back the Cygnus tree in all its glory. However, there is also the /cvs/gcc repository duplicating a lot of it. In effect, instead of one unified public Cygnus tree we, the non-Cygnus folks who don't have access to their original internal tree, have two trees to deal with: /cvs/gcc and /cvs/src. The former contains the gcc module and all language library modules, the latter contains everything else. The two duplicate all the top-level files and the libiberty module. Most people working on this code have by now realised that it is really designed to be in one Cygnus tree, and that's how they work on it. Our unspoken convention is now to locally construct this tree from the two repositories, work on it, and check the changes into the right repo(s). The parts that are in only one of the repositories are simply taken from it and combined into one tree. The trickier parts are the ones that are duplicated in the two repos. These are the top-level files, the headers, and libiberty. /cvs/gcc's libiberty is considered the master one, so that one is usually taken. However, most commits to it are also simultaneously made to /cvs/src's copy, and the latter is also periodically replaced with the former, so it usually works just as well. The include directory in the Cygnus tree contains the public headers for all modules. It currently exists in both repos. /cvs/src's copy contains the headers for all modules and /cvs/gcc's copy contains only the headers for libiberty. The latter follow the same rules as libiberty itself. Finally, there are the top-level files. These must know about all the modules in tree. Most people changing these files now keep checking each change into both repos. The /cvs/src repo has one top-level directory in it also named src, and that directory has the Cygnus tree in it (sans GCC). You can check it out in its entirety with: cvs -d :pserver:anoncvs@sources.redhat.com co src This will take a lot of time and disk space. The /cvs/src repo also has a modules file. Remember, the Cygnus tree has lots of modules in it, and most people work only on those modules that interest them. The modules file in the /cvs/src repo allows checking out partial Cygnus trees, and the comments in its CVS log indicate that it is modeled after the modules file of Cygnus' internal repo, meaning that this is how the modules file of a real Cygnus tree should look like. It has CVS checkout modules defined for the most common Cygnus tree module combinations that are normally checked out together. Since CVS checkout module names exist in the same namespace as the top-level directories in the repo, of which there is only one (src), there are no conflicts. (In particular, there is no conflict between CVS checkout modules and the Cygnus tree modules, the latter being one level below in the src directory.) The /cvs/gcc repo has one top-level directory in it named egcs, and it has this repo's version of the Cygnus tree in it. You can check it out in its entirety with: cvs -d :pserver:anoncvs@sources.redhat.com co egcs The /cvs/gcc repo's modules file doesn't do much. It has an egcs-core CVS checkout module defined that checks out the tree without the language front ends and target libraries, but other than that, this repo is normally checked out in its entirety. As for mailing lists, currently most of the public projects in the Cygnus tree have their own project-specific mailing lists, but there are no mailing lists for the Cygnus tree overall, leaving the top-level files and many less popular modules homeless. 3. Our Current Solution So what do we do about it? As I've just explained, we really want and need the Cygnus tree, but there currently isn't a single public CVS repository for it. The current solution is for people to construct full Cygnus trees on their local machines from the two CVS repos and to keep track of these two repos in development. Here is the procedure I use for constructing the full Cygnus tree from the two repos: 1. Check out both repos (either in their entirety or only the parts you want). You'll have two partial Cygnus trees in different directories. 2. Create a directory for the combined Cygnus tree. 3. Populate it with everything from the src repo except the include and libiberty subdirectories. 4. Add gcc, libiberty, and the language target libraries from the gcc repo. 5. Create the include subdirectory and populate it by merging the include subdirectories of the two repos. For files that are present in both, use the gcc repo's version. Explanation. This procedure is designed with the following two points in mind: 1. libiberty and its headers are taken from the gcc repo, which is considered the master copy. 2. The procedure I just outlined uses the top-level files from the src repo. The ones from the gcc repo could have been used instead. Most of the time both will work equally well. I personally prefer to take them from the src repo because it was specifically designed as the real full Cygnus tree repo. 4. The Real Solution The above procedure, with a few variations, is generally followed by most developers working in the Cygnus tree. However, this doesn't make it any less painful. It is just a nuisance for everyone to keep piecing the tree together every time, then parsing back where to check in patches, and remembering to keep the two repos in sync. There is absolutely no benefit to gain from the current arrangement. It doesn't give GCC any more independence. GCC is now critically dependent on the Cygnus tree (and has been so ever since the start of EGCS), and by keeping their own copy of it the GCC maintainers are simply closing their eyes to this. But the reality is that everyone still builds and tests it together with the rest of the Cygnus tree (using the procedure from the previous section), and the top-level files in the gcc repo are still kept in sync with the ones in the src repo, manually and painfully. There is nothing to lose by doing away with this and merging the repos, only a lot of convenience and sanity to gain. This is only one of the problems with the current arrangement. The other problem is that there is no "home" for the Cygnus tree. There is no place where people can learn what the Cygnus tree is and read all about it. There is no mailing list to discuss it overall (as opposed to some particular module in it). There is no clearly designed group responsible for the maintenance of the top-level files. In fact, it's even more than just not having a mailing list for the Cygnus tree overall. There appears to be some sort of a code of silence around it. Many people know what it is and do their development with it in mind, but there is virtually no public mention of it, as if everyone is pretending that it doesn't exist. This is actually why I had to write this article: to tell the people what the Cygnus tree is. I have a number of projects that involve the Cygnus tree, and when presenting them to the public, I found myself facing a strange problem. I need to refer people to the Cygnus tree, but there is nothing to refer them to! Their is no home (WWW page, FTP site, mailing list, or anything at all) about the Cygnus tree that I can point people to. In fact, there is nothing to even tell people what it is, aside from a very terse remark in Ian Lance Taylor's "The GNU configure and build system", which while describing how its configure scripts and Makefiles work, really fails to answer the question of *what it is*. As a developer highly interested in the Cygnus tree, I'm trying to do whatever I can to help solve these problems. This article explaining what the Cygnus tree is and what is its current situation is my first step. I will end it with my proposal for what I believe is the right solution. For the problem of two repos, the solution is to merge them. Given how the src repo was intended from the start as the repo for the full Cygnus tree and how it successfully does this now for everything except GCC, there is no need to do anything with it. It is already exactly the way it should be. All that needs to be done is to move the gcc and language library modules from the gcc repo to the src one, replace libiberty and its headers in the src repo with the ones in the gcc one, and put the gcc repo to rest. Given how new modules have recently been added to the src repo with no fuss and no problems, I don't think that the current inhabitants of the src repo would object to welcoming a new member, or even that their consent would be required. After all, they don't have to check out any modules other than the ones they need, and the top-level configure script and Makefile already list everything anyway. In fact, many src repo inhabitants will certainly like having the master copy of libiberty in their repo, rather than a mirror that sometimes gets stale. Thus the only ones who will have to be persuaded are the GCC maintainers. The question of merging the repos has come up more than once on the GCC mailing lists. Some of the GCC maintainers have said that they liked the idea. However, there seems to be some politics playing against it, apparently coming from FSF. Thus it appears that the next battle is going to be between us, developers, and the politicians. In order to fight and win this battle, we must actively push our cause. This brings us to the second problem of not having a real home for the Cygnus tree. The solution for this problem is obvious: create one. This article is a start, explaining publicly apparently for the first time what the Cygnus tree is and trying to break the code of silence around it. Now we just need to make all this better known to more people so that we can start a mailing list for the Cygnus tree and decide what else do we need for a "home" for it. This awareness-raising cause will probably have to be pursued on the GCC, Binutils, and GDB mailing lists. This is because these are the parts of the Cygnus tree where some people still live in the sandbox of separate GNU projects. Everyone else, i.e., people working on the Cygnus-developed non-GNU modules like Newlib, already come from the Cygnus tree background and would certainly be all for bringing it back. So, let's all try to do our best to enlighten the public about the Cygnus tree, create a real home for it, and persuade the GCC maintainers to move to the src repository! Appendix. References "The GNU configure and build system" by Ian Lance Taylor is file configure.texi in the etc subdirectory of the Cygnus tree. For those of you who prefer WWW, the author has a WWW version on his page: http://www.airs.com/ian/configure/ Once you know what the Cygnus tree is thanks to this article, Ian's superb tutorial will tell you everything you need to know about its configure scripts and Makefiles to master development in this tree. libgloss/doc/porting.texi in the Cygnus tree gives a very good overview of how the different pieces of the tree come together to support embedded systems and how to port them to a new one. From hjl@lucon.org Mon Sep 04 16:45:00 2000 From: "H . J . Lu" <hjl@lucon.org> To: Mark Kettenis <kettenis@wins.uva.nl> Cc: gdb@sourceware.cygnus.com Subject: Re: gdb doesn't work very well with dynamic linked binaries Date: Mon, 04 Sep 2000 16:45:00 -0000 Message-id: <20000904164458.A12270@lucon.org> References: <20000901192328.A28312@valinux.com> <200009041047.LAA10659@phal.cygnus.co.uk> <20000904084934.A11100@lucon.org> <200009041751.e84HprD11517@debye.wins.uva.nl> X-SW-Source: 2000-09/msg00010.html Content-length: 1563 On Mon, Sep 04, 2000 at 07:51:53PM +0200, Mark Kettenis wrote: > Date: Mon, 4 Sep 2000 08:49:34 -0700 > From: "H . J . Lu" <hjl@lucon.org> > > On Mon, Sep 04, 2000 at 11:47:13AM +0100, Joern Rennecke wrote: > > > It is too bad that not many gcc developers using --enable-shared to > > > configure gcc under ia32. See > > > > Well, on Linux, gdb fails to restart a cc1 / cc1plus executable that is > > statically linked, which makes debugging very tedious. > > So I always patch my Makefile to use static linking. > > That is a very annoying bug in gdb 5.0. When I set a breakpoint in > the shared library, I have to disable them before restart. > > Getting this bug fixed is one of the release criteria for GDB 5.1. > All I have now is a hack that works around the problems, see the GDB > TODO file for more info. > How about the hardware watchpoints on ia32? I mean 1. Delete hardware watchpoints to free hardware debug registers. Set 4 hardware watchpoints. Then delete/disable one hardware watchpoint. Set another hardware watchpoint. Can gdb free a hardware debug register when I delete/disable the hardware watchpoint which uses it? 2. Watch for different values on a viariable with one hardware debug register. That is do (gdb) watch foobar == 1 (gdb) watch foobar == 2 (gdb) watch foobar == 3 (gdb) watch foobar == 4 (gdb) watch foobar == 5 only using one hardware debug register. I have reported them long before 5.0 was released. But at least #1 still doesn't work right in 5.0 under Linux/ia32. Thanks. H.J. From geoffk@cygnus.com Mon Sep 04 16:54:00 2000 From: Geoff Keating <geoffk@cygnus.com> To: msokolov@ivan.Harhan.ORG Cc: binutils@sources.redhat.com, crossgcc@sources.redhat.com, gcc@gcc.gnu.org, gdb@sources.redhat.com Subject: Re: An article about the Cygnus tree Date: Mon, 04 Sep 2000 16:54:00 -0000 Message-id: <200009042353.QAA00709@localhost.cygnus.com> References: <0009042120.AA26535@ivan.Harhan.ORG> X-SW-Source: 2000-09/msg00011.html Content-length: 1009 > Date: Mon, 4 Sep 00 16:20:16 CDT > From: msokolov@ivan.Harhan.ORG (Michael Sokolov) > gcc is bigger and has many more people interested in its > development, so Cygnus didn't take over its development and do it > behind closed doors. First they synchronised their work on it (in > their internal Cygnus tree) with the FSF maintainers. Then in late > 1997 they created an open development project for it which they > named EGCS. It was run by Cygnus and competed with FSF's gcc > project. Finally, in spring 1999 FSF closed their gcc project and > EGCS was renamed into GCC. This bit is not correct. EGCS was never 'run by' Cygnus. It has always been run by a steering committee on which Cygnus has been careful to ensure that its employees were never a majority. > Unfortunately, the GCC (former EGCS) maintainers seem to not have > grasped yet that this arrangement is troublesome and just plain > wrong. Well, I for one would like to see a combined tree. -- - Geoffrey Keating <geoffk@cygnus.com> From msokolov@ivan.Harhan.ORG Mon Sep 04 17:32:00 2000 From: msokolov@ivan.Harhan.ORG (Michael Sokolov) To: binutils@sources.redhat.com, crossgcc@sources.redhat.com, gcc@gcc.gnu.org, gdb@sources.redhat.com Subject: Re: An article about the Cygnus tree Date: Mon, 04 Sep 2000 17:32:00 -0000 Message-id: <0009050030.AA26952@ivan.Harhan.ORG> X-SW-Source: 2000-09/msg00012.html Content-length: 2238 Geoff Keating <geoffk@cygnus.com> wrote: > This bit is not correct. EGCS was never 'run by' Cygnus. It has > always been run by a steering committee on which Cygnus has been > careful to ensure that its employees were never a majority. OK, I checked this in: ------- cygnus-tree-intro ------- *** /tmp/d26930 Mon Sep 4 19:22:03 2000 --- cygnus-tree-intro Mon Sep 4 19:21:02 2000 *************** *** 45,52 **** development and do it behind closed doors. First they synchronised their work on it (in their internal Cygnus tree) with the FSF maintainers. Then in late 1997 they created an open development project for it which they named EGCS. It ! was run by Cygnus and competed with FSF's gcc project. Finally, in spring 1999 ! FSF closed their gcc project and EGCS was renamed into GCC. All these programs have been integrated into the Cygnus tree so completely that they no longer exist separately from it. Moreover, some of these programs are --- 45,52 ---- development and do it behind closed doors. First they synchronised their work on it (in their internal Cygnus tree) with the FSF maintainers. Then in late 1997 they created an open development project for it which they named EGCS. It ! was a public project and competed with FSF's gcc project. Finally, in spring ! 1999 FSF closed their gcc project and EGCS was renamed into GCC. All these programs have been integrated into the Cygnus tree so completely that they no longer exist separately from it. Moreover, some of these programs are BTW, what did EGCS stand for? > Well, I for one would like to see a combined tree. That's why I wrote: : Some of the GCC maintainers have said that they liked the idea. However, : there seems to be some politics playing against it, apparently coming from : FSF. Thus it appears that the next battle is going to be between us, : developers, and the politicians. -- Michael Sokolov Harhan Engineering Laboratory Public Service Agent International Free Computing Task Force International Engineering and Science Task Force 615 N GOOD LATIMER EXPY STE #4 DALLAS TX 75204-5852 USA Phone: +1-214-824-7693 (Harhan Eng Lab office) E-mail: msokolov@ivan.Harhan.ORG (ARPA TCP/SMTP) (UUCP coming soon) From jjenkins@jetstream.com Mon Sep 04 17:54:00 2000 From: Jeff Jenkins <jjenkins@jetstream.com> To: Jeff Jenkins <jjenkins@jetstream.com>, "'Gdb (E-mail) '" <gdb@sourceware.cygnus.com> Subject: RE: Real-Time signals & GDB Date: Mon, 04 Sep 2000 17:54:00 -0000 Message-id: <27A2DAA6CAD9D311BF970050DACB2250013E571F@mail.jetstream.com> X-SW-Source: 2000-09/msg00013.html Content-length: 1015 Sorry that I didn't include this information initally. It was the second time I posted a similar question. I am using gdb 4.18 on Solaris 7/SPARC UltraIII. When I send an RT signal to another thread in my process gdb halts and complains that it received an unknown ? signal. When I continue, it fails to deliver the signal. The signal I am typically sending is RT signal 39 or 40. Depends on the thread. I have tried using handle all to handle ALL threads...I want them delivered to my process so that I may handle them. I do have other threads in sigwaitinfo() calls waiting on RT signal 39 & 40. -- jrj -----Original Message----- From: Jeff Jenkins To: Gdb (E-mail) Sent: 9/1/00 11:17 AM Subject: Real-Time signals & GDB Anyone here know how to get GDB to properly handle RT signals? When I queue a RT signal, GDB complains that it received an unknown signal and fails to deliever it to the process. Is there something specific I need to do such that GDB will handle RT signals? Thanks! -- jrj From dje@watson.ibm.com Mon Sep 04 18:03:00 2000 From: David Edelsohn <dje@watson.ibm.com> To: msokolov@ivan.Harhan.ORG (Michael Sokolov) Cc: binutils@sources.redhat.com, crossgcc@sources.redhat.com, gcc@gcc.gnu.org, gdb@sources.redhat.com Subject: Re: An article about the Cygnus tree Date: Mon, 04 Sep 2000 18:03:00 -0000 Message-id: <200009050102.VAA23408@mal-ach.watson.ibm.com> References: <0009050030.AA26952@ivan.Harhan.ORG> X-SW-Source: 2000-09/msg00014.html Content-length: 542 I do not understand why you incorrectly insist on using such hostile and confrontational language in your description of EGCS. EGCS was a testbed for some new technology which needed a larger testing audience than the GCC development environment of the time could provide. Both the technology and the development method used by EGCS proved effective, so EGCS and GCC merged back together, incorporating all of the successes of EGCS. This is not unlike the way gcc-2 was developed and redesigned in the late 1980's and early 1990's. David From scottb@netwinder.org Mon Sep 04 18:04:00 2000 From: "Scott Bambrough" <scottb@netwinder.org> To: <gdb@sources.redhat.com> Cc: "Nick Clifton" <nickc@cygnus.com>, "Andrew Cagney" <ac131313@cygnus.com> Subject: src/ltcf-c.sh Date: Mon, 04 Sep 2000 18:04:00 -0000 Message-id: <00b201c016d5$2f8d2c00$LocalHost@netbackup> X-SW-Source: 2000-09/msg00015.html Content-length: 791 The autobuild at netwinder.org fails with the following error: /home/build-rpm/BUILD/gdb/opcodes/../ltconfig: /home/build-rpm/BUILD/gdb/opcodes/../ltcf-c.sh: No such file or directory configure: error: libtool configure failed Configure in /home/build-rpm/BUILD/obj-gdb-20000904/opcodes failed, exiting. Bad exit status from /var/tmp/rpm-tmp.88907 (%build) The problem is a cvs checkout of gdb is not updating this file. It isn't there so the build fails. I had a look at the modules file, and it is included in the alias src-support, which is included in gdb-support which is used by the gdb module. If I update my binutils tree, and my insight trees the file is not checked out, though I expect it to be. If I check it out manually by cvs co ltcf-c.sh, it works. Any ideas? Scott ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2000-09-09 14:39 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <20000901192328.A28312@valinux.com>
[not found] ` <200009041047.LAA10659@phal.cygnus.co.uk>
[not found] ` <20000904084934.A11100@lucon.org>
[not found] ` <200009041751.e84HprD11517@debye.wins.uva.nl>
[not found] ` <20000904164458.A12270@lucon.org>
[not found] ` <200009050548.BAA05890@indy.delorie.com>
2000-09-04 23:32 ` gdb doesn't work very well with dynamic linked binaries H . J . Lu
[not found] ` <200009051035.GAA06054@indy.delorie.com>
[not found] ` <200009051333.e85DXsv12272@debye.wins.uva.nl>
[not found] ` <3.0.6.32.20000906001339.00b0ae90@idefix.wisa.be>
[not found] ` <200009060608.CAA06709@indy.delorie.com>
2000-09-06 10:10 ` About unified debug register handling for i386 CPU Chris Faylor
[not found] <200009071009.e87A9oh14388@debye.wins.uva.nl>
2000-09-09 14:39 ` gdb doesn't work very well with dynamic linked binaries Peter.Schauer
2000-09-06 3:54 James Cownie
[not found] <Pine.LNX.4.21.0009041104140.3814-100000@propylaea.anduin.com>
2000-09-04 11:22 ` Ulrich Drepper
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox