libctf: library version enforcement
This old Solaris standard allows callers to specify that they are expecting one particular API and/or CTF file format from the library. libctf/ * ctf-impl.h (_libctf_version): New declaration. * ctf-subr.c (_libctf_version): Define it. (ctf_version): New. include/ * ctf-api.h (ctf_version): New.
This commit is contained in:
parent
c499eb6896
commit
6c33b742ce
|
@ -1,3 +1,7 @@
|
|||
2019-05-28 Nick Alcock <nick.alcock@oracle.com>
|
||||
|
||||
* ctf-api.h (ctf_version): New.
|
||||
|
||||
2019-05-28 Nick Alcock <nick.alcock@oracle.com>
|
||||
|
||||
* ctf-api.h (ctf_func_info): New.
|
||||
|
|
|
@ -269,6 +269,7 @@ extern void *ctf_getspecific (ctf_file_t *);
|
|||
|
||||
extern int ctf_errno (ctf_file_t *);
|
||||
extern const char *ctf_errmsg (int);
|
||||
extern int ctf_version (int);
|
||||
|
||||
extern int ctf_func_info (ctf_file_t *, unsigned long, ctf_funcinfo_t *);
|
||||
extern int ctf_func_args (ctf_file_t *, unsigned long, uint32_t, ctf_id_t *);
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
2019-05-28 Nick Alcock <nick.alcock@oracle.com>
|
||||
|
||||
* ctf-impl.h (_libctf_version): New declaration.
|
||||
* ctf-subr.c (_libctf_version): Define it.
|
||||
(ctf_version): New.
|
||||
|
||||
2019-05-28 Nick Alcock <nick.alcock@oracle.com>
|
||||
|
||||
* ctf-create.c (enumcmp): New.
|
||||
|
|
|
@ -375,6 +375,7 @@ extern const char *ctf_lookup_symbol_name (ctf_file_t *fp, unsigned long symidx)
|
|||
extern const char _CTF_SECTION[]; /* name of CTF ELF section */
|
||||
extern const char _CTF_NULLSTR[]; /* empty string */
|
||||
|
||||
extern int _libctf_version; /* library client version */
|
||||
extern int _libctf_debug; /* debugging messages enabled */
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
#include <unistd.h>
|
||||
|
||||
static size_t _PAGESIZE _libctf_unused_;
|
||||
int _libctf_version = CTF_VERSION; /* Library client version. */
|
||||
int _libctf_debug = 0; /* Debugging messages enabled. */
|
||||
|
||||
_libctf_malloc_ void *
|
||||
|
@ -190,6 +191,32 @@ ctf_strerror (int err)
|
|||
return (const char *) (strerror (err));
|
||||
}
|
||||
|
||||
/* Set the CTF library client version to the specified version. If version is
|
||||
zero, we just return the default library version number. */
|
||||
int
|
||||
ctf_version (int version)
|
||||
{
|
||||
if (version < 0)
|
||||
{
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (version > 0)
|
||||
{
|
||||
/* Dynamic version switching is not presently supported. */
|
||||
if (version != CTF_VERSION)
|
||||
{
|
||||
errno = ENOTSUP;
|
||||
return -1;
|
||||
}
|
||||
ctf_dprintf ("ctf_version: client using version %d\n", version);
|
||||
_libctf_version = version;
|
||||
}
|
||||
|
||||
return _libctf_version;
|
||||
}
|
||||
|
||||
void
|
||||
libctf_init_debug (void)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue