From mboxrd@z Thu Jan 1 00:00:00 1970 Message-ID: From: erik quanstrom Date: Fri, 25 Jul 2008 07:47:32 -0400 To: steve@quintile.net, 9fans@9fans.net MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Subject: Re: [9fans] kernel, errfmt Topicbox-Message-UUID: f02c82de-ead3-11e9-9d60-3106f5b1d025 > I have become confused trying to understand > the kernel's linkage. > > the kernel uses print() in many places, e.g. > /sys/src/9/port/xalloc.c:80 > > /sys/src/9/port/devcons.c:211 This calls vseprint(). > > /sys/src/libc/fmt/fmt.c:47 The fmt library installs %r > (errfmt) by default. > > /sys/src/libc/fmt/errfmt.c:10 references rerrstr(). > > /sys/src/libc/9sys/rerrstr.c:10 references errstr(). > > Errstr() is a system call and does not exist in the > kernel (where it becomes syserrstr()). > > How can this work? ...or does the kernel itself > perform system calls? i believe /sys/src/libc/9syscall generates entry points. there are text symbols in libc.a for the symbols you mention. however, using %r might be a problem. the kernel should likely have a stub int errfmt(Fmt *f) { return fmtstrcpy(f, up->errstr); } - erik