comparison dyncallback/dyncall_callback_mips.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
50 DCCallback* dcbNewCallback(const char* signature, DCCallbackHandler* handler, void* userdata) 50 DCCallback* dcbNewCallback(const char* signature, DCCallbackHandler* handler, void* userdata)
51 { 51 {
52 int err; 52 int err;
53 DCCallback* pcb; 53 DCCallback* pcb;
54 err = dcAllocWX(sizeof(DCCallback), (void**)&pcb); 54 err = dcAllocWX(sizeof(DCCallback), (void**)&pcb);
55 if(err || !pcb) 55 if(err)
56 return 0; 56 return NULL;
57
57 dcbInitThunk(&pcb->thunk, dcCallbackThunkEntry); 58 dcbInitThunk(&pcb->thunk, dcCallbackThunkEntry);
58 dcbInitCallback(pcb, signature, handler, userdata); 59 dcbInitCallback(pcb, signature, handler, userdata);
60
61 err = dcInitExecWX(pcb, sizeof(DCCallback));
62 if(err) {
63 dcFreeWX(pcb, sizeof(DCCallback));
64 return NULL;
65 }
66
59 return pcb; 67 return pcb;
60 } 68 }
61 69
62 70
63 void dcbFreeCallback(DCCallback* pcb) 71 void dcbFreeCallback(DCCallback* pcb)