[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