On Tue, Mar 22, 2011 at 11:39:58PM +0800, Xingxing Pan wrote: > 2011/3/22 Kostik Belousov <[email protected]>: > > On Mon, Mar 21, 2011 at 08:32:04PM +0300, Chagin Dmitry wrote: > >> On Mon, Mar 21, 2011 at 05:36:13PM +0800, Xingxing Pan wrote: > >> > 2011/3/21 Chagin Dmitry <[email protected]>: > >> > >> powerfull script. > >> > >> > >> > >> Xingxing Pan > >> > > > >> > > hmm, which script? I think enough amd64, i386 and amd64/ia32. > >> > > > >> > > I suggest to write a example before continuing the conversation > >> > > about the GSoC. For example (bcopy || bzero) && cpu_switch. > >> > > Is it ok for you? > >> > > > >> > > -- > >> > > Have fun! > >> > > chd > >> > > > >> > > >> > Hi Chargin, > >> > > >> > Thank you for your reply. > >> > The followings shows how I try to add DWARF for bcopy. > >> > > >> > --- ../8.2.0/sys/i386/include/asm.h 2011-03-21 14:35:56.111973722 > >> > +0800 > >> > +++ asm.h 2011-03-21 15:25:31.564636162 +0800 > >> > @@ -71,7 +71,7 @@ > >> > > >> > #define _ENTRY(x) _START_ENTRY; \ > >> > .globl CNAME(x); .type CNAME(x),@function; > >> > CNAME(x): > >> > -#define END(x) .size x, . - x > >> > +#define END(x) .cfi_endproc; .size x, . - x > >> > > >> > #ifdef PROF > >> > #define ALTENTRY(x) _ENTRY(x); \ > >> > @@ -80,9 +80,10 @@ > >> > popl %ebp; \ > >> > jmp 9f > >> > #define ENTRY(x) _ENTRY(x); \ > >> > - pushl %ebp; movl %esp,%ebp; \ > >> > + .cfi_startproc; \ > >> > + pushl %ebp; .cfi_adjust_cfa_offset 4; movl > >> > %esp,%ebp; .cfi_def_cfa_register %ebp; \ > >> > call PIC_PLT(HIDENAME(mcount)); \ > >> > - popl %ebp; \ > >> > + popl %ebp; .cfi_def_cfa %esp, 4; \ > >> > > >> > --- bcopy.S 2011-03-21 15:51:26.804203809 +0800 > >> > +++ ../8.2.0/lib/libc/i386/string/bcopy.S 2011-03-21 > >> > 14:28:15.023069890 +0800 > >> > @@ -51,9 +51,7 @@ ENTRY(bcopy) > >> > #endif > >> > #endif > >> > pushl %esi > >> > - .cfi_adjust_cfa_offset 4; > >> > pushl %edi > >> > - .cfi_adjust_cfa_offset 4; > >> > #if defined(MEMCOPY) || defined(MEMMOVE) > >> > movl 12(%esp),%edi > >> > movl 16(%esp),%esi > >> > @@ -77,9 +75,7 @@ ENTRY(bcopy) > >> > rep > >> > movsb > >> > popl %edi > >> > - .cfi_adjust_cfa_offset -4; > >> > popl %esi > >> > - .cfi_adjust_cfa_offset -4; > >> > ret > >> > 1: > >> > addl %ecx,%edi /* copy backwards. */ > >> > @@ -98,9 +94,7 @@ ENTRY(bcopy) > >> > rep > >> > movsl > >> > popl %edi > >> > - .cfi_adjust_cfa_offset -4; > >> > popl %esi > >> > - .cfi_adjust_cfa_offset -4; > >> > cld > >> > ret > >> > #ifdef MEMCOPY > >> > > >> > But I don't know how to add DWARF for cpu_switch, because I have no > >> > idea about the circumstance when we need to backtrace through this > >> > function. Suppose there's a cpu switch like this, > >> > threadA->kernel->threadB. Then should the expected backtrace has the > >> > following result? > >> > > >> > threadB's stack > >> > kernel's stack > >> > threadA's stack > >> > >> > >> hmm, ok. good, avoid cpu_switch. > >> First of all, please, read style(9) man page. > >> In the second, evaluate the proposed plan (discussed with kib@): > >> > >> 1) Annotate libc, msun, rtld, libthr (you) > > 1a) Develop and implement a testing plan to verify the implementation. > > 1b) consider doing full register tracking for assembler code. > > > >> 2) vdso (I'm) > >> 3) Annotate signal trampolines (you, after vdso) > >> > >> And i'm going to understand what I need to do to start GSoC for you. > >> Thanks! > >> > >> > >> -- > >> Have fun! > >> chd > > > > > > > > Hi Kostik, > > I think the basic testing method can be using GDB to set breakpoint in > functions and observing the backtrace result. GDB uses Expect. I can > learn something from GDB's testsuite. Sounds good.
> > AFAIK, CFA and return address are enough for unwinding. Dose full > register tracking > means to emit DWARF for all the registers's saving and restoring in > the life time of the function? Not only save and restore, but also for move around. I am mostly about the syscall entry sequence on amd64, see the description of the `syscall' instruction and handling of %rcx in libc sources. Rarely used routines could be left aside.
pgpyDdqJ4T4Oz.pgp
Description: PGP signature

