fix TLS memory leak with dlopen
[uclibc-ng.git] / libc / sysdeps / linux / csky / __longjmp.S
blob8dbd3d6d6154e40a674553684a797ced2a7b32ee
1 /*
2  * Copyright (C) 2017 Hangzhou C-SKY Microsystems co.,ltd.
3  *
4  * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB
5  * in this tarball.
6  */
8 #include <sysdep.h>
10 ENTRY(__longjmp)
11         ldw     sp, (a0, 0)
12         ldw     lr, (a0, 4)
14         ldw     l0, (a0, 8)
15         ldw     l1, (a0, 12)
16         ldw     l2, (a0, 16)
17         ldw     l3, (a0, 20)
18         ldw     l4, (a0, 24)
19         ldw     l5, (a0, 28)
21 #ifdef __CSKYABIV2__
22         ldw     l6, (a0, 32)
23         ldw     l7, (a0, 36)
24         ldw     l8, (a0, 40)
25         ldw     l9, (a0, 44)
27         ldw     r26, (a0, 48)
28         ldw     r27, (a0, 52)
29         ldw     gb,  (a0, 56)
30         ldw     r29, (a0, 60)
31         ldw     r30, (a0, 64)
32         ldw     tls, (a0, 68)
33 #else
34         ldw     gb, (a0, 32)
35 #endif
37         mov    a0, a1
38         cmpnei a1, 0
39         bt     1f
40         movi   a0, 1
42         rts
44 END(__longjmp)
45 libc_hidden_def(__longjmp)