[ELF] add elf_hash function to compute the hash value of a symbol in the dynamic...
authorShankar Easwaran <shankare@codeaurora.org>
Mon, 25 Mar 2013 16:02:10 +0000 (16:02 +0000)
committerShankar Easwaran <shankare@codeaurora.org>
Mon, 25 Mar 2013 16:02:10 +0000 (16:02 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@177872 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Object/ELF.h

index 36e35f5748169ae66ad5841be6d0583c90ee42ea..9c2c7a64d5ec09aa9fd90df05f77d0947c93646f 100644 (file)
@@ -2704,6 +2704,21 @@ static inline error_code GetELFSymbolVersion(const ObjectFile *Obj,
   llvm_unreachable("Object passed to GetELFSymbolVersion() is not ELF");
 }
 
+/// This function returns the hash value for a symbol in the .dynsym section
+/// Name of the API remains consistent as specified in the libelf
+/// REF : http://eternallyconfuzzled.com/tuts/algorithms/jsw_tut_hashing.aspx
+static inline unsigned elf_hash(StringRef &symbolName) {
+  unsigned h = 0, g;
+  for (unsigned i = 0; i < symbolName.size(); i++) {
+    h = (h << 4) + symbolName[i];
+    g = h & 0xf0000000L;
+    if (g != 0)
+      h ^= g >> 24;
+    h &= ~g;
+  }
+  return h;
+}
+
 }
 }