From patchwork Tue Oct 27 01:29:32 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Simon Marchi X-Patchwork-Id: 9391 Received: (qmail 101176 invoked by alias); 27 Oct 2015 01:30:06 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 101162 invoked by uid 89); 27 Oct 2015 01:30:05 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.8 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-qg0-f67.google.com Received: from mail-qg0-f67.google.com (HELO mail-qg0-f67.google.com) (209.85.192.67) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Tue, 27 Oct 2015 01:30:04 +0000 Received: by qgeo38 with SMTP id o38so14695342qge.1 for ; Mon, 26 Oct 2015 18:30:01 -0700 (PDT) X-Received: by 10.140.95.53 with SMTP id h50mr46600210qge.8.1445909401745; Mon, 26 Oct 2015 18:30:01 -0700 (PDT) MIME-Version: 1.0 Received: by 10.55.75.66 with HTTP; Mon, 26 Oct 2015 18:29:32 -0700 (PDT) In-Reply-To: References: <1445831204-16588-1-git-send-email-simon.marchi@polymtl.ca> <1445831204-16588-5-git-send-email-simon.marchi@polymtl.ca> From: Simon Marchi Date: Mon, 26 Oct 2015 21:29:32 -0400 Message-ID: Subject: Re: [PATCH c++ 05/12] guile: Constify gdbscm_with_guile return value To: Doug Evans Cc: gdb-patches@sourceware.org On 26 October 2015 at 12:21, Doug Evans wrote: > The function comment for gdbscm_with_guile says: > > /* A wrapper around scm_with_guile that prints backtraces and exceptions > according to "set guile print-stack". > The result if NULL if no exception occurred, otherwise it is a statically > allocated error message (caller must *not* free). */ > > If we're going to return an error message, > why make it a void * and not a char * (const as appropriate)? > > The lower level guile API uses a void * because it doesn't specify what > the result is. But in this use of it we do specify what the result is. It totally makes sense. Here is the updated patch (probably garbled by gmail, sorry about that): From 2defdf7de52146ea7508d0dda2f0c59e7fdd42fe Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Sun, 25 Oct 2015 23:46:37 -0400 Subject: [PATCH] guile: Change return value of gdbscm_with_guile for const char * MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The documentation of gdbscm_with_guile says that it returns a statically allocated string (IOW, a const char *). We can reflect that in its return value type, and get rid of C++ build errors. Initially fixes: /home/simark/src/binutils-gdb/gdb/guile/scm-disasm.c: In function ‘void* gdbscm_disasm_read_memory_worker(void*)’: /home/simark/src/binutils-gdb/gdb/guile/scm-disasm.c:93:12: error: invalid conversion from ‘const void*’ to ‘void*’ [-fpermissive] return "seek error"; gdb/ChangeLog: * guile/guile-internal.h (gdbscm_with_guile): Change return types to const char *. * guile/scm-safe-call.c (gdbscm_with_guile): Likewise. (struct c_data) : Likewise. (struct c_data) : Change type to const char *. (scscm_eval_scheme_string): Change return type to const char *. (scscm_source_scheme_script): Likewise. (gdbscm_safe_eval_string): Change type of result variable to const char * and remove cast. (gdbscm_safe_source_script): Likewise. * guile/scm-disasm.c (gdbscm_disasm_read_memory_worker): Change return type to const char *. (gdbscm_disasm_read_memory): Change type of status to const char *. --- gdb/guile/guile-internal.h | 2 +- gdb/guile/scm-disasm.c | 4 ++-- gdb/guile/scm-safe-call.c | 20 ++++++++++---------- 3 files changed, 13 insertions(+), 13 deletions(-) const char *filename = (const char *) data; @@ -439,7 +439,7 @@ gdbscm_safe_source_script (const char *filename) by default. This function is invoked by the "source" GDB command which already has its own path search support. */ char *abs_filename = NULL; - void *result; + const char *result; if (!IS_ABSOLUTE_PATH (filename)) { @@ -452,7 +452,7 @@ gdbscm_safe_source_script (const char *filename) xfree (abs_filename); if (result != NULL) - return xstrdup ((char *) result); + return xstrdup (result); return NULL; } diff --git a/gdb/guile/guile-internal.h b/gdb/guile/guile-internal.h index 017309a..ebf40eb 100644 --- a/gdb/guile/guile-internal.h +++ b/gdb/guile/guile-internal.h @@ -384,7 +384,7 @@ extern void gdbscm_memory_error (const char *subr, const char *msg, SCM args) /* scm-safe-call.c */ -extern void *gdbscm_with_guile (void *(*func) (void *), void *data); +extern const char *gdbscm_with_guile (const char *(*func) (void *), void *data); extern SCM gdbscm_call_guile (SCM (*func) (void *), void *data, excp_matcher_func *ok_excps); diff --git a/gdb/guile/scm-disasm.c b/gdb/guile/scm-disasm.c index 18e1713..0cc2f84 100644 --- a/gdb/guile/scm-disasm.c +++ b/gdb/guile/scm-disasm.c @@ -76,7 +76,7 @@ dascm_make_insn (CORE_ADDR pc, const char *assembly, int insn_len) Scheme port. Called via gdbscm_call_guile. The result is a statically allocated error message or NULL if success. */ -static void * +static const char * gdbscm_disasm_read_memory_worker (void *datap) { struct gdbscm_disasm_read_data *data @@ -109,7 +109,7 @@ gdbscm_disasm_read_memory (bfd_vma memaddr, bfd_byte *myaddr, struct disassemble_info *dinfo) { struct gdbscm_disasm_read_data data; - void *status; + const char *status; data.memaddr = memaddr; data.myaddr = myaddr; diff --git a/gdb/guile/scm-safe-call.c b/gdb/guile/scm-safe-call.c index 62aec0f..4e24134 100644 --- a/gdb/guile/scm-safe-call.c +++ b/gdb/guile/scm-safe-call.c @@ -28,10 +28,10 @@ struct c_data { - void *(*func) (void *); + const char *(*func) (void *); void *data; /* An error message or NULL for success. */ - void *result; + const char *result; }; /* Struct to marshall args through gdbscm_with_catch. */ @@ -167,8 +167,8 @@ gdbscm_with_catch (void *data) The result if NULL if no exception occurred, otherwise it is a statically allocated error message (caller must *not* free). */ -void * -gdbscm_with_guile (void *(*func) (void *), void *data) +const char * +gdbscm_with_guile (const char *(*func) (void *), void *data) { struct c_data c_data; struct with_catch_data catch_data; @@ -369,7 +369,7 @@ struct eval_scheme_string_data /* Wrapper to eval a C string in the Guile interpreter. This is passed to gdbscm_with_guile. */ -static void * +static const char * scscm_eval_scheme_string (void *datap) { struct eval_scheme_string_data *data @@ -398,12 +398,12 @@ char * gdbscm_safe_eval_string (const char *string, int display_result) { struct eval_scheme_string_data data = { string, display_result }; - void *result; + const char *result; result = gdbscm_with_guile (scscm_eval_scheme_string, (void *) &data); if (result != NULL) - return xstrdup ((char *) result); + return xstrdup (result); return NULL; } @@ -411,7 +411,7 @@ gdbscm_safe_eval_string (const char *string, int display_result) /* Helper function for gdbscm_safe_source_scheme_script. */ -static void * +static const char * scscm_source_scheme_script (void *data) {