Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F107752132
D46764.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D46764.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D46764: libkldelf: add elf_lookup_symbol function
Attached
Detach File
Event Timeline
Log In to Comment