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. 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? Thanks. Xingxing Pan _______________________________________________ [email protected] mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "[email protected]"

