* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#define _LGPL_SOURCE
#define _GNU_SOURCE
-
+#define _LGPL_SOURCE
#include <limits.h>
#include <stdio.h>
#include <sys/types.h>
#include <lttng/ust-dlfcn.h>
#include <lttng/ust-elf.h>
+#include <helper.h>
#include "usterr-signal-safe.h"
/* Include link.h last else it conflicts with ust-dlfcn. */
char resolved_path[PATH_MAX];
struct lttng_ust_elf *elf;
uint64_t memsz;
- uint8_t *build_id;
+ uint8_t *build_id = NULL;
size_t build_id_len;
- char *dbg_file;
+ char *dbg_file = NULL;
uint32_t crc;
int has_build_id = 0, has_debug_link = 0;
int ret;
}
tracepoint(lttng_ust_dl, dlopen,
- ip, so_base, resolved_path, memsz);
+ ip, so_base, resolved_path, memsz,
+ has_build_id, has_debug_link);
if (has_build_id) {
tracepoint(lttng_ust_dl, build_id,
ip, so_base, build_id, build_id_len);
- free(build_id);
}
if (has_debug_link) {
tracepoint(lttng_ust_dl, debug_link,
ip, so_base, dbg_file, crc);
- free(dbg_file);
}
end:
+ free(dbg_file);
+ free(build_id);
lttng_ust_elf_destroy(elf);
return;
}
ret = dlinfo(handle, RTLD_DI_LINKMAP, &p);
if (ret != -1 && p != NULL && p->l_addr != 0) {
lttng_ust_dl_dlopen((void *) p->l_addr, p->l_name,
- __builtin_return_address(0));
+ LTTNG_UST_CALLER_IP());
}
}
int dlclose(void *handle)
{
- if (__tracepoint_ptrs_registered && handle) {
+ if (__tracepoint_ptrs_registered) {
struct link_map *p = NULL;
int ret;
ret = dlinfo(handle, RTLD_DI_LINKMAP, &p);
if (ret != -1 && p != NULL && p->l_addr != 0) {
tracepoint(lttng_ust_dl, dlclose,
- __builtin_return_address(0),
+ LTTNG_UST_CALLER_IP(),
(void *) p->l_addr);
}
}