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