auto import from //depot/cupcake/@135843
diff --git a/tools/apriori/source.c b/tools/apriori/source.c
new file mode 100644
index 0000000..69c57c7
--- /dev/null
+++ b/tools/apriori/source.c
@@ -0,0 +1,18 @@
+#include <source.h>
+
+void find_section(source_t *source, Elf64_Addr address,
+                  Elf_Scn **scn, 
+                  GElf_Shdr *shdr, 
+                  Elf_Data **data)
+{
+    range_t *range = find_range(source->sorted_sections, address);
+    FAILIF(NULL == range, 
+           "Cannot match address %lld to any range in [%s]!\n",
+           address,
+           source->name);
+    *scn = (Elf_Scn *)range->user;
+    ASSERT(*scn);
+    FAILIF_LIBELF(NULL == gelf_getshdr(*scn, shdr), gelf_getshdr);
+    *data = elf_getdata(*scn, NULL);
+    FAILIF_LIBELF(NULL == *data, elf_getdata);
+}