Skip site navigation (1)Skip section navigation (2)
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>