diff -u /home/peter/kld/kldxref/Makefile ./Makefile --- /home/peter/kld/kldxref/Makefile Wed Sep 27 03:20:07 2000 +++ ./Makefile Tue Sep 4 00:56:44 2001 @@ -4,6 +4,6 @@ SRCS= ef.c kldxref.c NOMAN= -CFLAGS+= -Wall +CFLAGS+= -Wall -I${.CURDIR}/../sys -I. .include diff -u /home/peter/kld/kldxref/ef.c ./ef.c --- /home/peter/kld/kldxref/ef.c Wed Sep 27 03:25:37 2000 +++ ./ef.c Tue Sep 4 04:07:31 2001 @@ -234,14 +234,14 @@ warnx("%s: no .dynstr section found\n", ef->ef_name); return EFTYPE; } - if (ef_read_entry(ef, ef->ef_symoff, ef->ef_nchains * sizeof(Elf_Sym), + if (ef_read_entry(ef, ef_get_offset(ef, ef->ef_symoff), ef->ef_nchains * sizeof(Elf_Sym), (void**)&ef->ef_symtab) != 0) { if (ef->ef_verbose) warnx("%s: can't load .dynsym section (0x%lx)", ef->ef_name, (long)ef->ef_symoff); return EIO; } - if (ef_read_entry(ef, ef->ef_stroff, ef->ef_strsz, + if (ef_read_entry(ef, ef_get_offset(ef, ef->ef_stroff), ef->ef_strsz, (void**)&ef->ef_strtab) != 0) { warnx("can't load .dynstr section"); return EIO; @@ -366,8 +366,10 @@ break; } if (ef_read_entry(ef, phdyn->p_offset, - phdyn->p_filesz, (void**)&ef->ef_dyn) != 0) + phdyn->p_filesz, (void**)&ef->ef_dyn) != 0) { + printf("ef_read_entry failed\n"); break; + } error = ef_parse_dynamic(ef); if (error) break; diff -u /home/peter/kld/kldxref/ef.h ./ef.h --- /home/peter/kld/kldxref/ef.h Wed Sep 20 01:26:47 2000 +++ ./ef.h Tue Sep 4 02:21:50 2001 @@ -1,8 +1,8 @@ #ifndef _EF_H_ #define _EF_H_ -#define EFT_KLD 0 -#define EFT_KERNEL 1 +#define EFT_KLD 1 +#define EFT_KERNEL 2 typedef struct elf_file { char* ef_name; Only in .: fix diff -u /home/peter/kld/kldxref/kldxref.c ./kldxref.c --- /home/peter/kld/kldxref/kldxref.c Wed Sep 27 03:25:37 2000 +++ ./kldxref.c Tue Sep 4 04:07:52 2001 @@ -39,6 +39,7 @@ #include #include #include +#include #define FREEBSD_ELF #include #include @@ -201,7 +202,7 @@ struct mod_info *mip;*/ void **p, **orgp; int error, nmlen; - long entries; + long start, finish, entries; Elf_Sym *sym; char kldmodname[MAXMODNAME + 1], cval[MAXMODNAME + 1], *cp; @@ -210,7 +211,7 @@ error = ef_open(filename, &ef, verbose); if (error) return error; - if (ef.ef_type != EFT_KLD) { + if (ef.ef_type != EFT_KLD && ef.ef_type != EFT_KERNEL) { ef_close(&ef); return 0; } @@ -223,9 +224,12 @@ /* fprintf(fxref, "%s:%s:%d\n", kldmodname, kldname, 0);*/ } do { - check(ef_lookup_symbol(&ef, MDT_SETNAME, &sym)); - check(ef_seg_read(&ef, sym->st_value, sizeof(entries), &entries)); - check(ef_read_entry(&ef, -1, sizeof(*p) * entries, (void**)&p)); + check(ef_lookup_symbol(&ef, "__start_set_" MDT_SETNAME, &sym)); + start = sym->st_value; + check(ef_lookup_symbol(&ef, "__stop_set_" MDT_SETNAME, &sym)); + finish = sym->st_value; + entries = (finish - start) / sizeof(void *); + check(ef_seg_read_entry(&ef, start, sizeof(*p) * entries, (void**)&p)); orgp = p; while(entries--) { check(ef_seg_read(&ef, (Elf_Off)*p, sizeof(md), &md)); @@ -291,8 +295,10 @@ } if (argc - optind < 1) usage(); + argc -= optind; + argv += optind; - ftsp = fts_open(++argv, fts_options, 0); + ftsp = fts_open(argv, fts_options, 0); if (ftsp == NULL) exit(1); Only in .: obj