* modified is included with the above copyright notice.
*/
-/*
- * sched_getcpu.
- */
-#ifdef __linux__
+#include <sys/syscall.h>
#ifdef __UCLIBC__
-#include <sys/syscall.h>
#define __getcpu(cpu, node, cache) syscall(__NR_getcpu, cpu, node, cache)
static inline
int sched_getcpu(void)
return (s == -1) ? s : c;
}
#endif /* __UCLIBC__ */
-
-#else
-#error "Please add support for your OS into liblttng-ust/compat.h."
-#endif
-
-/*
- * lttng_ust_getprocname.
- */
-#ifdef __linux__
-
-#include <sys/prctl.h>
-
-#define LTTNG_UST_PROCNAME_LEN 17
-
-static inline
-void lttng_ust_getprocname(char *name)
-{
- (void) prctl(PR_GET_NAME, (unsigned long) name, 0, 0, 0);
-}
-
-#elif defined(__FreeBSD__)
-#include <stdlib.h>
-#include <string.h>
-
-/*
- * Limit imposed by Linux UST-sessiond ABI.
- */
-#define LTTNG_UST_PROCNAME_LEN 17
-
-/*
- * Acts like linux prctl, the string is not necessarily 0-terminated if
- * 16-byte long.
- */
-static inline
-void lttng_ust_getprocname(char *name)
-{
- const char *bsd_name;
-
- bsd_name = getprogname();
- if (!bsd_name)
- name[0] = '\0';
- memcpy(name, bsd_name, LTTNG_UST_PROCNAME_LEN - 1);
-}
-
-#endif
-
#endif /* _UST_COMPAT_H */
#include <stddef.h>
#include <inttypes.h>
#include <time.h>
+#include <sys/prctl.h>
#include <lttng/ust-endian.h>
#include "clock.h"
#include <usterr-signal-safe.h>
#include <helper.h>
#include "error.h"
-#include "compat.h"
#include "tracepoint-internal.h"
#include "ltt-tracer.h"
#include "../libringbuffer/shm.h"
#include "jhash.h"
+#define PROCNAME_LEN 17
+
/*
* The sessions mutex is the centralized mutex across UST tracing
* control and probe registration. All operations within this file are
struct ltt_channel *chan;
struct ltt_event *event;
int ret = 0;
- char procname[LTTNG_UST_PROCNAME_LEN] = "";
+ char procname[PROCNAME_LEN] = "";
if (!CMM_ACCESS_ONCE(session->active))
return 0;
goto end;
/* ignore error, just use empty string if error. */
- lttng_ust_getprocname(procname);
- procname[LTTNG_UST_PROCNAME_LEN - 1] = '\0';
+ (void) prctl(PR_GET_NAME, (unsigned long) procname, 0, 0, 0);
+ procname[PROCNAME_LEN - 1] = '\0';
ret = lttng_metadata_printf(session,
"env {\n"
" vpid = %d;\n"
* Dual LGPL v2.1/GPL v2 license.
*/
+#include <sys/prctl.h>
#include <lttng/ust-events.h>
#include <lttng/ust-tracer.h>
#include <lttng/ringbuffer-config.h>
#include <assert.h>
-#include "compat.h"
+
+#define PROCNAME_LEN 17 /* includes \0 */
/*
* We cache the result to ensure we don't trigger a system call for
static inline
char *wrapper_getprocname(void)
{
+ int ret;
+
if (caa_unlikely(!cached_procname[0])) {
- lttng_ust_getprocname(cached_procname);
- cached_procname[LTTNG_UST_PROCNAME_LEN - 1] = '\0';
+ ret = prctl(PR_GET_NAME, (unsigned long) cached_procname,
+ 0, 0, 0);
+ assert(!ret);
}
return cached_procname;
}
{
size_t size = 0;
- size += LTTNG_UST_PROCNAME_LEN;
+ size += PROCNAME_LEN;
return size;
}
char *procname;
procname = wrapper_getprocname();
- chan->ops->event_write(ctx, procname, LTTNG_UST_PROCNAME_LEN);
+ chan->ops->event_write(ctx, procname, PROCNAME_LEN);
}
int lttng_add_procname_to_ctx(struct lttng_ctx **ctx)
field->event_field.type.u.array.elem_type.u.basic.integer.reverse_byte_order = 0;
field->event_field.type.u.array.elem_type.u.basic.integer.base = 10;
field->event_field.type.u.array.elem_type.u.basic.integer.encoding = lttng_encode_UTF8;
- field->event_field.type.u.array.length = LTTNG_UST_PROCNAME_LEN;
+ field->event_field.type.u.array.length = PROCNAME_LEN;
field->get_size = procname_get_size;
field->record = procname_record;
return 0;
#define _LGPL_SOURCE
#include <sys/types.h>
#include <sys/socket.h>
+#include <sys/prctl.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <usterr-signal-safe.h>
#include "tracepoint-internal.h"
#include "ltt-tracer-core.h"
-#include "compat.h"
/*
* Has lttng ust comm constructor been called ?
int register_app_to_sessiond(int socket)
{
ssize_t ret;
+ int prctl_ret;
struct {
uint32_t major;
uint32_t minor;
reg_msg.uid = getuid();
reg_msg.gid = getgid();
reg_msg.bits_per_long = CAA_BITS_PER_LONG;
- lttng_ust_getprocname(reg_msg.name);
+ prctl_ret = prctl(PR_GET_NAME, (unsigned long) reg_msg.name, 0, 0, 0);
+ if (prctl_ret) {
+ ERR("Error executing prctl");
+ return -errno;
+ }
ret = ustcomm_send_unix_sock(socket, ®_msg, sizeof(reg_msg));
if (ret >= 0 && ret != sizeof(reg_msg))