From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 23591 invoked by alias); 4 Dec 2004 12:42:19 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 23071 invoked from network); 4 Dec 2004 12:41:49 -0000 Received: from unknown (HELO legolas.inter.net.il) (192.114.186.24) by sourceware.org with SMTP; 4 Dec 2004 12:41:49 -0000 Received: from zaretski (pns03-205-134.inter.net.il [80.230.205.134]) by legolas.inter.net.il (MOS 3.5.5-GR) with ESMTP id DGK86505 (AUTH halo1); Sat, 4 Dec 2004 14:41:04 +0200 (IST) Date: Sat, 04 Dec 2004 13:36:00 -0000 From: "Eli Zaretskii" To: Mark Kettenis Message-ID: <01c4d9fe$Blat.v2.2.2$30abc2e0@zahav.net.il> Content-Transfer-Encoding: 7BIT Content-Type: text/plain; charset=ISO-8859-1 CC: gdb-patches@sources.redhat.com In-reply-to: <200412032224.iB3MOqUr021181@elgar.sibelius.xs4all.nl> (message from Mark Kettenis on Fri, 3 Dec 2004 23:24:52 +0100 (CET)) Subject: Re: [COMMIT] Hardware watchpoints for new inf-ttrace.c module Reply-to: Eli Zaretskii References: <200412032224.iB3MOqUr021181@elgar.sibelius.xs4all.nl> X-SW-Source: 2004-12/txt/msg00107.txt.bz2 > Date: Fri, 3 Dec 2004 23:24:52 +0100 (CET) > From: Mark Kettenis > > Virtually all of the HP-UX-specific handling is moved within this > module, so I expect that whenever we switch, quite a few ugly hacks > can go. It would be good to have a short description of this machinery in gdbint.texinfo. Right now, it describes only the x86 way of implementing hardware-assisted watchpoints. > +/* Add the page at address ADDR for process PID to the dictionary. */ > [...] > +/* Insert the page at address ADDR of process PID to the dictionary. */ > + > +static void > +inf_ttrace_insert_page (pid_t pid, CORE_ADDR addr) > +{ > + struct inf_ttrace_page *page; > + > + page = inf_ttrace_get_page (pid, addr); > + if (!page) > + page = inf_ttrace_add_page (pid, addr); > + > + page->refcount++; > +} Hmmm... wouldn't it be better to have just one function that adds an address's page to the dictionary? Or do you see a situation where a call to inf_ttrace_add_page will not be immediately followed by incrementing page->refcount? I generally find it undesirable to have two or more functions whose names and purpose comments are synonyms ("add page" and "insert page"). It is confusing for a programmer who needs to use the functionality, and usually forces to read the code to understand how to DTRT. > +static int > +inf_ttrace_can_use_hw_breakpoint (int type, int len, int ot) > +{ > + return (type == bp_hardware_watchpoint); > +} I was going to ask why not try to support rwatch and awatch, but then I realized that you cannot implement target_stopped_data_address, and that in turn made it clear that gdbint.texinfo is inaccurate when it describes the watchpoint-related primitives. I will fix the manual shortly. > +static int > +inf_ttrace_region_size_ok_for_hw_watchpoint (int len) > +{ > + return 1; > +} Hmmm... I have a minor issue with this. Inserting a watchpoint might mean that you need to add a page to the dictionary, which in turn could fail because there's not enough memory available to GDB. You add a page by using xmalloc, so if there isn't enough memory, GDB will exit. Isn't it better to fail the watchpoint insertion in that case rather than abort the entire session? I realize that inf_ttrace_region_size_ok_for_hw_watchpoint is probably not the place where such a situation should be handled, but perhaps inf_ttrace_add_page or inf_ttrace_insert_watchpoint should be modified to do that?