]>
git.saurik.com Git - cycript.git/blob - Trampoline.t.cpp
c228259e357ed3715a8d142eb8ec5f9848815dd9
   1 /* Cycript - Inlining/Optimizing JavaScript Compiler 
   2  * Copyright (C) 2009  Jay Freeman (saurik) 
   5 /* Modified BSD License {{{ */ 
   7  *        Redistribution and use in source and binary 
   8  * forms, with or without modification, are permitted 
   9  * provided that the following conditions are met: 
  11  * 1. Redistributions of source code must retain the 
  12  *    above copyright notice, this list of conditions 
  13  *    and the following disclaimer. 
  14  * 2. Redistributions in binary form must reproduce the 
  15  *    above copyright notice, this list of conditions 
  16  *    and the following disclaimer in the documentation 
  17  *    and/or other materials provided with the 
  19  * 3. The name of the author may not be used to endorse 
  20  *    or promote products derived from this software 
  21  *    without specific prior written permission. 
  23  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' 
  24  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
  25  * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
  26  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
  27  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE 
  28  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
  29  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
  30  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
  31  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
  32  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 
  33  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
  34  * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
  35  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
  36  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  40 #define _PTHREAD_ATTR_T 
  41 #include <pthread_internals.h> 
  45 void *Routine(void *); 
  47 extern "C" void Start(Baton 
*baton
) { 
  49     baton
->_pthread_set_self(&self
); 
  52     baton
->pthread_create(&thread
, NULL
, &Routine
, baton
); 
  55     baton
->pthread_join(thread
, &result
); 
  57     baton
->thread_terminate(baton
->mach_thread_self()); 
  60 void *Routine(void *arg
) { 
  61     Baton 
*baton(reinterpret_cast<Baton 
*>(arg
)); 
  62     void *handle(baton
->dlopen(baton
->library
, RTLD_LAZY 
| RTLD_LOCAL
)); 
  63     void (*HandleServer
)(pid_t
) = reinterpret_cast<void (*)(pid_t
)>(baton
->dlsym(handle
, "CYHandleServer")); 
  64     HandleServer(baton
->pid
);