Date: Tue, 08 Nov 2011 18:35:42 -0800 From: Julian Elischer <julian@freebsd.org> To: Arnaud Lacombe <lacombar@gmail.com> Cc: freebsd-current@freebsd.org Subject: Re: Using Instruction Pointer address in debug interfaces [Was: Re: vm_page_t related KBI [Was: Re: panic at vm_page_wire with FreeBSD 9.0 Beta 3]] Message-ID: <4EB9E6FE.3060102@freebsd.org> In-Reply-To: <CACqU3MWkcKZ2cjh_VJueWUpOS7dzhu%2BMh8yYWVA8X9B9ykOW7w@mail.gmail.com> References: <CACqU3MU_Bk%2BcObCiUa2XtM7fLkSpSDzOZqoZ=khNOR-_6ptYYQ@mail.gmail.com> <4EB9C469.9070208@freebsd.org> <CACqU3MWkcKZ2cjh_VJueWUpOS7dzhu%2BMh8yYWVA8X9B9ykOW7w@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On 11/8/11 5:52 PM, Arnaud Lacombe wrote: > Hi, > > On Tue, Nov 8, 2011 at 7:08 PM, Julian Elischer<julian@freebsd.org> wrote: >> On 11/8/11 10:49 AM, Arnaud Lacombe wrote: >>> Hi, >>> To avoid future complaints about the fact that I would be only "talk" >>> without "action", I did implement what I suggested above. As it is >>> quite a large patch-set, I will not post it directly here, however, it >>> is available on github: >>> >>> https://github.com/lacombar/freebsd/tree/master/topic/kern-lock-debug >>> >>> It convert a bunch of debug interface to use the caller instruction >>> pointer, as well as a proof-of-concept teaching printf(9) to convert >>> IP to symbol_name+offset. >>> >>> It translates in a direct saving of about +250kB on i386's GENERIC, >>> just in kernel text size. Even the worst case, ie LOCK_DEBUG == 0, >>> translates to a save of +80kB. >>> >>> Please note that this is still WIP code. >> A couple of comments. >> Firstly, the idea of a printf method to print the IP as symbol+offset is an >> interesting idea >> that should be followed up in its own right. >> > FWIW, I have no credit in this idea. It has been in Linux for ages and ages. yeah as I said at work I use linux and BSD... the linux stuff that just prints out IP really annoys me. the list stuff and netgraph debug (which should be off in any production system) just require you to be able to see the console. and have sources nearby. if you need the IP use gdb. it's just what you are used to. You are obviously from the dark side ^H^H^H^H^H^H linux. so you are used to doing it that way.. but don't expect us to change just because that's what Linux does. When we have a problem at work on teh Linux driver, my first step is always to try duplicate it on FreeBSD because: 1/ half the time freebsd will just immediatly assert on something and present you with the bug.. done. 2/ I can run gdb through firewire on it on ANY standard unmodified kernel and find it, where on Linux I need to get a whole universe of stupid patches all aligned and MAYBE I might be able to see what is going on. if it's on redhat I need to do this, on ubuntu that, on suse something else ,and on different revisions of the kernel it all changes anyhow.. > That said, IP address are barely used in FreeBSD, there is no legacy. > As such, the API should not use `unsigned long' but `void *'[0]; this > is the natural type returned by `__builtin_return_address()' and the > `&&' operator. This would allow to introduce a modifier to `%p' to do > the translation. possibly intptr_t is what should be used. but I'd expect Bruce to drop in here and let us us know. > - Arnaud > > ps: netgraph is on my target list, as well as the list code, to some extend :) well let me know what you want to do because while it can do with love it is also used by a lot of people. if you nean to remove file/line.. don't. > [0]: as I really hate `caddr_t' it's probably older than you are.. times change. void* wasn't used much back then.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4EB9E6FE.3060102>