Mercurial > pub > dyncall > dyncall
comparison dyncallback/dyncall_callback_arm32.c @ 202:030fbb70aa1b
- changed allocwx code:
* to introduce a call allowing to switch the written page to be executable (e.g. using mprotect)
* changed mmap based code so page is always W^X
author | Tassilo Philipp |
---|---|
date | Mon, 20 Mar 2017 23:12:58 +0100 |
parents | d48a8b8d2ef9 |
children | f5577f6bf97a |
comparison
equal
deleted
inserted
replaced
201:136409adbdd1 | 202:030fbb70aa1b |
---|---|
49 DCCallback* dcbNewCallback(const char* signature, DCCallbackHandler* handler, void* userdata) | 49 DCCallback* dcbNewCallback(const char* signature, DCCallbackHandler* handler, void* userdata) |
50 { | 50 { |
51 int err; | 51 int err; |
52 DCCallback* pcb; | 52 DCCallback* pcb; |
53 err = dcAllocWX(sizeof(DCCallback), (void**)&pcb); | 53 err = dcAllocWX(sizeof(DCCallback), (void**)&pcb); |
54 if(err || !pcb) | 54 if(err) |
55 return 0; | 55 return NULL; |
56 | |
56 dcbInitThunk(&pcb->thunk, dcCallbackThunkEntry); | 57 dcbInitThunk(&pcb->thunk, dcCallbackThunkEntry); |
57 dcbInitCallback(pcb, signature, handler, userdata); | 58 dcbInitCallback(pcb, signature, handler, userdata); |
59 | |
60 err = dcInitExecWX(pcb, sizeof(DCCallback)); | |
61 if(err) { | |
62 dcFreeWX(pcb, sizeof(DCCallback)); | |
63 return NULL; | |
64 } | |
65 | |
58 return pcb; | 66 return pcb; |
59 } | 67 } |
60 | 68 |
61 | 69 |
62 void dcbFreeCallback(DCCallback* pcb) | 70 void dcbFreeCallback(DCCallback* pcb) |