*/
#include <babeltrace/babeltrace-internal.h>
+#include <babeltrace/plugin/plugin.h>
#include <babeltrace/plugin/plugin-dev.h>
#include <babeltrace/object-internal.h>
#include <babeltrace/types.h>
GPtrArray *plugins;
};
+static inline
+const char *bt_plugin_status_string(enum bt_plugin_status status)
+{
+ switch (status) {
+ case BT_PLUGIN_STATUS_OK:
+ return "BT_PLUGIN_STATUS_OK";
+ case BT_PLUGIN_STATUS_ERROR:
+ return "BT_PLUGIN_STATUS_ERROR";
+ case BT_PLUGIN_STATUS_NOMEM:
+ return "BT_PLUGIN_STATUS_NOMEM";
+ default:
+ return "(unknown)";
+ }
+}
+
+static inline
+const char *bt_plugin_type_string(enum bt_plugin_type type)
+{
+ switch (type) {
+ case BT_PLUGIN_TYPE_SO:
+ return "BT_PLUGIN_TYPE_SO";
+ case BT_PLUGIN_TYPE_PYTHON:
+ return "BT_PLUGIN_TYPE_PYTHON";
+ default:
+ return "(unknown)";
+ }
+}
+
static inline
void bt_plugin_destroy(struct bt_object *obj)
{
assert(obj);
plugin = container_of(obj, struct bt_plugin, base);
+ BT_LOGD("Destroying plugin object: addr=%p, name=\"%s\"",
+ plugin, plugin->info.name ? plugin->info.name->str : NULL);
if (plugin->destroy_spec_data) {
plugin->destroy_spec_data(plugin);
}
if (plugin->comp_classes) {
+ BT_LOGD_STR("Putting component classes.");
g_ptr_array_free(plugin->comp_classes, TRUE);
}
{
struct bt_plugin *plugin = NULL;
+ BT_LOGD("Creating empty plugin object: type=%s",
+ bt_plugin_type_string(type));
+
plugin = g_new0(struct bt_plugin, 1);
if (!plugin) {
+ BT_LOGE_STR("Failed to allocate one plugin.");
goto error;
}
plugin->comp_classes =
g_ptr_array_new_with_free_func((GDestroyNotify) bt_put);
if (!plugin->comp_classes) {
+ BT_LOGE_STR("Failed to allocate a GPtrArray.");
goto error;
}
/* Create empty info */
plugin->info.name = g_string_new(NULL);
if (!plugin->info.name) {
+ BT_LOGE_STR("Failed to allocate a GString.");
goto error;
}
plugin->info.path = g_string_new(NULL);
if (!plugin->info.path) {
+ BT_LOGE_STR("Failed to allocate a GString.");
goto error;
}
plugin->info.description = g_string_new(NULL);
if (!plugin->info.description) {
+ BT_LOGE_STR("Failed to allocate a GString.");
goto error;
}
plugin->info.author = g_string_new(NULL);
if (!plugin->info.author) {
+ BT_LOGE_STR("Failed to allocate a GString.");
goto error;
}
plugin->info.license = g_string_new(NULL);
if (!plugin->info.license) {
+ BT_LOGE_STR("Failed to allocate a GString.");
goto error;
}
plugin->info.version.extra = g_string_new(NULL);
if (!plugin->info.version.extra) {
+ BT_LOGE_STR("Failed to allocate a GString.");
goto error;
}
+ BT_LOGD("Created empty plugin object: type=%s, addr=%p",
+ bt_plugin_type_string(type), plugin);
goto end;
error:
assert(path);
g_string_assign(plugin->info.path, path);
plugin->info.path_set = BT_TRUE;
+ BT_LOGV("Set plugin's path: addr=%p, name=\"%s\", path=\"%s\"",
+ plugin, bt_plugin_get_name(plugin), path);
}
static inline
assert(name);
g_string_assign(plugin->info.name, name);
plugin->info.name_set = BT_TRUE;
+ BT_LOGV("Set plugin's name: addr=%p, name=\"%s\"",
+ plugin, name);
}
static inline
assert(description);
g_string_assign(plugin->info.description, description);
plugin->info.description_set = BT_TRUE;
+ BT_LOGV("Set plugin's description: addr=%p, name=\"%s\"",
+ plugin, bt_plugin_get_name(plugin));
}
static inline
assert(author);
g_string_assign(plugin->info.author, author);
plugin->info.author_set = BT_TRUE;
+ BT_LOGV("Set plugin's author: addr=%p, name=\"%s\", author=\"%s\"",
+ plugin, bt_plugin_get_name(plugin), author);
}
static inline
assert(license);
g_string_assign(plugin->info.license, license);
plugin->info.license_set = BT_TRUE;
+ BT_LOGV("Set plugin's path: addr=%p, name=\"%s\", license=\"%s\"",
+ plugin, bt_plugin_get_name(plugin), license);
}
static inline
}
plugin->info.version_set = BT_TRUE;
+ BT_LOGV("Set plugin's version: addr=%p, name=\"%s\", "
+ "major=%u, minor=%u, patch=%u, extra=\"%s\"",
+ plugin, bt_plugin_get_name(plugin),
+ major, minor, patch, extra);
}
static inline
void bt_plugin_freeze(struct bt_plugin *plugin)
{
assert(plugin);
+
+ if (plugin->frozen) {
+ return;
+ }
+
+ BT_LOGD("Freezing plugin: addr=%p, name=\"%s\", path=\"%s\"",
+ plugin, bt_plugin_get_name(plugin),
+ bt_plugin_get_path(plugin));
plugin->frozen = BT_TRUE;
}
return;
}
+ BT_LOGD("Destroying plugin set: addr=%p", plugin_set);
+
if (plugin_set->plugins) {
+ BT_LOGD_STR("Putting plugins.");
g_ptr_array_free(plugin_set->plugins, TRUE);
}
goto end;
}
+ BT_LOGD_STR("Creating empty plugin set.");
bt_object_init(plugin_set, bt_plugin_set_destroy);
plugin_set->plugins = g_ptr_array_new_with_free_func(
(GDestroyNotify) bt_put);
if (!plugin_set->plugins) {
+ BT_LOGE_STR("Failed to allocate a GPtrArray.");
BT_PUT(plugin_set);
goto end;
}
+ BT_LOGD("Created empty plugin set: addr=%p", plugin_set);
+
end:
return plugin_set;
}
assert(plugin_set);
assert(plugin);
g_ptr_array_add(plugin_set->plugins, bt_get(plugin));
-}
-
-static inline
-const char *bt_plugin_status_string(enum bt_plugin_status status)
-{
- switch (status) {
- case BT_PLUGIN_STATUS_OK:
- return "BT_PLUGIN_STATUS_OK";
- case BT_PLUGIN_STATUS_ERROR:
- return "BT_PLUGIN_STATUS_ERROR";
- case BT_PLUGIN_STATUS_NOMEM:
- return "BT_PLUGIN_STATUS_NOMEM";
- default:
- return "(unknown)";
- }
+ BT_LOGV("Added plugin to plugin set: "
+ "plugin-set-addr=%p, plugin-addr=%p, plugin-name=\"%s\", "
+ "plugin-path=\"%s\"",
+ plugin_set, plugin, bt_plugin_get_name(plugin),
+ bt_plugin_get_path(plugin));
}
#endif /* BABELTRACE_PLUGIN_PLUGIN_INTERNAL_H */
* SOFTWARE.
*/
+#define BT_LOG_TAG "PLUGIN-SO"
+#include <babeltrace/lib-logging-internal.h>
+
#include <babeltrace/compiler-internal.h>
#include <babeltrace/ref.h>
#include <babeltrace/plugin/plugin-internal.h>
comp_classes_to_shlib_handles = g_hash_table_new_full(g_direct_hash,
g_direct_equal, NULL, bt_put);
assert(comp_classes_to_shlib_handles);
+ BT_LOGD_STR("Initialized component class to shared library handle hash table.");
}
__attribute__((destructor)) static
void fini_comp_classes_to_shlib_handles(void) {
if (comp_classes_to_shlib_handles) {
g_hash_table_destroy(comp_classes_to_shlib_handles);
+ BT_LOGD_STR("Destroyed component class to shared library handle hash table.");
}
}
assert(obj);
shared_lib_handle = container_of(obj,
struct bt_plugin_so_shared_lib_handle, base);
+ const char *path = shared_lib_handle->path ?
+ shared_lib_handle->path->str : NULL;
+
+ BT_LOGD("Destroying shared library handle: addr=%p, path=\"%s\"",
+ shared_lib_handle, path);
if (shared_lib_handle->init_called && shared_lib_handle->exit) {
- enum bt_plugin_status status = shared_lib_handle->exit();
+ enum bt_plugin_status status;
- if (status < 0) {
- const char *path = shared_lib_handle->path ?
- shared_lib_handle->path->str : "[built-in]";
+ BT_LOGD_STR("Calling user's plugin exit function.");
+ status = shared_lib_handle->exit();
+ BT_LOGD("User function returned: %s",
+ bt_plugin_status_string(status));
- printf_verbose("Plugin in module `%s` exited with error %d\n",
- path, status);
+ if (status < 0) {
+ BT_LOGW("User's plugin exit function failed: "
+ "path=\"%s\"", path);
}
}
if (!var || strcmp(var, "1") != 0) {
#endif
+ BT_LOGD("Closing GModule: path=\"%s\"", path);
+
if (!g_module_close(shared_lib_handle->module)) {
- printf_error("Module close error: %s\n",
- g_module_error());
+ BT_LOGE("Cannot close GModule: %s: path=\"%s\"",
+ g_module_error(), path);
}
#ifndef NDEBUG
+ } else {
+ BT_LOGD("Not closing GModule because `BABELTRACE_NO_DLCLOSE=1`: "
+ "path=\"%s\"", path);
}
#endif
}
{
struct bt_plugin_so_shared_lib_handle *shared_lib_handle = NULL;
+ BT_LOGD("Creating shared library handle: path=\"%s\"", path);
shared_lib_handle = g_new0(struct bt_plugin_so_shared_lib_handle, 1);
if (!shared_lib_handle) {
+ BT_LOGE_STR("Failed to allocate one shared library handle.");
goto error;
}
shared_lib_handle->path = g_string_new(path);
if (!shared_lib_handle->path) {
+ BT_LOGE_STR("Failed to allocate a GString.");
goto error;
}
shared_lib_handle->module = g_module_open(path, 0);
if (!shared_lib_handle->module) {
- printf_verbose("Module open error: %s\n", g_module_error());
+ BT_LOGW("Cannot open GModule: %s: path=\"%s\"",
+ g_module_error(), path);
goto error;
}
BT_PUT(shared_lib_handle);
end:
+ if (shared_lib_handle) {
+ BT_LOGD("Created shared library handle: path=\"%s\", addr=%p",
+ path, shared_lib_handle);
+ }
+
return shared_lib_handle;
}
size_t i;
int ret;
+ BT_LOGD("Initializing plugin object from descriptors found in sections: "
+ "plugin-addr=%p, plugin-path=\"%s\", "
+ "attrs-begin-addr=%p, attrs-end-addr=%p, "
+ "cc-descr-begin-addr=%p, cc-descr-end-addr=%p, "
+ "cc-descr-attrs-begin-addr=%p, cc-descr-attrs-end-addr=%p",
+ plugin,
+ spec->shared_lib_handle->path ?
+ spec->shared_lib_handle->path->str : NULL,
+ attrs_begin, attrs_end,
+ cc_descriptors_begin, cc_descriptors_end,
+ cc_descr_attrs_begin, cc_descr_attrs_end);
comp_class_full_descriptors = g_array_new(FALSE, TRUE,
sizeof(struct comp_class_full_descriptor));
if (!comp_class_full_descriptors) {
+ BT_LOGE_STR("Failed to allocate a GArray.");
status = BT_PLUGIN_STATUS_ERROR;
goto end;
}
cur_attr->value.version.extra);
break;
default:
- printf_verbose("WARNING: Unknown attribute \"%s\" (type %d) for plugin %s\n",
- cur_attr->type_name, cur_attr->type,
- descriptor->name);
+ BT_LOGW("Ignoring unknown plugin descriptor attribute: "
+ "plugin-path=\"%s\", plugin-name=\"%s\", "
+ "attr-type-name=\"%s\", attr-type-id=%d",
+ spec->shared_lib_handle->path ?
+ spec->shared_lib_handle->path->str :
+ NULL,
+ descriptor->name, cur_attr->type_name,
+ cur_attr->type);
break;
}
}
cur_cc_descr_attr->value.notif_iter_seek_time_method;
break;
default:
- printf_verbose("WARNING: Unknown attribute \"%s\" (type %d) for component class %s (type %d) in plugin %s\n",
- cur_cc_descr_attr->type_name,
- cur_cc_descr_attr->type,
+ BT_LOGW("Ignoring unknown component class descriptor attribute: "
+ "plugin-path=\"%s\", "
+ "plugin-name=\"%s\", "
+ "comp-class-name=\"%s\", "
+ "comp-class-type=%s, "
+ "attr-type-name=\"%s\", "
+ "attr-type-id=%d",
+ spec->shared_lib_handle->path ?
+ spec->shared_lib_handle->path->str :
+ NULL,
+ descriptor->name,
cur_cc_descr_attr->comp_class_descriptor->name,
- cur_cc_descr_attr->comp_class_descriptor->type,
- descriptor->name);
+ bt_component_class_type_string(
+ cur_cc_descr_attr->comp_class_descriptor->type),
+ cur_cc_descr_attr->type_name,
+ cur_cc_descr_attr->type);
break;
}
}
/* Initialize plugin */
if (spec->init) {
+ BT_LOGD_STR("Calling user's plugin initialization function.");
status = spec->init(plugin);
+ BT_LOGD("User function returned: %s",
+ bt_plugin_status_string(status));
+
if (status < 0) {
- printf_verbose("Plugin `%s` initialization error: %d\n",
- bt_plugin_get_name(plugin), status);
+ BT_LOGW_STR("User's plugin initialization function failed.");
goto end;
}
}
struct comp_class_full_descriptor, i);
struct bt_component_class *comp_class;
+ BT_LOGD("Creating and setting properties of plugin's component class: "
+ "plugin-path=\"%s\", plugin-name=\"%s\", "
+ "comp-class-name=\"%s\", comp-class-type=%s",
+ spec->shared_lib_handle->path ?
+ spec->shared_lib_handle->path->str :
+ NULL,
+ descriptor->name,
+ cc_full_descr->descriptor->name,
+ bt_component_class_type_string(
+ cc_full_descr->descriptor->type));
+
switch (cc_full_descr->descriptor->type) {
case BT_COMPONENT_CLASS_TYPE_SOURCE:
comp_class = bt_component_class_source_create(
cc_full_descr->descriptor->methods.sink.consume);
break;
default:
- printf_verbose("WARNING: Unknown component class type %d for component class %s in plugin %s\n",
- cc_full_descr->descriptor->type,
+ BT_LOGW("Ignoring unknown component class type: "
+ "plugin-path=\"%s\", plugin-name=\"%s\", "
+ "comp-class-name=\"%s\", comp-class-type=%d",
+ spec->shared_lib_handle->path->str ?
+ spec->shared_lib_handle->path->str :
+ NULL,
+ descriptor->name,
cc_full_descr->descriptor->name,
- descriptor->name);
+ cc_full_descr->descriptor->type);
continue;
}
if (!comp_class) {
+ BT_LOGE_STR("Cannot create component class.");
status = BT_PLUGIN_STATUS_ERROR;
goto end;
}
ret = bt_component_class_set_description(comp_class,
cc_full_descr->description);
if (ret) {
+ BT_LOGE_STR("Cannot set component class's description.");
status = BT_PLUGIN_STATUS_ERROR;
BT_PUT(comp_class);
goto end;
ret = bt_component_class_set_help(comp_class,
cc_full_descr->help);
if (ret) {
+ BT_LOGE_STR("Cannot set component class's help string.");
status = BT_PLUGIN_STATUS_ERROR;
BT_PUT(comp_class);
goto end;
ret = bt_component_class_set_init_method(comp_class,
cc_full_descr->init_method);
if (ret) {
+ BT_LOGE_STR("Cannot set component class's initialization method.");
status = BT_PLUGIN_STATUS_ERROR;
BT_PUT(comp_class);
goto end;
ret = bt_component_class_set_finalize_method(comp_class,
cc_full_descr->finalize_method);
if (ret) {
+ BT_LOGE_STR("Cannot set component class's finalization method.");
status = BT_PLUGIN_STATUS_ERROR;
BT_PUT(comp_class);
goto end;
ret = bt_component_class_set_query_method(
comp_class, cc_full_descr->query_method);
if (ret) {
+ BT_LOGE_STR("Cannot set component class's query method.");
status = BT_PLUGIN_STATUS_ERROR;
BT_PUT(comp_class);
goto end;
ret = bt_component_class_set_accept_port_connection_method(
comp_class, cc_full_descr->accept_port_connection_method);
if (ret) {
+ BT_LOGE_STR("Cannot set component class's \"accept port connection\" method.");
status = BT_PLUGIN_STATUS_ERROR;
BT_PUT(comp_class);
goto end;
ret = bt_component_class_set_port_connected_method(
comp_class, cc_full_descr->port_connected_method);
if (ret) {
+ BT_LOGE_STR("Cannot set component class's \"port connected\" method.");
status = BT_PLUGIN_STATUS_ERROR;
BT_PUT(comp_class);
goto end;
ret = bt_component_class_set_port_disconnected_method(
comp_class, cc_full_descr->port_disconnected_method);
if (ret) {
+ BT_LOGE_STR("Cannot set component class's \"port disconnected\" method.");
status = BT_PLUGIN_STATUS_ERROR;
BT_PUT(comp_class);
goto end;
comp_class,
cc_full_descr->iterator_methods.init);
if (ret) {
+ BT_LOGE_STR("Cannot set component class's notification iterator initialization method.");
status = BT_PLUGIN_STATUS_ERROR;
BT_PUT(comp_class);
goto end;
comp_class,
cc_full_descr->iterator_methods.finalize);
if (ret) {
+ BT_LOGE_STR("Cannot set source component class's notification iterator finalization method.");
status = BT_PLUGIN_STATUS_ERROR;
BT_PUT(comp_class);
goto end;
comp_class,
cc_full_descr->iterator_methods.seek_time);
if (ret) {
+ BT_LOGE_STR("Cannot set source component class's notification iterator seek to time method.");
status = BT_PLUGIN_STATUS_ERROR;
BT_PUT(comp_class);
goto end;
comp_class,
cc_full_descr->iterator_methods.init);
if (ret) {
+ BT_LOGE_STR("Cannot set filter component class's notification iterator initialization method.");
status = BT_PLUGIN_STATUS_ERROR;
BT_PUT(comp_class);
goto end;
comp_class,
cc_full_descr->iterator_methods.finalize);
if (ret) {
+ BT_LOGE_STR("Cannot set filter component class's notification iterator finalization method.");
status = BT_PLUGIN_STATUS_ERROR;
BT_PUT(comp_class);
goto end;
comp_class,
cc_full_descr->iterator_methods.seek_time);
if (ret) {
+ BT_LOGE_STR("Cannot set filter component class's notification iterator seek to time method.");
status = BT_PLUGIN_STATUS_ERROR;
BT_PUT(comp_class);
goto end;
comp_class);
BT_PUT(comp_class);
if (status < 0) {
- printf_verbose("Cannot add component class %s (type %d) to plugin `%s`: status = %d\n",
- cc_full_descr->descriptor->name,
- cc_full_descr->descriptor->type,
- bt_plugin_get_name(plugin), status);
+ BT_LOGE("Cannot add component class to plugin.");
goto end;
}
}
plugin->destroy_spec_data = bt_plugin_so_destroy_spec_data;
plugin->spec_data = g_new0(struct bt_plugin_so_spec_data, 1);
if (!plugin->spec_data) {
+ BT_LOGE_STR("Failed to allocate one SO plugin specific data structure.");
goto error;
}
attrs_count = attrs_end - attrs_begin;
cc_descriptors_count = cc_descriptors_end - cc_descriptors_begin;
cc_descr_attrs_count = cc_descr_attrs_end - cc_descr_attrs_begin;
- printf_verbose("Section: Plugin descriptors: [%p - %p], (%zu elements)\n",
- descriptors_begin, descriptors_end, descriptor_count);
- printf_verbose("Section: Plugin descriptor attributes: [%p - %p], (%zu elements)\n",
- attrs_begin, attrs_end, attrs_count);
- printf_verbose("Section: Plugin component class descriptors: [%p - %p], (%zu elements)\n",
- cc_descriptors_begin, cc_descriptors_end, cc_descriptors_count);
- printf_verbose("Section: Plugin component class descriptor attributes: [%p - %p], (%zu elements)\n",
- cc_descr_attrs_begin, cc_descr_attrs_end, cc_descr_attrs_count);
+
+ BT_LOGD("Creating all SO plugins from sections: "
+ "plugin-path=\"%s\", "
+ "descr-begin-addr=%p, descr-end-addr=%p, "
+ "attrs-begin-addr=%p, attrs-end-addr=%p, "
+ "cc-descr-begin-addr=%p, cc-descr-end-addr=%p, "
+ "cc-descr-attrs-begin-addr=%p, cc-descr-attrs-end-addr=%p, "
+ "descr-count=%zu, attrs-count=%zu, "
+ "cc-descr-count=%zu, cc-descr-attrs-count=%zu",
+ shared_lib_handle->path ? shared_lib_handle->path->str : NULL,
+ descriptors_begin, descriptors_end,
+ attrs_begin, attrs_end,
+ cc_descriptors_begin, cc_descriptors_end,
+ cc_descr_attrs_begin, cc_descr_attrs_end,
+ descriptor_count, attrs_count,
+ cc_descriptors_count, cc_descr_attrs_count);
plugin_set = bt_plugin_set_create();
if (!plugin_set) {
+ BT_LOGE_STR("Cannot create empty plugin set.");
goto error;
}
descriptors_begin[i];
struct bt_plugin *plugin;
- printf_verbose("Loading plugin %s (ABI %d.%d)\n", descriptor->name,
- descriptor->major, descriptor->minor);
+ BT_LOGD("Creating plugin object for plugin: "
+ "name=\"%s\", abi-major=%d, abi-minor=%d",
+ descriptor->name, descriptor->major, descriptor->minor);
if (descriptor->major > __BT_PLUGIN_VERSION_MAJOR) {
- printf_error("Unknown plugin's major version: %d\n",
+ BT_LOGW("Unknown ABI major version: abi-major=%d",
descriptor->major);
goto error;
}
plugin = bt_plugin_so_create_empty(shared_lib_handle);
if (!plugin) {
- printf_error("Cannot allocate plugin object for plugin %s\n",
- descriptor->name);
+ BT_LOGE_STR("Cannot create empty shared library handle.");
goto error;
}
attrs_end, cc_descriptors_begin, cc_descriptors_end,
cc_descr_attrs_begin, cc_descr_attrs_end);
if (status < 0) {
- printf_error("Cannot initialize plugin object %s\n",
- descriptor->name);
+ BT_LOGW_STR("Cannot initialize SO plugin object from sections.");
BT_PUT(plugin);
goto error;
}
goto end;
}
+ BT_LOGD_STR("Creating all SO plugins from built-in plugins.");
plugin_set = bt_plugin_so_create_all_from_sections(shared_lib_handle,
SECTION_BEGIN(__bt_plugin_descriptors),
SECTION_END(__bt_plugin_descriptors),
struct bt_plugin_so_shared_lib_handle *shared_lib_handle = NULL;
if (!path) {
+ BT_LOGW_STR("Invalid parameter: path is NULL.");
goto end;
}
+ BT_LOGD("Creating all SO plugins from file: path=\"%s\"", path);
path_len = strlen(path);
if (path_len <= PLUGIN_SUFFIX_LEN) {
+ BT_LOGW("Invalid parameter: path length is too short: "
+ "path-length=%zu", path_len);
goto end;
}
path + path_len - NATIVE_PLUGIN_SUFFIX_LEN,
NATIVE_PLUGIN_SUFFIX_LEN);
if (!is_shared_object && !is_libtool_wrapper) {
- /* Name indicates that this is not a plugin file. */
+ /* Name indicates this is not a plugin file; not an error */
+ BT_LOGV("File is not a SO plugin file: path=\"%s\"", path);
goto end;
}
shared_lib_handle = bt_plugin_so_shared_lib_handle_create(path);
if (!shared_lib_handle) {
+ BT_LOGW_STR("Cannot create shared library handle.");
goto end;
}
if (!g_module_symbol(shared_lib_handle->module, "__start___bt_plugin_descriptors",
(gpointer *) &descriptors_begin)) {
- printf_verbose("Unable to resolve plugin symbol %s from %s\n",
- "__start___bt_plugin_descriptors",
- g_module_name(shared_lib_handle->module));
+ BT_LOGD("Cannot resolve plugin symbol: path=\"%s\", "
+ "symbol=\"%s\"", path,
+ "__start___bt_plugin_descriptors");
goto end;
}
if (!g_module_symbol(shared_lib_handle->module, "__stop___bt_plugin_descriptors",
(gpointer *) &descriptors_end)) {
- printf_verbose("Unable to resolve plugin symbol %s from %s\n",
- "__stop___bt_plugin_descriptors",
- g_module_name(shared_lib_handle->module));
+ BT_LOGD("Cannot resolve plugin symbol: path=\"%s\", "
+ "symbol=\"%s\"", path,
+ "__stop___bt_plugin_descriptors");
goto end;
}
if (!g_module_symbol(shared_lib_handle->module, "__start___bt_plugin_descriptor_attributes",
(gpointer *) &attrs_begin)) {
- printf_verbose("Unable to resolve plugin symbol %s from %s\n",
- "__start___bt_plugin_descriptor_attributes",
- g_module_name(shared_lib_handle->module));
+ BT_LOGD("Cannot resolve plugin symbol: path=\"%s\", "
+ "symbol=\"%s\"", path,
+ "__start___bt_plugin_descriptor_attributes");
}
if (!g_module_symbol(shared_lib_handle->module, "__stop___bt_plugin_descriptor_attributes",
(gpointer *) &attrs_end)) {
- printf_verbose("Unable to resolve plugin symbol %s from %s\n",
- "__stop___bt_plugin_descriptor_attributes",
- g_module_name(shared_lib_handle->module));
+ BT_LOGD("Cannot resolve plugin symbol: path=\"%s\", "
+ "symbol=\"%s\"", path,
+ "__stop___bt_plugin_descriptor_attributes");
}
if ((!!attrs_begin - !!attrs_end) != 0) {
- printf_verbose("Found __start___bt_plugin_descriptor_attributes or __stop___bt_plugin_descriptor_attributes symbol, but not both in %s\n",
- g_module_name(shared_lib_handle->module));
+ BT_LOGD("Found section start or end symbol, but not both: "
+ "path=\"%s\", symbol-start=\"%s\", "
+ "symbol-end=\"%s\", symbol-start-addr=%p, "
+ "symbol-end-addr=%p",
+ path, "__start___bt_plugin_descriptor_attributes",
+ "__stop___bt_plugin_descriptor_attributes",
+ attrs_begin, attrs_end);
goto end;
}
if (!g_module_symbol(shared_lib_handle->module, "__start___bt_plugin_component_class_descriptors",
(gpointer *) &cc_descriptors_begin)) {
- printf_verbose("Unable to resolve plugin symbol %s from %s\n",
- "__start___bt_plugin_component_class_descriptors",
- g_module_name(shared_lib_handle->module));
+ BT_LOGD("Cannot resolve plugin symbol: path=\"%s\", "
+ "symbol=\"%s\"", path,
+ "__start___bt_plugin_component_class_descriptors");
}
if (!g_module_symbol(shared_lib_handle->module, "__stop___bt_plugin_component_class_descriptors",
(gpointer *) &cc_descriptors_end)) {
- printf_verbose("Unable to resolve plugin symbol %s from %s\n",
- "__stop___bt_plugin_component_class_descriptors",
- g_module_name(shared_lib_handle->module));
+ BT_LOGD("Cannot resolve plugin symbol: path=\"%s\", "
+ "symbol=\"%s\"", path,
+ "__stop___bt_plugin_component_class_descriptors");
}
if ((!!cc_descriptors_begin - !!cc_descriptors_end) != 0) {
- printf_verbose("Found __start___bt_plugin_component_class_descriptors or __stop___bt_plugin_component_class_descriptors symbol, but not both in %s\n",
- g_module_name(shared_lib_handle->module));
+ BT_LOGD("Found section start or end symbol, but not both: "
+ "path=\"%s\", symbol-start=\"%s\", "
+ "symbol-end=\"%s\", symbol-start-addr=%p, "
+ "symbol-end-addr=%p",
+ path, "__start___bt_plugin_component_class_descriptors",
+ "__stop___bt_plugin_component_class_descriptors",
+ cc_descriptors_begin, cc_descriptors_end);
goto end;
}
if (!g_module_symbol(shared_lib_handle->module, "__start___bt_plugin_component_class_descriptor_attributes",
(gpointer *) &cc_descr_attrs_begin)) {
- printf_verbose("Unable to resolve plugin symbol %s from %s\n",
- "__start___bt_plugin_component_class_descriptor_attributes",
- g_module_name(shared_lib_handle->module));
+ BT_LOGD("Cannot resolve plugin symbol: path=\"%s\", "
+ "symbol=\"%s\"", path,
+ "__start___bt_plugin_component_class_descriptor_attributes");
}
if (!g_module_symbol(shared_lib_handle->module, "__stop___bt_plugin_component_class_descriptor_attributes",
(gpointer *) &cc_descr_attrs_end)) {
- printf_verbose("Unable to resolve plugin symbol %s from %s\n",
- "__stop___bt_plugin_component_class_descriptor_attributes",
- g_module_name(shared_lib_handle->module));
+ BT_LOGD("Cannot resolve plugin symbol: path=\"%s\", "
+ "symbol=\"%s\"", path,
+ "__stop___bt_plugin_component_class_descriptor_attributes");
}
if ((!!cc_descr_attrs_begin - !!cc_descr_attrs_end) != 0) {
- printf_verbose("Found __start___bt_plugin_component_class_descriptor_attributes or __stop___bt_plugin_component_class_descriptor_attributes symbol, but not both in %s\n",
- g_module_name(shared_lib_handle->module));
+ BT_LOGD("Found section start or end symbol, but not both: "
+ "path=\"%s\", symbol-start=\"%s\", "
+ "symbol-end=\"%s\", symbol-start-addr=%p, "
+ "symbol-end-addr=%p",
+ path, "__start___bt_plugin_component_class_descriptor_attributes",
+ "__stop___bt_plugin_component_class_descriptor_attributes",
+ cc_descr_attrs_begin, cc_descr_attrs_end);
goto end;
}
/* Initialize plugin */
+ BT_LOGD_STR("Initializing plugin object.");
plugin_set = bt_plugin_so_create_all_from_sections(shared_lib_handle,
descriptors_begin, descriptors_end, attrs_begin, attrs_end,
cc_descriptors_begin, cc_descriptors_end,
gboolean exists = g_hash_table_remove(comp_classes_to_shlib_handles,
comp_class);
assert(exists);
+ BT_LOGV("Component class destroyed: removed entry from hash table: "
+ "comp-cls-addr=%p", comp_class);
}
BT_HIDDEN