From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14512 invoked by alias); 26 Feb 2004 20:51:02 -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 14498 invoked from network); 26 Feb 2004 20:51:01 -0000 Received: from unknown (HELO localhost.redhat.com) (216.129.200.20) by sources.redhat.com with SMTP; 26 Feb 2004 20:51:01 -0000 Received: from gnu.org (localhost [127.0.0.1]) by localhost.redhat.com (Postfix) with ESMTP id 4CBA22B92; Thu, 26 Feb 2004 15:50:59 -0500 (EST) Message-ID: <403E5C33.4030007@gnu.org> Date: Thu, 26 Feb 2004 20:51:00 -0000 From: Andrew Cagney User-Agent: Mozilla/5.0 (X11; U; NetBSD macppc; en-US; rv:1.4.1) Gecko/20040217 MIME-Version: 1.0 To: Andrew Cagney Cc: Eli Zaretskii , gdb-patches@sources.redhat.com Subject: Re: [rfa:doco] mention gdbarch_obstack_zalloc in per-module data References: <402FC215.3020906@gnu.org> <3405-Mon16Feb2004112915+0200-eliz@elta.co.il> <40310850.5060500@gnu.org> In-Reply-To: <40310850.5060500@gnu.org> Content-Type: multipart/mixed; boundary="------------080704010207000106090209" X-SW-Source: 2004-02/txt/msg00775.txt.bz2 This is a multi-part message in MIME format. --------------080704010207000106090209 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-length: 867 > Yes, but... I've committed the attached. >>> +Any memory required by the @var{init} function should be allocated using >>> +@var{gdbarch_obstack_zalloc}. > > > `gdbarch_obstack_zalloc' is not a parameter, but a true literal > symbol, so it should be in @code, not in @var. > > >>> @deftypefun void set_gdbarch_data (struct gdbarch *@var{gdbarch}, struct gdbarch_data *handle, void *@var{pointer}) > > > `handle' should be in @var here, I think. > > >>> +Set the uninitialized (NULL) data-pointer corresponding to @var{handle} >>> +to the non-NULL @var{pointer} value. > > > Both `NULL's should be in @code. > > Also, is it guaranteed that uninitialized pointers have a NULL value? > In general, that's not true, but perhaps in the context of gdbarch it > is, I just don't know. I changed it to: "Set the still @code{NULL} data-pointer ..." Andrew --------------080704010207000106090209 Content-Type: text/plain; name="diffs" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="diffs" Content-length: 4609 2004-02-26 Andrew Cagney * gdbint.texinfo (Coding): Document use of gdbarch_obstack_zalloc in Per-architecture module data section. Index: gdbint.texinfo =================================================================== RCS file: /cvs/src/src/gdb/doc/gdbint.texinfo,v retrieving revision 1.189 diff -u -r1.189 gdbint.texinfo --- gdbint.texinfo 24 Feb 2004 15:41:29 -0000 1.189 +++ gdbint.texinfo 26 Feb 2004 20:48:35 -0000 @@ -4879,7 +4879,7 @@ A module registers one or more per-architecture data-pointers using the function @code{register_gdbarch_data}: -@deftypefun struct gdbarch_data *register_gdbarch_data (gdbarch_data_init_ftype *@var{init}, gdbarch_data_free_ftype *@var{free}) +@deftypefun struct gdbarch_data *register_gdbarch_data (gdbarch_data_init_ftype *@var{init}) The @var{init} function is used to obtain an initial value for a per-architecture data-pointer. The function is called, after the @@ -4888,10 +4888,9 @@ to @code{gdbarch_data}. A data-pointer can also be initialize explicitly using @code{set_gdbarch_data}. -The @var{free} function is called when a data-pointer needs to be -destroyed. This occurs when either the corresponding @code{struct -gdbarch} object is being destroyed or when @code{set_gdbarch_data} is -overriding a non-@code{NULL} data-pointer value. +Any memory required by the @var{init} function should be allocated +using @code{GDBARCH_OBSTACK_ZALLOC}. That memory is automatically +released when the corresponding architecture is deleted. The function @code{register_gdbarch_data} returns a @code{struct gdbarch_data} that is used to identify the data-pointer that was added @@ -4899,23 +4898,18 @@ @end deftypefun -A typical module has @code{init} and @code{free} functions of the form: +A typical module has an @code{init} function of the form: @smallexample +struct nozel @{ int total; @}; static struct gdbarch_data *nozel_handle; static void * nozel_init (struct gdbarch *gdbarch) @{ - struct nozel *data = XMALLOC (struct nozel); + struct nozel *data = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct nozel); @dots{} return data; @} -@dots{} -static void -nozel_free (struct gdbarch *gdbarch, void *data) -@{ - xfree (data); -@} @end smallexample Since uninitialized (@code{NULL}) data-pointers are initialized @@ -4930,7 +4924,7 @@ void _initialize_nozel (void) @{ - nozel_handle = register_gdbarch_data (nozel_init, nozel_free); + nozel_handle = register_gdbarch_data (nozel_init); @dots{} @end smallexample @@ -4958,35 +4952,37 @@ It is also possible to directly initialize the data-pointer using: -@deftypefun void set_gdbarch_data (struct gdbarch *@var{gdbarch}, struct gdbarch_data *handle, void *@var{pointer}) -Update the data-pointer corresponding to @var{handle} with the value of -@var{pointer}. If the previous data-pointer value is non-NULL, then it -is freed using data-pointers @var{free} function. +@deftypefun void set_gdbarch_data (struct gdbarch *@var{gdbarch}, struct gdbarch_data *@var{handle}, void *@var{pointer}) +Set the still @code{NULL} data-pointer corresponding to @var{handle} +to the non-@code{NULL} @var{pointer} value. @end deftypefun This function is used by modules that require a mechanism for explicitly setting the per-architecture data-pointer during architecture creation: @smallexample -/* Called during architecture creation. */ -extern void -set_gdbarch_nozel (struct gdbarch *gdbarch, - int total) -@{ - struct nozel *data = XMALLOC (struct nozel); - @dots{} - set_gdbarch_data (gdbarch, nozel_handle, nozel); +/* Always return a non-NULL nozel. */ +static struct nozel * +gdbarch_nozel (struct gdbarch *gdbarch) +@{ + struct nozel *nozel = gdbarch_data (gdbarch, nozel_handle); + if (nozel == NULL) + @{ + nozel = nozel_init (gdbarch); + set_gdbarch_data (gdbarch, nozel_handle, nozel); + @} + return nozel; @} @end smallexample @smallexample -/* Default, called when nozel not set by set_gdbarch_nozel(). */ -static void * -nozel_init (struct gdbarch *gdbarch) +/* Called during architecture creation. */ +extern void +set_gdbarch_nozel (struct gdbarch *gdbarch, int total) @{ - struct nozel *default_nozel = XMALLOC (struc nozel); + struct nozel *data = gdbarch_nozel (gdbarch); @dots{} - return default_nozel; + data->total = total; @} @end smallexample @@ -4994,7 +4990,7 @@ void _initialize_nozel (void) @{ - nozel_handle = register_gdbarch_data (nozel_init, NULL); + nozel_handle = register_gdbarch_data (nozel_init); @dots{} @end smallexample --------------080704010207000106090209--