Add support for init/fini arrays to libc (#1725)

The arrays contain the addresses of functions annotated with
constructor or destructor attributes. The support is optional,
requires FEATURE_INIT_FINI cmake option to be set. As of now, the
option is _not_ available in tools/build.py directly, only via
`--cmake-param="-DFEATURE_INIT_FINI=ON"`.

JerryScript-DCO-1.0-Signed-off-by: Akos Kiss akiss@inf.u-szeged.hu
This commit is contained in:
Akos Kiss
2017-04-13 17:18:17 +02:00
committed by GitHub
parent 950a0f10cd
commit 4b9e458f44
8 changed files with 193 additions and 31 deletions
+22 -9
View File
@@ -80,24 +80,37 @@
\
pop {r4-r12, pc};
#ifdef ENABLE_INIT_FINI
/*
* bl libc_init_array
*/
#define _INIT \
bl libc_init_array;
#else /* !ENABLE_INIT_FINI */
#define _INIT
#endif /* ENABLE_INIT_FINI */
/*
* bl libc_init_array
*
* ldr argc ([sp + 0x0]) -> r0
* add argv (sp + 0x4) -> r1
*
* bl main
*
* bl exit
*
* infinite loop
*/
#define _START \
ldr r0, [sp, #0]; \
add r1, sp, #4; \
bl main; \
\
bl exit; \
1: \
b 1b
#define _START \
_INIT; \
\
ldr r0, [sp, #0]; \
add r1, sp, #4; \
bl main; \
\
bl exit; \
1: \
b 1b;
/**
* If hard-float mode: