|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 01/11] tools/libs/toollog: Provide a default logger
On 08/11/18 17:07, Ian Jackson wrote:
> This is most conveniently done like this because xtl_logger_stdio.c
> knows how to provide a static logger without doing any memory
> allocations. That's useful because it can't fail.
>
> Add the new symbol to the map file and bump the minor version
> accordingly.
>
> Signed-off-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
> CC: Wei Liu <wei.liu2@xxxxxxxxxx>
> ---
> v2: New in this version of the series
> ---
> tools/libs/toollog/Makefile | 2 +-
> tools/libs/toollog/include/xentoollog.h | 5 +++++
> tools/libs/toollog/libxentoollog.map | 5 +++++
> tools/libs/toollog/xtl_logger_stdio.c | 26 ++++++++++++++++++++++++++
> 4 files changed, 37 insertions(+), 1 deletion(-)
>
> diff --git a/tools/libs/toollog/Makefile b/tools/libs/toollog/Makefile
> index 8aae2c8f53..3aa0997757 100644
> --- a/tools/libs/toollog/Makefile
> +++ b/tools/libs/toollog/Makefile
> @@ -2,7 +2,7 @@ XEN_ROOT = $(CURDIR)/../../..
> include $(XEN_ROOT)/tools/Rules.mk
>
> MAJOR = 1
> -MINOR = 0
> +MINOR = 1
> SHLIB_LDFLAGS += -Wl,--version-script=libxentoollog.map
>
> CFLAGS += -Werror -Wmissing-prototypes
> diff --git a/tools/libs/toollog/include/xentoollog.h
> b/tools/libs/toollog/include/xentoollog.h
> index 76f17fe125..942eb76169 100644
> --- a/tools/libs/toollog/include/xentoollog.h
> +++ b/tools/libs/toollog/include/xentoollog.h
> @@ -86,6 +86,11 @@ void
> xtl_stdiostream_adjust_flags(xentoollog_logger_stdiostream*,
> void xtl_logger_destroy(struct xentoollog_logger *logger /* 0 is ok */);
>
>
> +xentoollog_logger_stdiostream *xtl_defaultlogger_stdiostream(void);
> + /* Returns pointer to a static global logger which writes to stderr.
> + * Reconfiguring it is permitted but destroying it is forbidden.
> + * This function cannot fail. */
> +
> /*---------- facilities for generating log messages ----------*/
>
> void xtl_logv(struct xentoollog_logger *logger,
> diff --git a/tools/libs/toollog/libxentoollog.map
> b/tools/libs/toollog/libxentoollog.map
> index c183cf555d..00eaacaeaf 100644
> --- a/tools/libs/toollog/libxentoollog.map
> +++ b/tools/libs/toollog/libxentoollog.map
> @@ -10,3 +10,8 @@ VERS_1.0 {
> xtl_stdiostream_set_minlevel;
> local: *; /* Do not expose anything by default */
> };
> +
> +VERS_1.1 {
> + global:
> + xtl_defaultlogger_stdiostream;
> +} VERS_1.0;
> diff --git a/tools/libs/toollog/xtl_logger_stdio.c
> b/tools/libs/toollog/xtl_logger_stdio.c
> index 52dfbf51e3..07fe355626 100644
> --- a/tools/libs/toollog/xtl_logger_stdio.c
> +++ b/tools/libs/toollog/xtl_logger_stdio.c
> @@ -28,6 +28,7 @@
> #include <stdlib.h>
> #include <errno.h>
> #include <stdbool.h>
> +#include <pthread.h>
>
> struct xentoollog_logger_stdiostream {
> xentoollog_logger vtable;
> @@ -191,6 +192,31 @@ xentoollog_logger_stdiostream
> *xtl_createlogger_stdiostream
> return XTL_NEW_LOGGER(stdiostream, newlogger);
> }
>
> +xentoollog_logger_stdiostream *xtl_defaultlogger_stdiostream(void) {
> + static xentoollog_logger_stdiostream deflogger = {
> + .vtable = {
> + .vmessage = stdiostream_vmessage,
> + .progress = stdiostream_progress,
> + .destroy = 0, /* no-one should destroy this */
> + },
> + .min_level = XTL_PROGRESS,
> + /* for other fields except .f, 0 is good */
> + };
> +
> + /*
> + * Unfortunately, stderr is not a `constant expression', so we
> + * can't handle it in the initialisation. Also we can't do a
> + * lockless assignment, even of the identical value, without
> + * violating threading rules. Nnng.
You want something like:
static xentoollog_logger_stdiostream stdio_logger = {
.vtable = {
.vmessage = stdiostream_vmessage,
.progress = stdiostream_progress,
.destroy = 0, /* no-one should destroy this */
},
.min_level = XTL_PROGRESS,
/* for other fields except .f, 0 is good */
};
static void __attribute__((__constructor__)) init_stdio_logger(void)
{
stdio_logger.f = stderr;
}
Which will cause the library loader to DTRT, but not require you to link
against pthread (which is a latent bug here, as you didn't update the
SHDEPS).
~Andrew
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |