提交 4bfa2996 编写于 作者: L lipengzheng

update

Signed-off-by: Nlipengzheng <lipengzheng1@huawei.com>
......@@ -1825,6 +1825,7 @@ musl_inc_root_files = [
musl_src_porting_file = [
"arch/arm/bits/fenv.h",
"arch/generic/bits/shm.h",
"arch/generic/crtbrand.s",
"include/ctype.h",
"include/pthread.h",
"include/sys/capability.h",
......@@ -1849,7 +1850,12 @@ musl_src_porting_file = [
"src/thread/arm/syscall_cp.s",
"src/ldso/dlclose.c",
"ldso/dynlink.c",
<<<<<<< HEAD
"src/exit/atexit.c",
=======
"crt/arm/crti.s",
"crt/aarch64/crti.s",
>>>>>>> 6b2c7684528edfe7e1b0d5064fa9fff242a965c5
]
musl_inc_hook_files = [
......
.section .note.ohos.ident,"a",%note
.balign 4
.type abitag, %object
abitag:
.long 2f-1f // int32_t namesz
.long 3f-2f // int32_t descsz
1:.ascii "OHOS\0" // char name[]
2:.long 1 // int32_t ohos_api
3:
.size abitag, .-abitag
.include "crtbrand.s"
.section .init
.global _init
.type _init,%function
_init:
stp x29,x30,[sp,-16]!
mov x29,sp
.section .fini
.global _fini
.type _fini,%function
_fini:
stp x29,x30,[sp,-16]!
mov x29,sp
.include "crtbrand.s"
.syntax unified
.section .init
.global _init
.type _init,%function
_init:
push {r0,lr}
.section .fini
.global _fini
.type _fini,%function
_fini:
push {r0,lr}
#include <stdlib.h>
#include <stdint.h>
#include "libc.h"
#include "lock.h"
/* Ensure that at least 32 atexit handlers can be registered without malloc */
#define COUNT 32
static struct fl
{
struct fl *next;
void (*f[COUNT])(void *);
void *a[COUNT];
void *dso[COUNT];
} builtin, *head;
static int slot;
static volatile int lock[1];
void __funcs_on_exit()
{
void (*func)(void *), *arg;
LOCK(lock);
for (; head; head=head->next, slot=COUNT) while(slot-->0) {
if (head->dso[slot] != NULL) {
func = head->f[slot];
arg = head->a[slot];
UNLOCK(lock);
func(arg);
LOCK(lock);
}
}
UNLOCK(lock);
}
void __cxa_finalize(void *dso)
{
void (*func)(void *), *arg;
LOCK(lock);
for (; head; head=head->next, slot=COUNT) while(slot-->0) {
if (dso == head->dso[slot]) {
func = head->f[slot];
arg = head->a[slot];
UNLOCK(lock);
func(arg);
LOCK(lock);
head->dso[slot] = NULL;
}
}
UNLOCK(lock);
}
int __cxa_atexit(void (*func)(void *), void *arg, void *dso)
{
LOCK(lock);
/* Defer initialization of head so it can be in BSS */
if (!head) head = &builtin;
/* If the current function list is full, add a new one */
if (slot==COUNT) {
struct fl *new_fl = calloc(sizeof(struct fl), 1);
if (!new_fl) {
UNLOCK(lock);
return -1;
}
new_fl->next = head;
head = new_fl;
slot = 0;
}
/* Append function to the list. */
head->f[slot] = func;
head->a[slot] = arg;
head->dso[slot] = dso;
slot++;
UNLOCK(lock);
return 0;
}
static void call(void *p)
{
((void (*)(void))(uintptr_t)p)();
}
int atexit(void (*func)(void))
{
return __cxa_atexit(call, (void *)(uintptr_t)func, 0);
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册