libunwind-devel
[Top][All Lists]
Advanced

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

Re: [Libunwind-devel] [aarch64] segfault (non valid c->dwarf.ip) in _ULa


From: David Abdurachmanov
Subject: Re: [Libunwind-devel] [aarch64] segfault (non valid c->dwarf.ip) in _ULaarch64_is_signal_frame (vDSO symbol before signal frame)
Date: Wed, 13 Aug 2014 13:28:15 +0200

On Aug 13, 2014, at 8:08 AM, Arun Sharma wrote:

> On Tue, Aug 12, 2014 at 2:22 AM, David Abdurachmanov
> <address@hidden> wrote:
> 
>> From GDB:
>> 
>> Program received signal SIGSEGV, Segmentation fault.
>> access_mem (as=0x7fb4fd1710 <local_addr_space>, addr=1, val=0x7ffffe2dc8, 
>> write=0, arg=0x7ffffe2e40) at aarch64/Ginit.c:94
>> 94            *val = *(unw_word_t *) addr;
>> 
>> 
>> In unw_is_signal_frame (unw_cursor_t *cursor)
>> 
> 
> My guess is that the kernel you're using is missing unwind directives
> in __kernel_gettimeofday(). Could you check?
> On a recent kernel version, I saw this function was handwritten
> assembly with just .cfi_startproc/endproc.

From the linux trunk:

 51 /* int __kernel_gettimeofday(struct timeval *tv, struct timezone *tz); */
 52 ENTRY(__kernel_gettimeofday)
 53         .cfi_startproc
 54         mov     x2, x30
 55         .cfi_register x30, x2
 56
 57         /* Acquire the sequence counter and get the timespec. */
 58         adr     vdso_data, _vdso_data
 59 1:      seqcnt_acquire
 60         cbnz    use_syscall, 4f
 61
 62         /* If tv is NULL, skip to the timezone code. */
 63         cbz     x0, 2f
 64         bl      __do_get_tspec
 65         seqcnt_check w9, 1b
 66
 67         /* Convert ns to us. */
 68         mov     x13, #1000
 69         lsl     x13, x13, x12
 70         udiv    x11, x11, x13
 71         stp     x10, x11, [x0, #TVAL_TV_SEC]
 72 2:
 73         /* If tz is NULL, return 0. */
 74         cbz     x1, 3f
 75         ldp     w4, w5, [vdso_data, #VDSO_TZ_MINWEST]
 76         stp     w4, w5, [x1, #TZ_MINWEST]
 77 3:
 78         mov     x0, xzr
 79         ret     x2
 80 4:
 81         /* Syscall fallback. */
 82         mov     x8, #__NR_gettimeofday
 83         svc     #0
 84         ret     x2
 85         .cfi_endproc
 86 ENDPROC(__kernel_gettimeofday)

.cfi_startproc/.cfi_register/.cfi_endproc is only used.

For ARMv7 I see include/asm/unwind.h, UNWIND(.fnstart), UNWIND(.fnend), etc.

Such GAS directives are for ARM (ARMv7) and they seem not to be part of 
ARM64/AArch64 (ARMv8).

david


reply via email to

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