From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28811 invoked by alias); 15 Feb 2004 19:01:50 -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 28798 invoked from network); 15 Feb 2004 19:01:46 -0000 Received: from unknown (HELO localhost.redhat.com) (24.157.170.238) by sources.redhat.com with SMTP; 15 Feb 2004 19:01:46 -0000 Received: from gnu.org (localhost [127.0.0.1]) by localhost.redhat.com (Postfix) with ESMTP id 6B2FE2B97; Sun, 15 Feb 2004 14:01:41 -0500 (EST) Message-ID: <402FC215.3020906@gnu.org> Date: Sun, 15 Feb 2004 19:01:00 -0000 From: Andrew Cagney User-Agent: Mozilla/5.0 (X11; U; NetBSD macppc; en-US; rv:1.0.2) Gecko/20030820 MIME-Version: 1.0 To: gdb-patches@sources.redhat.com Subject: [rfa:doco] mention gdbarch_obstack_zalloc in per-module data Content-Type: multipart/mixed; boundary="------------010805020500010207020304" X-SW-Source: 2004-02/txt/msg00381.txt.bz2 This is a multi-part message in MIME format. --------------010805020500010207020304 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-length: 86 Per my e-mail to markk, this updates the doco to reflect current reality. ok? Andrew --------------010805020500010207020304 Content-Type: text/plain; name="diffs" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="diffs" Content-length: 4479 2004-02-15 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.186 diff -u -r1.186 gdbint.texinfo --- gdbint.texinfo 14 Feb 2004 17:01:01 -0000 1.186 +++ gdbint.texinfo 15 Feb 2004 19:00:04 -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 +@var{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 @@ -4959,34 +4953,36 @@ 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. +Set the uninitialized (NULL) data-pointer corresponding to @var{handle} +to the non-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 --------------010805020500010207020304--