Page MenuHomeFreeBSD

D46764.diff
No OneTemporary

D46764.diff

diff --git a/lib/libkldelf/ef.c b/lib/libkldelf/ef.c
--- a/lib/libkldelf/ef.c
+++ b/lib/libkldelf/ef.c
@@ -89,6 +89,7 @@
.seg_read_string = ef_seg_read_string,
.symaddr = ef_symaddr,
.lookup_set = ef_lookup_set,
+ .lookup_symbol = ef_lookup_symbol,
};
static void
diff --git a/lib/libkldelf/ef_obj.c b/lib/libkldelf/ef_obj.c
--- a/lib/libkldelf/ef_obj.c
+++ b/lib/libkldelf/ef_obj.c
@@ -109,6 +109,7 @@
.seg_read_string = ef_obj_seg_read_string,
.symaddr = ef_obj_symaddr,
.lookup_set = ef_obj_lookup_set,
+ .lookup_symbol = ef_obj_lookup_symbol,
};
static GElf_Off
diff --git a/lib/libkldelf/elf.c b/lib/libkldelf/elf.c
--- a/lib/libkldelf/elf.c
+++ b/lib/libkldelf/elf.c
@@ -686,3 +686,9 @@
return (efile->ef_reloc(efile, reldata, reltype, relbase, dataoff, len,
dest));
}
+
+int
+elf_lookup_symbol(struct elf_file *efile, const char *name, GElf_Sym **sym)
+{
+ return (EF_LOOKUP_SYMBOL(efile, name, sym));
+}
diff --git a/lib/libkldelf/kldelf.h b/lib/libkldelf/kldelf.h
--- a/lib/libkldelf/kldelf.h
+++ b/lib/libkldelf/kldelf.h
@@ -48,6 +48,8 @@
(ef)->ef_ops->symaddr((ef)->ef_ef, symidx)
#define EF_LOOKUP_SET(ef, name, startp, stopp, countp) \
(ef)->ef_ops->lookup_set((ef)->ef_ef, name, startp, stopp, countp)
+#define EF_LOOKUP_SYMBOL(ef, name, sym) \
+ (ef)->ef_ops->lookup_symbol((ef)->ef_ef, name, sym)
/* XXX, should have a different name. */
typedef struct ef_file *elf_file_t;
@@ -67,6 +69,7 @@
GElf_Addr (*symaddr)(elf_file_t ef, GElf_Size symidx);
int (*lookup_set)(elf_file_t ef, const char *name, GElf_Addr *startp,
GElf_Addr *stopp, long *countp);
+ int (*lookup_symbol)(elf_file_t ef, const char *name, GElf_Sym **sym);
};
typedef int (elf_reloc_t)(struct elf_file *ef, const void *reldata,
@@ -310,6 +313,16 @@
int elf_reloc(struct elf_file *ef, const void *reldata, Elf_Type reltype,
GElf_Addr relbase, GElf_Addr dataoff, size_t len, void *dest);
+/*
+ * Find the symbol with the specified symbol name 'name' within the given
+ * 'efile'. 0 is returned when such a symbol is found, otherwise ENOENT is
+ * returned.
+ *
+ * XXX: This only return the first symbol being found when traversing symtab.
+ */
+int elf_lookup_symbol(struct elf_file *efile, const char *name,
+ GElf_Sym **sym);
+
__END_DECLS
#endif /* _KLDELF_H_*/

File Metadata

Mime Type
text/plain
Expires
Sat, Jan 18, 11:28 PM (21 h, 34 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
15904415
Default Alt Text
D46764.diff (2 KB)

Event Timeline