mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-04-30 03:40:34 +02:00
Add build support for tracepoints via lttng-ust
This commit is contained in:
parent
b517464d7f
commit
cca54736a0
6 changed files with 126 additions and 5 deletions
14
Makefile
14
Makefile
|
@ -30,10 +30,16 @@ BUILD_CFLAGS_debug = -O0 -g -DGC_DEBUG=1
|
|||
|
||||
BUILD_CFLAGS = $(BUILD_CFLAGS_$(or $(BUILD),$(DEFAULT_BUILD)))
|
||||
|
||||
USE_LTTNG := $(shell pkg-config --exists lttng-ust && echo 1)
|
||||
LTTNG_CPPFLAGS := $(if $(USE_LTTNG), $(shell pkg-config --cflags lttng-ust),)
|
||||
LTTNG_LIBS := $(if $(USE_LTTNG), $(shell pkg-config --libs lttng-ust),)
|
||||
TRACEPOINT_CPPFLAGS = $(if $(USE_LTTNG),$(LTTNG_CPPFLAGS) -DGC_TRACEPOINT_LTTNG=1,)
|
||||
TRACEPOINT_LIBS = $(LTTNG_LIBS)
|
||||
|
||||
CC = gcc
|
||||
CFLAGS = -Wall -flto -fno-strict-aliasing -fvisibility=hidden -Wno-unused $(BUILD_CFLAGS)
|
||||
CPPFLAGS = -Iapi
|
||||
LDFLAGS = -lpthread -flto=auto
|
||||
CPPFLAGS = -Iapi $(TRACEPOINT_CPPFLAGS)
|
||||
LDFLAGS = -lpthread -flto=auto $(TRACEPOINT_LIBS)
|
||||
DEPFLAGS = -MMD -MP -MF $(@:obj/%.o=.deps/%.d)
|
||||
COMPILE = $(CC) $(CFLAGS) $(CPPFLAGS) $(DEPFLAGS) -o $@
|
||||
LINK = $(CC) $(LDFLAGS) -o $@
|
||||
|
@ -52,6 +58,8 @@ obj/gc-stack.o: src/gc-stack.c | .deps obj
|
|||
$(COMPILE) -c $<
|
||||
obj/gc-options.o: src/gc-options.c | .deps obj
|
||||
$(COMPILE) -c $<
|
||||
obj/gc-tracepoint.o: src/gc-tracepoint.c | .deps obj
|
||||
$(COMPILE) -c $<
|
||||
obj/%.gc-ephemeron.o: src/gc-ephemeron.c | .deps obj
|
||||
$(COMPILE) -include benchmarks/$*-embedder.h -c $<
|
||||
obj/%.gc-finalizer.o: src/gc-finalizer.c | .deps obj
|
||||
|
@ -110,7 +118,7 @@ obj/$(1).$(2).gc.o: src/$(call gc_impl,$(2)) | .deps obj
|
|||
$$(COMPILE) $(call gc_cflags,$(2)) $(call gc_impl_cflags,$(2)) -include benchmarks/$(1)-embedder.h -c $$<
|
||||
obj/$(1).$(2).o: benchmarks/$(1).c | .deps obj
|
||||
$$(COMPILE) $(call gc_cflags,$(2)) -include api/$(call gc_attrs,$(2)) -c $$<
|
||||
bin/$(1).$(2): obj/$(1).$(2).gc.o obj/$(1).$(2).o obj/gc-stack.o obj/gc-options.o obj/gc-platform.o obj/$(1).gc-ephemeron.o obj/$(1).gc-finalizer.o | bin
|
||||
bin/$(1).$(2): obj/$(1).$(2).gc.o obj/$(1).$(2).o obj/gc-stack.o obj/gc-options.o obj/gc-platform.o obj/gc-tracepoint.o obj/$(1).gc-ephemeron.o obj/$(1).gc-finalizer.o | bin
|
||||
$$(LINK) $$^ $(call gc_libs,$(2))
|
||||
endef
|
||||
|
||||
|
|
83
api/gc-lttng.h
Normal file
83
api/gc-lttng.h
Normal file
|
@ -0,0 +1,83 @@
|
|||
#define LTTNG_UST_TRACEPOINT_PROVIDER whippet
|
||||
|
||||
#undef LTTNG_UST_TRACEPOINT_INCLUDE
|
||||
#define LTTNG_UST_TRACEPOINT_INCLUDE "gc-lttng.h"
|
||||
|
||||
#if !defined(_TP_H) || defined(LTTNG_UST_TRACEPOINT_HEADER_MULTI_READ)
|
||||
#define _TP_H
|
||||
|
||||
#include <lttng/tracepoint.h>
|
||||
|
||||
LTTNG_UST_TRACEPOINT_ENUM(
|
||||
whippet, gc_kind,
|
||||
LTTNG_UST_TP_ENUM_VALUES
|
||||
(lttng_ust_field_enum_value("MINOR", 1)
|
||||
lttng_ust_field_enum_value("MAJOR", 2)
|
||||
lttng_ust_field_enum_value("COMPACTING", 3)))
|
||||
|
||||
LTTNG_UST_TRACEPOINT_EVENT_CLASS(
|
||||
whippet, tracepoint,
|
||||
LTTNG_UST_TP_ARGS(),
|
||||
LTTNG_UST_TP_FIELDS())
|
||||
|
||||
LTTNG_UST_TRACEPOINT_EVENT_CLASS(
|
||||
whippet, size_tracepoint,
|
||||
LTTNG_UST_TP_ARGS(size_t, size),
|
||||
LTTNG_UST_TP_FIELDS(lttng_ust_field_integer(size_t, size, size)))
|
||||
|
||||
|
||||
/* The tracepoint instances */
|
||||
LTTNG_UST_TRACEPOINT_EVENT_INSTANCE(
|
||||
whippet, size_tracepoint, whippet, init,
|
||||
LTTNG_UST_TP_ARGS(size_t, size))
|
||||
LTTNG_UST_TRACEPOINT_EVENT_INSTANCE(
|
||||
whippet, size_tracepoint, whippet, heap_resized,
|
||||
LTTNG_UST_TP_ARGS(size_t, size))
|
||||
LTTNG_UST_TRACEPOINT_EVENT_INSTANCE(
|
||||
whippet, size_tracepoint, whippet, live_data_size,
|
||||
LTTNG_UST_TP_ARGS(size_t, size))
|
||||
|
||||
LTTNG_UST_TRACEPOINT_EVENT_INSTANCE(
|
||||
whippet, tracepoint, whippet, requesting_stop, LTTNG_UST_TP_ARGS())
|
||||
LTTNG_UST_TRACEPOINT_EVENT_INSTANCE(
|
||||
whippet, tracepoint, whippet, waiting_for_stop, LTTNG_UST_TP_ARGS())
|
||||
LTTNG_UST_TRACEPOINT_EVENT_INSTANCE(
|
||||
whippet, tracepoint, whippet, mutators_stopped, LTTNG_UST_TP_ARGS())
|
||||
LTTNG_UST_TRACEPOINT_EVENT(
|
||||
whippet, prepare_gc,
|
||||
LTTNG_UST_TP_ARGS(int, gc_kind),
|
||||
LTTNG_UST_TP_FIELDS(
|
||||
lttng_ust_field_enum(whippet, gc_kind, int, gc_kind, gc_kind)))
|
||||
LTTNG_UST_TRACEPOINT_EVENT_INSTANCE(
|
||||
whippet, tracepoint, whippet, roots_traced, LTTNG_UST_TP_ARGS())
|
||||
LTTNG_UST_TRACEPOINT_EVENT_INSTANCE(
|
||||
whippet, tracepoint, whippet, heap_traced, LTTNG_UST_TP_ARGS())
|
||||
LTTNG_UST_TRACEPOINT_EVENT_INSTANCE(
|
||||
whippet, tracepoint, whippet, ephemerons_traced, LTTNG_UST_TP_ARGS())
|
||||
LTTNG_UST_TRACEPOINT_EVENT_INSTANCE(
|
||||
whippet, tracepoint, whippet, finalizers_traced, LTTNG_UST_TP_ARGS())
|
||||
LTTNG_UST_TRACEPOINT_EVENT_INSTANCE(
|
||||
whippet, tracepoint, whippet, restarting_mutators, LTTNG_UST_TP_ARGS())
|
||||
|
||||
LTTNG_UST_TRACEPOINT_EVENT_INSTANCE(
|
||||
whippet, tracepoint, whippet, mutator_added, LTTNG_UST_TP_ARGS())
|
||||
LTTNG_UST_TRACEPOINT_EVENT_INSTANCE(
|
||||
whippet, tracepoint, whippet, mutator_cause_gc, LTTNG_UST_TP_ARGS())
|
||||
LTTNG_UST_TRACEPOINT_EVENT_INSTANCE(
|
||||
whippet, tracepoint, whippet, mutator_stopping, LTTNG_UST_TP_ARGS())
|
||||
LTTNG_UST_TRACEPOINT_EVENT_INSTANCE(
|
||||
whippet, tracepoint, whippet, mutator_stopped, LTTNG_UST_TP_ARGS())
|
||||
LTTNG_UST_TRACEPOINT_EVENT_INSTANCE(
|
||||
whippet, tracepoint, whippet, mutator_restarted, LTTNG_UST_TP_ARGS())
|
||||
LTTNG_UST_TRACEPOINT_EVENT_INSTANCE(
|
||||
whippet, tracepoint, whippet, mutator_removed, LTTNG_UST_TP_ARGS())
|
||||
|
||||
/*
|
||||
* Use LTTNG_UST_TRACEPOINT_EVENT(), LTTNG_UST_TRACEPOINT_EVENT_CLASS(),
|
||||
* LTTNG_UST_TRACEPOINT_EVENT_INSTANCE(), and
|
||||
* LTTNG_UST_TRACEPOINT_LOGLEVEL() here.
|
||||
*/
|
||||
|
||||
#endif /* _TP_H */
|
||||
|
||||
#include <lttng/tracepoint-event.h>
|
17
api/gc-tracepoint.h
Normal file
17
api/gc-tracepoint.h
Normal file
|
@ -0,0 +1,17 @@
|
|||
#ifndef GC_TRACEPOINT_H
|
||||
#define GC_TRACEPOINT_H
|
||||
|
||||
#ifdef GC_TRACEPOINT_LTTNG
|
||||
|
||||
#include "gc-lttng.h"
|
||||
|
||||
#define GC_TRACEPOINT(...) \
|
||||
lttng_ust_tracepoint(whippet, __VA_ARGS__)
|
||||
|
||||
#else // GC_TRACEPOINT_LTTNG
|
||||
|
||||
#define GC_TRACEPOINT(...) do {} while (0)
|
||||
|
||||
#endif // GC_TRACEPOINT_LTTNG
|
||||
|
||||
#endif // GC_TRACEPOINT_H
|
10
embed.mk
10
embed.mk
|
@ -12,11 +12,17 @@ V ?= 1
|
|||
v_0 = @
|
||||
v_1 =
|
||||
|
||||
GC_USE_LTTNG := $(shell pkg-config --exists lttng-ust && echo 1)
|
||||
GC_LTTNG_CPPFLAGS := $(if $(GC_USE_LTTNG), $(shell pkg-config --cflags lttng-ust),)
|
||||
GC_LTTNG_LIBS := $(if $(GC_USE_LTTNG), $(shell pkg-config --libs lttng-ust),)
|
||||
GC_TRACEPOINT_CPPFLAGS = $(if $(GC_USE_LTTNG),$(GC_LTTNG_CPPFLAGS) -DGC_TRACEPOINT_LTTNG=1,)
|
||||
GC_TRACEPOINT_LIBS = $(GC_LTTNG_LIBS)
|
||||
|
||||
GC_V = $(v_$(V))
|
||||
GC_CC = gcc
|
||||
GC_CFLAGS = -Wall -flto -fno-strict-aliasing -fvisibility=hidden -Wno-unused $(GC_BUILD_CFLAGS)
|
||||
GC_CPPFLAGS = -I$(WHIPPET)api
|
||||
GC_LDFLAGS = -lpthread -flto=auto
|
||||
GC_CPPFLAGS = -I$(WHIPPET)api $(GC_TRACEPOINT_CPPFLAGS)
|
||||
GC_LDFLAGS = -lpthread -flto=auto $(GC_TRACEPOINT_LIBS)
|
||||
GC_DEPFLAGS =
|
||||
GC_COMPILE = $(GC_V)$(GC_CC) $(GC_CFLAGS) $(GC_CPPFLAGS) $(GC_DEPFLAGS) -o $@
|
||||
GC_LINK = $(GC_V)$(GC_CC) $(GC_LDFLAGS) -o $@
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
'("bash"
|
||||
"coreutils"
|
||||
"gcc-toolchain"
|
||||
"lttng-ust"
|
||||
"glibc"
|
||||
"libgc"
|
||||
"make"
|
||||
|
|
6
src/gc-tracepoint.c
Normal file
6
src/gc-tracepoint.c
Normal file
|
@ -0,0 +1,6 @@
|
|||
#include <assert.h>
|
||||
#ifdef GC_TRACEPOINT_LTTNG
|
||||
#define LTTNG_UST_TRACEPOINT_DEFINE
|
||||
#define LTTNG_UST_TRACEPOINT_CREATE_PROBES
|
||||
#include "gc-lttng.h"
|
||||
#endif // GC_TRACEPOINT_LTTNG
|
Loading…
Add table
Add a link
Reference in a new issue