Date: Sun, 20 Apr 2008 10:38:32 -0700 (PDT) From: Luke Dean <LukeD@pobox.com> To: freebsd-stable@freebsd.org Subject: kvm_open: kvm_nlist: No such file or directory Message-ID: <20080420101554.J57244@border.lukas.is-a-geek.org>
next in thread | raw e-mail | index | archive | help
A few weeks ago I did a source upgrade from 6.2 to 7-STABLE. I didn't "make delete-old" so a bunch of old libraries and such were left lying around causing problems when I rebuilt all my ports. I'd read about some recent improvements to DDB and SCHED_ULE in 7-STABLE, and it's a miserable snowy weekend in Seattle right now, so I decided I'd take this opportunity to update my system to the latest 7-STABLE and get rid of those old libraries properly this time. Now sysutils/wmmemmon and sysutils/wmcpuload stopped working. Both die with: kvm_open: kvm_nlist: No such file or directory error extracting symbols I found two PRs for other ports (ascpu and wmcube-gdk) to fix similar problems, but they seem to be related to 8-CURRENT. The solution in both of these cases is to use sysctls instead of using kvm. PR numbers are 119923 and 120142. My question is should the existing code work in 7-STABLE or do wmmemmon and wmcpuload need to be changed to use sysctls? They worked for me for a couple of weeks on 7-STABLE, but like I said, I had old libraries lying around and some of the windowmaker stuff chose to link to them. I have since cleaned up my system and rebuilt (I believe) everything and now the ports no longer work. This is what I believe is the offending code snippet from sysutils/wmmemmon's mem_freebsd.c file: -------------------------------------------------------------- static kvm_t *kvm_data = NULL; static int pageshift; static struct nlist nlst[] = { {"_cp_time"}, {"_cnt"}, {0} }; /* initialize function */ void mem_init(void) { int pagesize = getpagesize(); pageshift = 0; while (pagesize > 1) { pageshift++; pagesize >>= 1; } kvm_data = kvm_open(NULL, NULL, NULL, O_RDONLY, "kvm_open"); if (kvm_data == NULL) { fprintf(stderr, "can't open kernel virtual memory"); exit(1); } kvm_nlist(kvm_data, nlst); if (nlst[0].n_type == 0 || nlst[1].n_type == 0) { fprintf(stderr, "error extracting symbols"); exit(1); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20080420101554.J57244>