View | Details | Raw Unified | Return to bug 192249
Collapse All | Expand All

(-)b/sys/cddl/dev/fbt/fbt.c (-1 / +2 lines)
Lines 598-608 fbt_ctfoff_init(modctl_t *lf, linker_ctf_t *lc) Link Here
598
		return (ENOMEM);
598
		return (ENOMEM);
599
599
600
	*lc->ctfoffp = ctfoff;
600
	*lc->ctfoffp = ctfoff;
601
601
602
	for (i = 0; i < lc->nsym; i++, ctfoff++, symp++) {
602
	for (i = 0; i < lc->nsym; i++, ctfoff++, symp++) {
603
		if (symp->st_name == 0 || symp->st_shndx == SHN_UNDEF) {
603
		if (symp->st_name == 0 || symp->st_shndx == SHN_UNDEF ||
604
		    symp->st_shndx == SHN_FBSD_CACHED) {
604
			*ctfoff = 0xffffffff;
605
			*ctfoff = 0xffffffff;
605
			continue;
606
			continue;
606
		}
607
		}
607
608
608
		switch (ELF_ST_TYPE(symp->st_info)) {
609
		switch (ELF_ST_TYPE(symp->st_info)) {
(-)b/sys/cddl/dev/fbt/fbt_powerpc.c (-1 / +2 lines)
Lines 521-531 fbt_ctfoff_init(modctl_t *lf, linker_ctf_t *lc) Link Here
521
		return (ENOMEM);
521
		return (ENOMEM);
522
522
523
	*lc->ctfoffp = ctfoff;
523
	*lc->ctfoffp = ctfoff;
524
524
525
	for (i = 0; i < lc->nsym; i++, ctfoff++, symp++) {
525
	for (i = 0; i < lc->nsym; i++, ctfoff++, symp++) {
526
		if (symp->st_name == 0 || symp->st_shndx == SHN_UNDEF) {
526
		if (symp->st_name == 0 || symp->st_shndx == SHN_UNDEF ||
527
		    symp->st_shndx == SHN_FBSD_CACHED) {
527
			*ctfoff = 0xffffffff;
528
			*ctfoff = 0xffffffff;
528
			continue;
529
			continue;
529
		}
530
		}
530
531
531
		switch (ELF_ST_TYPE(symp->st_info)) {
532
		switch (ELF_ST_TYPE(symp->st_info)) {
(-)b/sys/kern/link_elf_obj.c (-2 / +7 lines)
Lines 1203-1213 link_elf_each_function_nameval(linker_file_t file, Link Here
1203
 */
1203
 */
1204
static Elf_Addr
1204
static Elf_Addr
1205
elf_obj_lookup(linker_file_t lf, Elf_Size symidx, int deps)
1205
elf_obj_lookup(linker_file_t lf, Elf_Size symidx, int deps)
1206
{
1206
{
1207
	elf_file_t ef = (elf_file_t)lf;
1207
	elf_file_t ef = (elf_file_t)lf;
1208
	const Elf_Sym *sym;
1208
	Elf_Sym *sym;
1209
	const char *symbol;
1209
	const char *symbol;
1210
	Elf_Addr ret;
1210
	Elf_Addr ret;
1211
1211
1212
	/* Don't even try to lookup the symbol if the index is bogus. */
1212
	/* Don't even try to lookup the symbol if the index is bogus. */
1213
	if (symidx >= ef->ddbsymcnt)
1213
	if (symidx >= ef->ddbsymcnt)
Lines 1231-1241 elf_obj_lookup(linker_file_t lf, Elf_Size symidx, int deps) Link Here
1231
1231
1232
		/* Force a lookup failure if the symbol name is bogus. */
1232
		/* Force a lookup failure if the symbol name is bogus. */
1233
		if (*symbol == 0)
1233
		if (*symbol == 0)
1234
			return (0);
1234
			return (0);
1235
		ret = ((Elf_Addr)linker_file_lookup_symbol(lf, symbol, deps));
1235
		ret = ((Elf_Addr)linker_file_lookup_symbol(lf, symbol, deps));
1236
		return ret;
1236
		/* Cache global lookups */
1237
		if (ret != 0) {
1238
			sym->st_shndx = SHN_FBSD_CACHED;
1239
			sym->st_value = ret;
1240
		}
1241
		return (ret);
1237
1242
1238
	case STB_WEAK:
1243
	case STB_WEAK:
1239
		printf("link_elf_obj: Weak symbols not supported\n");
1244
		printf("link_elf_obj: Weak symbols not supported\n");
1240
		return (0);
1245
		return (0);
1241
1246
(-)b/sys/sys/elf_common.h (+1 lines)
Lines 248-257 typedef struct { Link Here
248
#define	SHN_UNDEF	     0		/* Undefined, missing, irrelevant. */
248
#define	SHN_UNDEF	     0		/* Undefined, missing, irrelevant. */
249
#define	SHN_LORESERVE	0xff00		/* First of reserved range. */
249
#define	SHN_LORESERVE	0xff00		/* First of reserved range. */
250
#define	SHN_LOPROC	0xff00		/* First processor-specific. */
250
#define	SHN_LOPROC	0xff00		/* First processor-specific. */
251
#define	SHN_HIPROC	0xff1f		/* Last processor-specific. */
251
#define	SHN_HIPROC	0xff1f		/* Last processor-specific. */
252
#define	SHN_LOOS	0xff20		/* First operating system-specific. */
252
#define	SHN_LOOS	0xff20		/* First operating system-specific. */
253
#define	SHN_FBSD_CACHED	SHN_LOOS	/* Cached global in local symtab. */
253
#define	SHN_HIOS	0xff3f		/* Last operating system-specific. */
254
#define	SHN_HIOS	0xff3f		/* Last operating system-specific. */
254
#define	SHN_ABS		0xfff1		/* Absolute values. */
255
#define	SHN_ABS		0xfff1		/* Absolute values. */
255
#define	SHN_COMMON	0xfff2		/* Common data. */
256
#define	SHN_COMMON	0xfff2		/* Common data. */
256
#define	SHN_XINDEX	0xffff		/* Escape -- index stored elsewhere. */
257
#define	SHN_XINDEX	0xffff		/* Escape -- index stored elsewhere. */
257
#define	SHN_HIRESERVE	0xffff		/* Last of reserved range. */
258
#define	SHN_HIRESERVE	0xffff		/* Last of reserved range. */

Return to bug 192249