From 12f03e20c46ff9bd5bc9b4c3f07e51961cc50ec2 Mon Sep 17 00:00:00 2001 From: Emil Date: Wed, 6 Sep 2023 23:57:21 +0000 Subject: [PATCH] reductions, build fixes --- plug/Makefile | 2 +- plug/plug.h | 6 ++++-- src/Makefile | 1 + src/main.c | 5 ++--- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/plug/Makefile b/plug/Makefile index 999a1dc..7f16e9c 100644 --- a/plug/Makefile +++ b/plug/Makefile @@ -1,4 +1,4 @@ -CFLAGS += -shared -fPIE +CFLAGS += -shared -fPIC libplug.so: plug.o ${LINK.c} $+ -o $@ diff --git a/plug/plug.h b/plug/plug.h index aaec119..f367f71 100644 --- a/plug/plug.h +++ b/plug/plug.h @@ -1,10 +1,12 @@ #ifndef PLUG_H_ +#define _QUOTE(name) #name +#define QUOTE(name) _QUOTE(name) #define BIND(lib, func, func_name) *(void **) (&func) = dlsym(lib, func_name) +#define PLUGIN(lib, x) BIND(lib, x, QUOTE(x)) typedef void (*plug_t)(void); - -static plug_t plug; +plug_t plug; #define PLUG_H_ #endif diff --git a/src/Makefile b/src/Makefile index 43c9359..7f6540a 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,4 +1,5 @@ CPPFLAGS += -I../plug -L../plug +LDLIBS += -ldl plugin: main.o ${LINK.c} $+ -o $@ ${LDLIBS} diff --git a/src/main.c b/src/main.c index 2330b9c..d382b58 100644 --- a/src/main.c +++ b/src/main.c @@ -12,19 +12,18 @@ main (void) void * libplug = NULL; while (1) { - if (libplug) { dlclose(libplug); } libplug = dlopen(libplug_fn, RTLD_NOW); - BIND(libplug, plug, "plug"); if (!libplug) { fprintf(stderr, "ERR: Cannot load dynamic library %s: %s\n", libplug_fn, dlerror()); } else { - *(void **) (&plug) = dlsym(libplug, "plug"); + PLUGIN(libplug, plug); printf("frame %d: ", x++); if (plug) { plug(); } else { fprintf(stderr, "ERR: Cannot find %s symbol in %s: %s\n", "plug", libplug_fn, dlerror()); } + dlclose(libplug); } sleep(2); }