libunwind-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Libunwind-devel] libunwind on x86 (32-bit) not using unwind info?


From: Arun Sharma
Subject: Re: [Libunwind-devel] libunwind on x86 (32-bit) not using unwind info?
Date: Mon, 31 Mar 2008 12:18:34 -0700

On Mon, Mar 31, 2008 at 1:25 AM, Ralph Loader <address@hidden> wrote:
> >
> > 2. unwinding with -fomit-frame-pointer doesn't work and often
> > segfaults.
> >
>
> Which version of libunwind are you testing?

I first noticed problems with whatever Fedora rawhide has.  So I
built 0.99-alpha myself and still have the same problems.

You can compile with --enable-debug and then try:

UNW_DEBUG_LEVEL=15 ./unw-test

to see what's going on.

Looks like some of my patches that worked around the problem on x86_64 need to be back ported to x86.

http://git.kernel.org/gitweb.cgi?p=libs/libunwind/libunwind.git;a=blobdiff;f=src/x86_64/Gis_signal_frame.c;h=67eab27ff0f775670643dc1acb7da7cc1f91ac57;hp=221eab89266a5ba6274a1030ee67b241f96e6401;hb=7c0907634d5639158ed762bb2d14f1ac06228615;hpb=58888a5060d5e732c1ab1f0bf6a6c480153dabbd
http://git.kernel.org/gitweb.cgi?p=libs/libunwind/libunwind.git;a=commit;h=527225e492553b997d16adca7cc3bb472d5ef628

With these patches, unw_step() will return 0 instead of seg faulting. The real problem however needs to be fixed.
This is how far I got:

 >_Ux86_step: (cursor=0xffffc584, ip=0x08048771)
              >_Ux86_dwarf_find_proc_info: looking for IP=0x8048770
               >callback: checking , base=0x0)
               >callback: found table `': segbase=0x8048cd0, len=110, gp=0x804aff4, table_data=0x8048cdc
               >_Ux86_dwarf_search_unwind_table: ip=0x8048770, start_ip=0x804875f
            >_Ux86_dwarf_extract_proc_info_from_fde: FDE @ 0x8048f0c
               >parse_cie: CIE parsed OK, augmentation = "", handler=0x0
               >_Ux86_dwarf_extract_proc_info_from_fde: FDE covers IP 0x804875f-0x8048771, LSDA=0x0
               >run_cfi_program: CFA_def_cfa r4+0x4
               >run_cfi_program: CFA_offset r8 at cfa+0xfffffffc
               >run_cfi_program: CFA_advance_loc to 0x8048760
               >run_cfi_program: CFA_def_cfa_offset 0x8
               >run_cfi_program: CFA_offset r3 at cfa+0xfffffff8
               >_Ux86_dwarf_step: returning 1
  >_Ux86_step: returning 1
 >_Ux86_step: (cursor=0xffffc584, ip=0x000000e9)
              >_Ux86_dwarf_find_proc_info: looking for IP=0xe8

Obviously, ip=0x000000e9 is bogus. We need to figure out if the compiler generated bad unwind descriptors or it was libunwind's fault. I'll keep looking.

 -Arun



reply via email to

[Prev in Thread] Current Thread [Next in Thread]