util: add disk_cache_get_function_identifier()
authorTimothy Arceri <tarceri@itsqueeze.com>
Wed, 19 Sep 2018 01:44:12 +0000 (11:44 +1000)
committerTimothy Arceri <tarceri@itsqueeze.com>
Tue, 2 Oct 2018 23:49:21 +0000 (09:49 +1000)
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 <marek.olsak@amd.com>
src/util/disk_cache.h

index c8685a53ed3024951cf618dd5428c8e8fbe3bb5d..3129de8ec9d15444229b54e437af0bdd00957019 100644 (file)
@@ -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. */