From cefe06af61b7a6387df2d12be0dc2e4c21239c9f Mon Sep 17 00:00:00 2001 From: Zach Brown Date: Wed, 2 Aug 2017 14:12:12 -0700 Subject: [PATCH] scoutfs: add git describe to built module It's handy to quickly find the git commit that built a given module. We add a MOD_INFO() tag for it so we can see it in modinfo on the built module. We add a ELF note that the kernel tracks in /sys/modules/$m/notes/ when the module is loaded. Signed-off-by: Zach Brown --- kmod/Makefile | 7 ++++++- kmod/src/Makefile | 2 ++ kmod/src/super.c | 10 ++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/kmod/Makefile b/kmod/Makefile index 45ea3442..bb162626 100644 --- a/kmod/Makefile +++ b/kmod/Makefile @@ -12,7 +12,12 @@ else SP = @: endif -SCOUTFS_ARGS := CONFIG_SCOUTFS_FS=m -C $(SK_KSRC) M=$(CURDIR)/src +SCOUTFS_GIT_DESCRIBE := \ + $(shell git describe --all --abbrev=6 --long 2>/dev/null || \ + echo not-in-a-git-repository) + +SCOUTFS_ARGS := SCOUTFS_GIT_DESCRIBE=$(SCOUTFS_GIT_DESCRIBE) \ + CONFIG_SCOUTFS_FS=m -C $(SK_KSRC) M=$(CURDIR)/src all: module diff --git a/kmod/src/Makefile b/kmod/src/Makefile index 6f0d66d8..5b824081 100644 --- a/kmod/src/Makefile +++ b/kmod/src/Makefile @@ -1,5 +1,7 @@ obj-$(CONFIG_SCOUTFS_FS) := scoutfs.o +CFLAGS_super.o = -DSCOUTFS_GIT_DESCRIBE=\"$(SCOUTFS_GIT_DESCRIBE)\" + CFLAGS_scoutfs_trace.o = -I$(src) # define_trace.h double include scoutfs-y += alloc.o bio.o btree.o compact.o counters.o data.o dir.o kvec.o \ diff --git a/kmod/src/super.c b/kmod/src/super.c index 8a52c35d..3fd6de5e 100644 --- a/kmod/src/super.c +++ b/kmod/src/super.c @@ -324,6 +324,15 @@ static int __init scoutfs_module_init(void) { int ret; + /* + * gcc only recently learned to let __attribute__(section) add + * SHT_NOTE notes. But the assembler always could. + */ + __asm__ __volatile__ ( + ".section .note.git_describe,\"a\"\n" + ".string \""SCOUTFS_GIT_DESCRIBE"\\n\"\n" + ".previous\n"); + scoutfs_init_counters(); scoutfs_kset = kset_create_and_add("scoutfs", NULL, fs_kobj); @@ -349,3 +358,4 @@ module_exit(scoutfs_module_exit) MODULE_AUTHOR("Zach Brown "); MODULE_LICENSE("GPL"); +MODULE_INFO(git_describe, SCOUTFS_GIT_DESCRIBE);