Date: Mon, 21 Mar 2011 17:36:13 +0800 From: Xingxing Pan <panxingxing@mprc.pku.edu.cn> To: Chagin Dmitry <dchagin@freebsd.org> Cc: freebsd-hackers@freebsd.org Subject: Re: GSoC'11: DWARF2 call frame information Message-ID: <AANLkTinx%2Bv5ZRr7zq%2BP8gW=umX3PNvhfXpgW8bmUZdtw@mail.gmail.com> In-Reply-To: <20110320181911.GA79862@dchagin.static.corbina.ru> References: <AANLkTinz6B7fsG7Cjc3ZTZ0OAmsOG8x1P25EfOE7Bt4J@mail.gmail.com> <20110319174115.GA33282@dchagin.static.corbina.ru> <AANLkTimp9qoOFr0VfK1F_r1nE3n_5d7W2-q_vSK_UzgW@mail.gmail.com> <20110320071847.GA10579@dchagin.static.corbina.ru> <AANLkTinxVYZcfvpj4mn7kd%2BfiJ83p7430JSsqxatHCeZ@mail.gmail.com> <20110320181911.GA79862@dchagin.static.corbina.ru>
next in thread | previous in thread | raw e-mail | index | archive | help
2011/3/21 Chagin Dmitry <dchagin@freebsd.org>: > On Sun, Mar 20, 2011 at 11:24:21PM +0800, Xingxing Pan wrote: >> >> >> > >> > hm, you should add the .cfi directive in each .S file by hand: >> > http://www.logix.cz/michal/devel/gas-cfi/ >> > >> > -- >> > Have fun! >> > chd >> > >> >> Thanks for your reply. I think I have got the idea. >> For the object files generated by the toolchain, there's no need to worry about >> DWARF call frame information if the DWARF is supported by the toolchain.But >> the assembly written by hand is an exception. >> Different architecture has different assembly. That means I have to add DWARF >> for all these architectures currently supported by FreeBSD. Maybe I need a >> 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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AANLkTinx%2Bv5ZRr7zq%2BP8gW=umX3PNvhfXpgW8bmUZdtw>