summaryrefslogtreecommitdiffstats
path: root/src/util/disk_cache.h
diff options
context:
space:
mode:
authorTimothy Arceri <[email protected]>2018-09-19 11:44:12 +1000
committerTimothy Arceri <[email protected]>2018-10-03 09:49:21 +1000
commit83ea8dd99bb16e5d9bb880e64cd2047abc536b70 (patch)
tree8edd3d176fa8d553ab6396d54adb3cd8d13b01cb /src/util/disk_cache.h
parent6a884014e46ab0ccca5c900f692898ffb02469e6 (diff)
util: add disk_cache_get_function_identifier()
This can be used as a drop in replacement for disk_cache_get_function_timestamp(). Here we use build-id to generate a driver-id rather than build timestamp if available. This should resolve issues such as distros using reproducable builds and flatpak not having real build timestamps. Reviewed-by: Marek Olšák <[email protected]>
Diffstat (limited to 'src/util/disk_cache.h')
-rw-r--r--src/util/disk_cache.h16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/util/disk_cache.h b/src/util/disk_cache.h
index c8685a53ed3..3129de8ec9d 100644
--- a/src/util/disk_cache.h
+++ b/src/util/disk_cache.h
@@ -27,6 +27,7 @@
#ifdef HAVE_DLFCN_H
#include <dlfcn.h>
#include <stdio.h>
+#include "util/build_id.h"
#endif
#include <assert.h>
#include <stdint.h>
@@ -112,6 +113,21 @@ disk_cache_get_function_timestamp(void *ptr, uint32_t* timestamp)
return true;
}
+
+static inline bool
+disk_cache_get_function_identifier(void *ptr, uint32_t *id)
+{
+#ifdef HAVE_DL_ITERATE_PHDR
+ const struct build_id_note *note = NULL;
+ if ((note = build_id_find_nhdr_for_addr(ptr))) {
+ const uint8_t *id_sha1 = build_id_data(note);
+ assert(id_sha1);
+ *id = *id_sha1;
+ return true;
+ } else
+#endif
+ return disk_cache_get_function_timestamp(ptr, id);
+}
#endif
/* Provide inlined stub functions if the shader cache is disabled. */