mirror of
https://github.com/fluencelabs/musl
synced 2025-07-31 22:31:58 +00:00
have sh/fdpic entry point set fdpic personality if needed
the entry point code supports being loaded by a loader which is not fdpic-aware (in practice, either kernel with mmu or qemu without fdpic support). this mostly just works, but signal handling will wrongly use a function descriptor address as a code address if the personality is not adjusted to fdpic. ideally this code could be placed with sigaction so that it's not needed except if/when a signal handler is installed. however, personality is incorrectly maintained per-thread by the kernel, rather than per-process, so it's necessary to correct the personality before any threads are started. also, in order to skip the personality syscall when an fdpic-aware loader is used, we need to be able to detect how the program was loaded, and this information is only readily available at the entry point.
This commit is contained in:
@@ -4,6 +4,18 @@ __asm__(
|
||||
".text \n"
|
||||
".global " START " \n"
|
||||
START ": \n"
|
||||
" tst r8, r8 \n"
|
||||
" bf 1f \n"
|
||||
" mov #68, r3 \n"
|
||||
" add r3, r3 \n"
|
||||
" mov #8, r4 \n"
|
||||
" swap.w r4, r4 \n"
|
||||
" trapa #31 \n"
|
||||
" nop \n"
|
||||
" nop \n"
|
||||
" nop \n"
|
||||
" nop \n"
|
||||
"1: nop \n"
|
||||
#ifndef SHARED
|
||||
" mov r8, r4 \n"
|
||||
" mova 1f, r0 \n"
|
||||
|
Reference in New Issue
Block a user