[Pdbg] [PATCH 05/18] libpdbg: Add logging api
Alistair Popple
alistair at popple.id.au
Thu May 17 13:32:11 AEST 2018
On Thursday, 17 May 2018 12:12:46 PM AEST Amitay Isaacs wrote:
> On Wed, 2018-05-16 at 16:17 +1000, Amitay Isaacs wrote:
> > From: Amitay Isaacs <amitay at gmail.com>
> >
> > To avoid churn define short-cut macros for logging using PR_ prefix.
>
> This patch requires a small change. Will post the new patch set after
> seeing any other review comments.
Thanks Amitay. It looks pretty good to me, I like the idea of being able to set
our own logging callback.
- Alistair
> >
> > Signed-off-by: Amitay Isaacs <amitay at gmail.com>
> > ---
> > Makefile.am | 3 ++-
> > libpdbg/debug.c | 59
> > +++++++++++++++++++++++++++++++++++++++++++++++
> > libpdbg/debug.h | 32 +++++++++++++++++++++++++
> > libpdbg/libpdbg.h | 13 +++++++++++
> > 4 files changed, 106 insertions(+), 1 deletion(-)
> > create mode 100644 libpdbg/debug.c
> > create mode 100644 libpdbg/debug.h
> >
> > diff --git a/Makefile.am b/Makefile.am
> > index 6c138da..8760184 100644
> > --- a/Makefile.am
> > +++ b/Makefile.am
> > @@ -50,7 +50,8 @@ libpdbg_la_SOURCES = \
> > libpdbg/adu.c \
> > libpdbg/device.c \
> > libpdbg/target.c \
> > - libpdbg/htm.c
> > + libpdbg/htm.c \
> > + libpdbg/debug.c
> >
> > M4_V = $(M4_V_$(V))
> > M4_V_ = $(M4_V_$(AM_DEFAULT_VERBOSITY))
> > diff --git a/libpdbg/debug.c b/libpdbg/debug.c
> > new file mode 100644
> > index 0000000..99fc726
> > --- /dev/null
> > +++ b/libpdbg/debug.c
> > @@ -0,0 +1,59 @@
> > +/* Copyright 2018 IBM Corp.
> > + *
> > + * Licensed under the Apache License, Version 2.0 (the "License");
> > + * you may not use this file except in compliance with the License.
> > + * You may obtain a copy of the License at
> > + *
> > + * http://www.apache.org/licenses/LICENSE-2.0
> > + *
> > + * Unless required by applicable law or agreed to in writing,
> > software
> > + * distributed under the License is distributed on an "AS IS" BASIS,
> > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> > + * implied.
> > + * See the License for the specific language governing permissions
> > and
> > + * limitations under the License.
> > + */
> > +
> > +#include <stdio.h>
> > +#include <stdarg.h>
> > +
> > +#include "debug.h"
> > +
> > +static int pdbg_loglevel = PDBG_ERROR;
> > +
> > +static void pdbg_logfunc_default(int loglevel, const char *fmt,
> > va_list ap)
> > +{
> > + if (loglevel > pdbg_loglevel)
> > + return;
> > +
> > + vfprintf(stderr, fmt, ap);
> > +}
> > +
> > +static pdbg_log_func_t pdbg_logfunc = pdbg_logfunc_default;
> > +
> > +void pdbg_set_logfunc(pdbg_log_func_t fn)
> > +{
> > + if (fn == NULL)
> > + return;
> > +
> > + pdbg_logfunc = fn;
> > +}
> > +
> > +void pdbg_set_loglevel(int loglevel)
> > +{
> > + if (loglevel < PDBG_ERROR)
> > + pdbg_loglevel = PDBG_ERROR;
> > + else if (loglevel > PDBG_DEBUG)
> > + pdbg_loglevel = PDBG_DEBUG;
> > + else
> > + pdbg_loglevel = loglevel;
> > +}
> > +
> > +void pdbg_log(int loglevel, const char *fmt, ...)
> > +{
> > + va_list ap;
> > +
> > + va_start(ap, fmt);
> > + pdbg_logfunc(loglevel, fmt, ap);
> > + va_end(ap);
> > +}
> > diff --git a/libpdbg/debug.h b/libpdbg/debug.h
> > new file mode 100644
> > index 0000000..c318e3a
> > --- /dev/null
> > +++ b/libpdbg/debug.h
> > @@ -0,0 +1,32 @@
> > +/* Copyright 2018 IBM Corp.
> > + *
> > + * Licensed under the Apache License, Version 2.0 (the "License");
> > + * you may not use this file except in compliance with the License.
> > + * You may obtain a copy of the License at
> > + *
> > + * http://www.apache.org/licenses/LICENSE-2.0
> > + *
> > + * Unless required by applicable law or agreed to in writing,
> > software
> > + * distributed under the License is distributed on an "AS IS" BASIS,
> > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> > + * implied.
> > + * See the License for the specific language governing permissions
> > and
> > + * limitations under the License.
> > + */
> > +#ifndef __LIBPDBG_DEBUG_H
> > +#define __LIBPDBG_DEBUG_H
> > +
> > +#include "libpdbg.h"
> > +
> > +#define PR_ERROR(x, args...) \
> > + pdbg_log(PDBG_ERROR, x, ##args)
> > +#define PR_WARNING(x, args...) \
> > + pdbg_log(PDBG_WARNING, x, ##args)
> > +#define PR_NOTICE(x, args...) \
> > + pdbg_log(PDBG_NOTICE, x, ##args)
> > +#define PR_INFO(x, args...) \
> > + pdbg_log(PDBG_INFO, x, ##args)
> > +#define PR_DEBUG(x, args...) \
> > + pdbg_log(PDBG_DEBUG, "%s[%d]: " x, __FUNCTION__, __LINE__,
> > ##args)
> > +
> > +#endif
> > diff --git a/libpdbg/libpdbg.h b/libpdbg/libpdbg.h
> > index 4b053b2..0dac243 100644
> > --- a/libpdbg/libpdbg.h
> > +++ b/libpdbg/libpdbg.h
> > @@ -3,6 +3,7 @@
> >
> > #include <stdio.h>
> > #include <stdint.h>
> > +#include <stdarg.h>
> >
> > struct pdbg_target;
> > struct pdbg_target_class;
> > @@ -136,4 +137,16 @@ int adu_putmem(struct pdbg_target *target,
> > uint64_t addr, uint8_t *input, uint64
> > int opb_read(struct pdbg_target *target, uint32_t addr, uint32_t
> > *data);
> > int opb_write(struct pdbg_target *target, uint32_t addr, uint32_t
> > data);
> >
> > +#define PDBG_ERROR 0
> > +#define PDBG_WARNING 1
> > +#define PDBG_NOTICE 2
> > +#define PDBG_INFO 3
> > +#define PDBG_DEBUG 4
> > +
> > +typedef void (*pdbg_log_func_t)(int loglevel, const char *fmt,
> > va_list ap);
> > +
> > +void pdbg_set_logfunc(pdbg_log_func_t fn);
> > +void pdbg_set_loglevel(int loglevel);
> > +void pdbg_log(int loglevel, const char *fmt, ...);
> > +
> > #endif
>
> Amitay.
>
More information about the Pdbg
mailing list