1*c9945492SAndroid Build Coastguard Worker #include "pthread_impl.h"
2*c9945492SAndroid Build Coastguard Worker
3*c9945492SAndroid Build Coastguard Worker hidden void __unmapself_sh_mmu(void *, size_t);
4*c9945492SAndroid Build Coastguard Worker hidden void __unmapself_sh_nommu(void *, size_t);
5*c9945492SAndroid Build Coastguard Worker
6*c9945492SAndroid Build Coastguard Worker #if !defined(__SH3__) && !defined(__SH4__)
7*c9945492SAndroid Build Coastguard Worker #define __unmapself __unmapself_sh_nommu
8*c9945492SAndroid Build Coastguard Worker #include "dynlink.h"
9*c9945492SAndroid Build Coastguard Worker #undef CRTJMP
10*c9945492SAndroid Build Coastguard Worker #define CRTJMP(pc,sp) __asm__ __volatile__( \
11*c9945492SAndroid Build Coastguard Worker "mov.l @%0+,r0 ; mov.l @%0,r12 ; jmp @r0 ; mov %1,r15" \
12*c9945492SAndroid Build Coastguard Worker : : "r"(pc), "r"(sp) : "r0", "memory" )
13*c9945492SAndroid Build Coastguard Worker #include "../__unmapself.c"
14*c9945492SAndroid Build Coastguard Worker #undef __unmapself
15*c9945492SAndroid Build Coastguard Worker extern hidden unsigned __sh_nommu;
16*c9945492SAndroid Build Coastguard Worker #else
17*c9945492SAndroid Build Coastguard Worker #define __sh_nommu 0
18*c9945492SAndroid Build Coastguard Worker #endif
19*c9945492SAndroid Build Coastguard Worker
__unmapself(void * base,size_t size)20*c9945492SAndroid Build Coastguard Worker void __unmapself(void *base, size_t size)
21*c9945492SAndroid Build Coastguard Worker {
22*c9945492SAndroid Build Coastguard Worker if (__sh_nommu) __unmapself_sh_nommu(base, size);
23*c9945492SAndroid Build Coastguard Worker else __unmapself_sh_mmu(base, size);
24*c9945492SAndroid Build Coastguard Worker }
25