+ TRACE("No symbol");
+ return 1;
+}
+
+int Elf32GetSymbol(void *Base, const char *Name, void **ret, size_t *Size)
+{
+ int section, binding;
+ TRACE("Elf32GetSymbol(%p,%s,...)", Base, Name);
+ if( Elf32GetSymbolInfo(Base, Name, ret, Size, §ion, &binding, NULL) )
+ return 0;
+ if( section == SHN_UNDEF ) {
+ TRACE("Elf32GetSymbol: Undefined %p", *ret, (Size?*Size:0), section);
+ return 0;
+ }
+ if( binding == STB_WEAK ) {
+ TRACE("Elf32GetSymbol: Weak, return %p+0x%x,section=%i", *ret, (Size?*Size:0), section);
+ return 2;
+ }
+ TRACE("Elf32GetSymbol: Found %p+0x%x,section=%i", *ret, (Size?*Size:0), section);
+ return 1;
+}
+
+#ifdef SUPPORT_ELF64
+typedef int (*t_elf64_doreloc)(void *Base, const char *strtab, Elf64_Sym *symtab, Elf64_Xword r_info, void *ptr, Elf64_Sxword addend);
+
+int _Elf64DoReloc_X86_64(void *Base, const char *strtab, Elf64_Sym *symtab, Elf64_Xword r_info, void *ptr, Elf64_Sxword addend)
+{
+ int sym = ELF64_R_SYM(r_info);
+ int type = ELF64_R_TYPE(r_info);
+ const char *symname = strtab + symtab[sym].st_name;
+ void *symval;
+ //DEBUGS("_Elf64DoReloc: %s", symname);
+ switch( type )