Page MenuHomeFreeBSD

D1718.1775719581.diff
No OneTemporary

Size
1 KB
Referenced Files
None
Subscribers
None

D1718.1775719581.diff

Index: sys/cddl/dev/fbt/fbt.c
===================================================================
--- sys/cddl/dev/fbt/fbt.c
+++ sys/cddl/dev/fbt/fbt.c
@@ -309,7 +309,8 @@
*lc->ctfoffp = ctfoff;
for (i = 0; i < lc->nsym; i++, ctfoff++, symp++) {
- if (symp->st_name == 0 || symp->st_shndx == SHN_UNDEF) {
+ if (symp->st_name == 0 || symp->st_shndx == SHN_UNDEF ||
+ symp->st_shndx == SHN_FBSD_CACHED) {
*ctfoff = 0xffffffff;
continue;
}
Index: sys/kern/link_elf_obj.c
===================================================================
--- sys/kern/link_elf_obj.c
+++ sys/kern/link_elf_obj.c
@@ -1234,7 +1234,7 @@
elf_obj_lookup(linker_file_t lf, Elf_Size symidx, int deps)
{
elf_file_t ef = (elf_file_t)lf;
- const Elf_Sym *sym;
+ Elf_Sym *sym;
const char *symbol;
Elf_Addr ret;
@@ -1262,7 +1262,12 @@
if (*symbol == 0)
return (0);
ret = ((Elf_Addr)linker_file_lookup_symbol(lf, symbol, deps));
- return ret;
+ /* Cache global lookups */
+ if (ret != 0) {
+ sym->st_shndx = SHN_FBSD_CACHED;
+ sym->st_value = ret;
+ }
+ return (ret);
case STB_WEAK:
printf("link_elf_obj: Weak symbols not supported\n");
Index: sys/sys/elf_common.h
===================================================================
--- sys/sys/elf_common.h
+++ sys/sys/elf_common.h
@@ -361,6 +361,7 @@
#define SHN_LOPROC 0xff00 /* First processor-specific. */
#define SHN_HIPROC 0xff1f /* Last processor-specific. */
#define SHN_LOOS 0xff20 /* First operating system-specific. */
+#define SHN_FBSD_CACHED SHN_LOOS /* Cached global in local symtab. */
#define SHN_HIOS 0xff3f /* Last operating system-specific. */
#define SHN_ABS 0xfff1 /* Absolute values. */
#define SHN_COMMON 0xfff2 /* Common data. */

File Metadata

Mime Type
text/plain
Expires
Thu, Apr 9, 7:26 AM (13 h, 6 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28307369
Default Alt Text
D1718.1775719581.diff (1 KB)

Event Timeline