From: Antoni Boucher <bouanto@zoho.com>
To: David Malcolm <dmalcolm@redhat.com>,
gcc-patches@gcc.gnu.org, jit@gcc.gnu.org
Subject: Re: [PATCH] libgccjit: Add option to hide stderr logs [PR104073]
Date: Sun, 23 Jan 2022 12:34:45 -0500 [thread overview]
Message-ID: <d5ebba03070f184e7256b9567573beeddb019d97.camel@zoho.com> (raw)
In-Reply-To: <0138b8a2502e17b43b66915015147ec9f9594ff4.camel@redhat.com>
[-- Attachment #1: Type: text/plain, Size: 1958 bytes --]
Thanks for the review.
Here's the updated patch.
Le mardi 18 janvier 2022 à 18:22 -0500, David Malcolm a écrit :
> On Mon, 2022-01-17 at 21:02 -0500, Antoni Boucher via Gcc-patches
> wrote:
> > Hi.
> > This option will be useful for rustc_codegen_gcc to hide the error
> > about unsupported 128-bit integer types.
> >
> > David, if you know of a better way to check if these types are
> > supported than creating such a type and checking if it causes an
> > error,
> > I will not need this patch.
>
> Off the top of my head I don't know of such a way.
>
> That said, this seems to be vaguely analogous to a test in a
> "configure" script, attempting a compile and seeing if it succeeds.
>
> This seems like a useful pattern for libgccjit to support, so that
> client code can query the capabilities of the host, so I think the
> idea
> of this patch is sound.
>
> As for the details of the patch, I don't like adding new members to
> the
> enums in libgccjit.h; I prefer adding new entrypoints, as the latter
> gives a way to tell if client code uses the new entrypoint as part of
> the ELF metadata, so that we can tell directly that client code is
> incompatible with an older libgccjit.so from the symbol metadata in
> the
> built binary.
>
> So I'd prefer something like:
>
> extern void
> gcc_jit_context_set_bool_print_errors_to_stderr (gcc_jit_context
> *ctxt,
> int enabled);
>
> where gcc_jit_context_set_bool_print_errors_to_stderr defaults to
> true,
> but client code can use:
>
> gcc_jit_context_set_bool_print_errors_to_stderr (ctxt, false);
>
> Or maybe have a way to specify the FILE * for errors to be printed
> to,
> defaulting to stderr, but settable to NULL if you want to suppress
> the
> printing? That might be more flexible.
>
> Thoughts?
> Dave
>
[-- Attachment #2: 0001-libgccjit-Add-function-to-hide-stderr-logs-PR104073.patch --]
[-- Type: text/x-patch, Size: 7508 bytes --]
From 1f1b7d2298956268e2678a157a34c8f9ac370f3a Mon Sep 17 00:00:00 2001
From: Antoni Boucher <bouanto@zoho.com>
Date: Sun, 23 Jan 2022 11:37:07 -0500
Subject: [PATCH] libgccjit: Add function to hide stderr logs [PR104073]
2022-01-23 Antoni Boucher <bouanto@zoho.com
gcc/jit/
PR jit/104073
* docs/topics/compatibility.rst (LIBGCCJIT_ABI_23): New ABI tag.
* docs/topics/contexts.rst: Add documentation for the new
function gcc_jit_context_set_bool_print_errors_to_stderr.
* jit-common.h: New enum value
(INNER_BOOL_OPTION_PRINT_ERRORS_TO_STDERR).
* jit-recording.cc: Handle the new option
INNER_BOOL_OPTION_PRINT_ERRORS_TO_STDERR.
* libgccjit.cc: New function
(gcc_jit_context_set_bool_print_errors_to_stderr).
* libgccjit.h: New function
(gcc_jit_context_set_bool_print_errors_to_stderr).
* libgccjit.map (LIBGCCJIT_ABI_23): New ABI tag.
---
gcc/jit/docs/topics/compatibility.rst | 9 +++++++++
gcc/jit/docs/topics/contexts.rst | 15 +++++++++++++++
gcc/jit/jit-common.h | 1 +
gcc/jit/jit-recording.cc | 27 +++++++++++++++++----------
gcc/jit/libgccjit.cc | 17 +++++++++++++++++
gcc/jit/libgccjit.h | 18 ++++++++++++++++++
gcc/jit/libgccjit.map | 14 ++++++++++++++
7 files changed, 91 insertions(+), 10 deletions(-)
diff --git a/gcc/jit/docs/topics/compatibility.rst b/gcc/jit/docs/topics/compatibility.rst
index 16cebe31a10..d4b0ccd98ff 100644
--- a/gcc/jit/docs/topics/compatibility.rst
+++ b/gcc/jit/docs/topics/compatibility.rst
@@ -302,3 +302,12 @@ thread-local storage model of a variable:
section of a variable:
* :func:`gcc_jit_lvalue_set_link_section`
+
+.. _LIBGCCJIT_ABI_23:
+
+``LIBGCCJIT_ABI_23``
+-----------------------
+``LIBGCCJIT_ABI_23`` covers the addition of an API entrypoint to hide stderr
+logs:
+
+ * :func:`gcc_jit_context_set_bool_print_errors_to_stderr`
diff --git a/gcc/jit/docs/topics/contexts.rst b/gcc/jit/docs/topics/contexts.rst
index 68ab7ab1321..00b45262fda 100644
--- a/gcc/jit/docs/topics/contexts.rst
+++ b/gcc/jit/docs/topics/contexts.rst
@@ -489,6 +489,21 @@ Boolean options
#ifdef LIBGCCJIT_HAVE_gcc_jit_context_set_bool_use_external_driver
+.. function:: void \
+ gcc_jit_context_set_bool_print_errors_to_stderr (gcc_jit_context *ctxt, \
+ int enabled)
+
+ By default, libgccjit will print errors to stderr.
+
+ This entrypoint can be used to disable the printing.
+
+ This entrypoint was added in :ref:`LIBGCCJIT_ABI_23`; you can test for
+ its presence using
+
+ .. code-block:: c
+
+ #ifdef LIBGCCJIT_HAVE_gcc_jit_context_set_bool_print_errors_to_stderr
+
Integer options
***************
diff --git a/gcc/jit/jit-common.h b/gcc/jit/jit-common.h
index 1a8cd8bac7b..c3a0b6765c0 100644
--- a/gcc/jit/jit-common.h
+++ b/gcc/jit/jit-common.h
@@ -198,6 +198,7 @@ enum inner_bool_option
{
INNER_BOOL_OPTION_ALLOW_UNREACHABLE_BLOCKS,
INNER_BOOL_OPTION_USE_EXTERNAL_DRIVER,
+ INNER_BOOL_OPTION_PRINT_ERRORS_TO_STDERR,
NUM_INNER_BOOL_OPTIONS
};
diff --git a/gcc/jit/jit-recording.cc b/gcc/jit/jit-recording.cc
index 1e3fadfacd7..36d962ea391 100644
--- a/gcc/jit/jit-recording.cc
+++ b/gcc/jit/jit-recording.cc
@@ -592,6 +592,7 @@ recording::context::context (context *parent_ctxt)
memset (m_int_options, 0, sizeof (m_int_options));
memset (m_bool_options, 0, sizeof (m_bool_options));
memset (m_inner_bool_options, 0, sizeof (m_inner_bool_options));
+ m_inner_bool_options[INNER_BOOL_OPTION_PRINT_ERRORS_TO_STDERR] = true;
}
memset (m_basic_types, 0, sizeof (m_basic_types));
@@ -1551,15 +1552,20 @@ recording::context::add_error_va (location *loc, const char *fmt, va_list ap)
if (!ctxt_progname)
ctxt_progname = "libgccjit.so";
- if (loc)
- fprintf (stderr, "%s: %s: error: %s\n",
- ctxt_progname,
- loc->get_debug_string (),
- errmsg);
- else
- fprintf (stderr, "%s: error: %s\n",
- ctxt_progname,
- errmsg);
+ bool print_errors_to_stderr =
+ get_inner_bool_option (INNER_BOOL_OPTION_PRINT_ERRORS_TO_STDERR);
+ if (print_errors_to_stderr)
+ {
+ if (loc)
+ fprintf (stderr, "%s: %s: error: %s\n",
+ ctxt_progname,
+ loc->get_debug_string (),
+ errmsg);
+ else
+ fprintf (stderr, "%s: error: %s\n",
+ ctxt_progname,
+ errmsg);
+ }
if (!m_error_count)
{
@@ -1687,7 +1693,8 @@ static const char * const
static const char * const
inner_bool_option_reproducer_strings[NUM_INNER_BOOL_OPTIONS] = {
"gcc_jit_context_set_bool_allow_unreachable_blocks",
- "gcc_jit_context_set_bool_use_external_driver"
+ "gcc_jit_context_set_bool_use_external_driver",
+ "gcc_jit_context_set_bool_print_errors_to_stderr",
};
/* Write the current value of all options to the log file (if any). */
diff --git a/gcc/jit/libgccjit.cc b/gcc/jit/libgccjit.cc
index 4c352e8c93d..778f8e926a2 100644
--- a/gcc/jit/libgccjit.cc
+++ b/gcc/jit/libgccjit.cc
@@ -3431,6 +3431,23 @@ gcc_jit_context_set_bool_allow_unreachable_blocks (gcc_jit_context *ctxt,
bool_value);
}
+/* Public entrypoint. See description in libgccjit.h.
+
+ After error-checking, the real work is done by the
+ gcc::jit::recording::context::set_inner_bool_option method in
+ jit-recording.cc. */
+
+void
+gcc_jit_context_set_bool_print_errors_to_stderr (gcc_jit_context *ctxt,
+ int enabled)
+{
+ RETURN_IF_FAIL (ctxt, NULL, NULL, "NULL context");
+ JIT_LOG_FUNC (ctxt->get_logger ());
+ ctxt->set_inner_bool_option (
+ gcc::jit::INNER_BOOL_OPTION_PRINT_ERRORS_TO_STDERR,
+ enabled);
+}
+
/* Public entrypoint. See description in libgccjit.h.
After error-checking, the real work is done by the
diff --git a/gcc/jit/libgccjit.h b/gcc/jit/libgccjit.h
index 2a5ffacb1fe..16b8637dd0a 100644
--- a/gcc/jit/libgccjit.h
+++ b/gcc/jit/libgccjit.h
@@ -293,6 +293,24 @@ gcc_jit_context_set_bool_allow_unreachable_blocks (gcc_jit_context *ctxt,
tested for with #ifdef. */
#define LIBGCCJIT_HAVE_gcc_jit_context_set_bool_allow_unreachable_blocks
+/* By default, libgccjit will print errors to stderr.
+
+ This option can be used to disable the printing.
+
+ This entrypoint was added in LIBGCCJIT_ABI_23; you can test for
+ its presence using
+ #ifdef LIBGCCJIT_HAVE_gcc_jit_context_set_bool_print_errors_to_stderr
+*/
+
+extern void
+gcc_jit_context_set_bool_print_errors_to_stderr (gcc_jit_context *ctxt,
+ int enabled);
+
+/* Pre-canned feature macro to indicate the presence of
+ gcc_jit_context_set_bool_allow_unreachable_blocks. This can be
+ tested for with #ifdef. */
+#define LIBGCCJIT_HAVE_gcc_jit_context_set_bool_print_errors_to_stderr
+
/* Implementation detail:
libgccjit internally generates assembler, and uses "driver" code
for converting it to other formats (e.g. shared libraries).
diff --git a/gcc/jit/libgccjit.map b/gcc/jit/libgccjit.map
index f373fd39ac7..aa161b438c8 100644
--- a/gcc/jit/libgccjit.map
+++ b/gcc/jit/libgccjit.map
@@ -243,3 +243,17 @@ LIBGCCJIT_ABI_19 {
gcc_jit_context_new_union_constructor;
gcc_jit_global_set_initializer_rvalue;
} LIBGCCJIT_ABI_18;
+
+LIBGCCJIT_ABI_20 {
+} LIBGCCJIT_ABI_19;
+
+LIBGCCJIT_ABI_21 {
+} LIBGCCJIT_ABI_20;
+
+LIBGCCJIT_ABI_22 {
+} LIBGCCJIT_ABI_21;
+
+LIBGCCJIT_ABI_23 {
+ global:
+ gcc_jit_context_set_bool_print_errors_to_stderr;
+} LIBGCCJIT_ABI_22;
--
2.26.2.7.g19db9cfb68.dirty
next prev parent reply other threads:[~2022-01-23 17:34 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-18 2:02 Antoni Boucher
2022-01-18 23:22 ` David Malcolm
2022-01-23 17:34 ` Antoni Boucher [this message]
2022-01-24 22:55 ` David Malcolm
2022-04-12 21:48 ` David Malcolm
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=d5ebba03070f184e7256b9567573beeddb019d97.camel@zoho.com \
--to=bouanto@zoho.com \
--cc=dmalcolm@redhat.com \
--cc=gcc-patches@gcc.gnu.org \
--cc=jit@gcc.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).