summaryrefslogtreecommitdiff
path: root/usr/src/lib/libdemangle
diff options
context:
space:
mode:
authorJohn Levon <john.levon@joyent.com>2020-04-01 14:58:25 +0100
committerGitHub <noreply@github.com>2020-04-01 14:58:25 +0100
commita4a43b983024104a82e95c2647b94f767d62a8eb (patch)
tree57ccba9faa7b25da0ab082799ac1d41fe9447caa /usr/src/lib/libdemangle
parent280f87530631a519eb45e763050d2e0b3e55d499 (diff)
parentf559d4b8282f7f6a9c3e1546000352c62e12481a (diff)
downloadillumos-joyent-OS-8148.tar.gz
Merge branch 'master' into OS-8148OS-8148
Diffstat (limited to 'usr/src/lib/libdemangle')
-rw-r--r--usr/src/lib/libdemangle/common/demangle-sys.h3
-rw-r--r--usr/src/lib/libdemangle/common/demangle.c40
-rw-r--r--usr/src/lib/libdemangle/common/mapfile-vers2
3 files changed, 35 insertions, 10 deletions
diff --git a/usr/src/lib/libdemangle/common/demangle-sys.h b/usr/src/lib/libdemangle/common/demangle-sys.h
index 05776ee5ee..3452d39667 100644
--- a/usr/src/lib/libdemangle/common/demangle-sys.h
+++ b/usr/src/lib/libdemangle/common/demangle-sys.h
@@ -11,7 +11,7 @@
/*
* Copyright 2017 Jason King
- * Copyright 2018, Joyent, Inc.
+ * Copyright 2019 Joyent, Inc.
*/
#ifndef _DEMANGLE_SYS_H
@@ -34,6 +34,7 @@ typedef struct sysdem_alloc_s {
void (*free)(void *, size_t);
} sysdem_ops_t;
+boolean_t sysdem_parse_lang(const char *, sysdem_lang_t *);
char *sysdemangle(const char *, sysdem_lang_t, sysdem_ops_t *);
#ifdef __cplusplus
diff --git a/usr/src/lib/libdemangle/common/demangle.c b/usr/src/lib/libdemangle/common/demangle.c
index 4f8e9ad678..b6db356416 100644
--- a/usr/src/lib/libdemangle/common/demangle.c
+++ b/usr/src/lib/libdemangle/common/demangle.c
@@ -21,6 +21,7 @@
#include <pthread.h>
#include <sys/ctype.h>
#include <sys/debug.h>
+#include <sys/sysmacros.h>
#include <stdarg.h>
#include "demangle-sys.h"
#include "demangle_int.h"
@@ -31,19 +32,40 @@ static pthread_once_t debug_once = PTHREAD_ONCE_INIT;
volatile boolean_t demangle_debug;
FILE *debugf = stderr;
+static struct {
+ const char *str;
+ sysdem_lang_t lang;
+} lang_tbl[] = {
+ { "auto", SYSDEM_LANG_AUTO },
+ { "c++", SYSDEM_LANG_CPP },
+ { "rust", SYSDEM_LANG_RUST },
+};
+
static const char *
langstr(sysdem_lang_t lang)
{
- switch (lang) {
- case SYSDEM_LANG_AUTO:
- return ("auto");
- case SYSDEM_LANG_CPP:
- return ("c++");
- case SYSDEM_LANG_RUST:
- return ("rust");
- default:
- return ("invalid");
+ size_t i;
+
+ for (i = 0; i < ARRAY_SIZE(lang_tbl); i++) {
+ if (lang == lang_tbl[i].lang)
+ return (lang_tbl[i].str);
}
+ return ("invalid");
+}
+
+boolean_t
+sysdem_parse_lang(const char *str, sysdem_lang_t *langp)
+{
+ size_t i;
+
+ for (i = 0; i < ARRAY_SIZE(lang_tbl); i++) {
+ if (strcmp(str, lang_tbl[i].str) == 0) {
+ *langp = lang_tbl[i].lang;
+ return (B_TRUE);
+ }
+ }
+
+ return (B_FALSE);
}
static sysdem_lang_t
diff --git a/usr/src/lib/libdemangle/common/mapfile-vers b/usr/src/lib/libdemangle/common/mapfile-vers
index 48c11ef0d7..2207547185 100644
--- a/usr/src/lib/libdemangle/common/mapfile-vers
+++ b/usr/src/lib/libdemangle/common/mapfile-vers
@@ -11,6 +11,7 @@
#
# Copyright 2017 Jason King
+# Copyright 2019 Joyent, Inc.
#
#
@@ -30,6 +31,7 @@ $mapfile_version 2
SYMBOL_VERSION ILLUMOSprivate {
global:
+ sysdem_parse_lang;
sysdemangle;
local:
*;