aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Alcock <nick.alcock@oracle.com>2019-04-24 11:26:42 +0100
committerNick Alcock <nick.alcock@oracle.com>2019-05-28 17:08:29 +0100
commit6c33b742ce19cc2fd226d84f2991572239199a62 (patch)
treeb6ef5f9c4b2aa6d1c4a716a4e279c9d6a7222c1d
parentc499eb6896cd803d26da8c719bfac9c03e596c08 (diff)
downloadgdb-6c33b742ce19cc2fd226d84f2991572239199a62.zip
gdb-6c33b742ce19cc2fd226d84f2991572239199a62.tar.gz
gdb-6c33b742ce19cc2fd226d84f2991572239199a62.tar.bz2
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.
-rw-r--r--include/ChangeLog4
-rw-r--r--include/ctf-api.h1
-rw-r--r--libctf/ChangeLog6
-rw-r--r--libctf/ctf-impl.h1
-rw-r--r--libctf/ctf-subr.c27
5 files changed, 39 insertions, 0 deletions
diff --git a/include/ChangeLog b/include/ChangeLog
index 4be07a5..56922ad 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -1,5 +1,9 @@
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.
(ctf_func_args): Likewise.
(ctf_lookup_by_symbol): Likewise.
diff --git a/include/ctf-api.h b/include/ctf-api.h
index 045d8af..6ab754a 100644
--- a/include/ctf-api.h
+++ b/include/ctf-api.h
@@ -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 *);
diff --git a/libctf/ChangeLog b/libctf/ChangeLog
index c0c98d2..a6eb11e 100644
--- a/libctf/ChangeLog
+++ b/libctf/ChangeLog
@@ -1,5 +1,11 @@
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.
(enumadd): Likewise.
(membcmp): Likewise.
diff --git a/libctf/ctf-impl.h b/libctf/ctf-impl.h
index ff18504..363b62d 100644
--- a/libctf/ctf-impl.h
+++ b/libctf/ctf-impl.h
@@ -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
diff --git a/libctf/ctf-subr.c b/libctf/ctf-subr.c
index 3103e28..09ec295 100644
--- a/libctf/ctf-subr.c
+++ b/libctf/ctf-subr.c
@@ -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)
{