Пример #1
0
	static int LIBUSB_CALLTYPE load_usb_get_string_simple(usb_dev_handle *dev, int index, char *buf,
                            size_t buflen)
	{
		LOAD_FN(usb_get_string_simple);

		return success ? usb_get_string_simple(dev,index,buf,buflen) : -1;
	}
CGObjCJit::CGObjCJit(CodeGen::CodeGenModule &cgm)
  : CGObjCRuntime(cgm),
    isUsable(false),
    CGM(cgm),
    VMContext(cgm.getLLVMContext()),
    ObjCTypes(cgm),
    JitInitFunction(0) {

  //puts("Constructing CGObjCJit (host runtime proxy)");

  llvm::PointerType *PtrToInt8Ty =
      llvm::Type::getInt8Ty(VMContext)->getPointerTo();

  NULLPtr = llvm::ConstantPointerNull::get(PtrToInt8Ty);

  // TODO: For now, just searching for pre-loaded objc runtime
  LOAD_FN(_objc_getClass, "objc_getClass");

  // Don't bother to try the rest if the first one wasn't available
  if (_objc_getClass) {
    isUsable = true;
    LOAD_FN(_objc_allocateClassPair,        "objc_allocateClassPair");
    LOAD_FN(_objc_registerClassPair,        "objc_registerClassPair");
    LOAD_FN(_objc_getProtocol,              "objc_getProtocol");
    LOAD_FN(_object_getClass,               "object_getClass");
    LOAD_FN(_sel_registerName,              "sel_registerName");
    LOAD_FN(_class_getClassVariable,        "class_getClassVariable");
    LOAD_FN(_class_addIvar,                 "class_addIvar");
    LOAD_FN(_class_addProtocol,             "class_addProtocol");
    LOAD_FN(_class_getMethodImplementation, "class_getMethodImplementation");
    LOAD_FN(_ivar_getOffset,                "ivar_getOffset");
    LOAD_FN(_NSGetSizeAndAlignment,         "NSGetSizeAndAlignment");

    //puts("Creating .objc_jit_init()");
    llvm::FunctionType *initFuncType =
      llvm::FunctionType::get(llvm::Type::getVoidTy(VMContext), false);

    JitInitFunction =
        cast<llvm::Function>(CGM.getModule().getOrInsertFunction(
                                               llvm::StringRef(".objc_jit_init"),
                                               initFuncType));
    JitInitFunction->setLinkage(llvm::Function::PrivateLinkage);
    JitInitFunction->setCallingConv(llvm::CallingConv::C);
    JitInitBlock =
      llvm::BasicBlock::Create(VMContext, "entry", JitInitFunction);


    // Define VM objc_getClass function

    fn_objc_getClass.init(&CGM, "objc_getClass",
                          ObjCTypes.ClassPtrTy,
                          ObjCTypes.Int8PtrTy,
                          NULL);

    fn_objc_getMetaClass.init(&CGM, "objc_getMetaClass",
                              ObjCTypes.ClassPtrTy,
                              ObjCTypes.Int8PtrTy,
                              NULL);

    fn_objc_getProtocol.init(&CGM, "objc_getProtocol",
                             ObjCTypes.ProtocolPtrTy,
                             ObjCTypes.Int8PtrTy,
                             NULL);

    fn_object_getClass.init(&CGM, "object_getClass",
                            ObjCTypes.ClassPtrTy,
                            ObjCTypes.ObjectPtrTy,
                            NULL);

    // Define VM class_addMethod and class_replaceMethod function calls for
    // the init function

    llvm::Type *ImpParams[] = {ObjCTypes.ObjectPtrTy, ObjCTypes.SelectorPtrTy};
    ImpPtrTy = llvm::FunctionType::get(ObjCTypes.ObjectPtrTy,
                                       ImpParams,
                                       false)->getPointerTo();

    fn_class_addMethod.init(&CGM, "class_addMethod",
                            llvm::Type::getInt8Ty(VMContext),
                            ObjCTypes.ClassPtrTy,
                            ObjCTypes.SelectorPtrTy,
                            ImpPtrTy,
                            ObjCTypes.Int8PtrTy,
                            NULL);

    fn_class_replaceMethod.init(&CGM, "class_replaceMethod",
                                llvm::Type::getInt8Ty(VMContext),
                                ObjCTypes.ClassTy,
                                ObjCTypes.SelectorPtrTy,
                                ImpPtrTy,
                                ObjCTypes.Int8PtrTy,
                                NULL);

    fn_class_getMethodImplementation.init(&CGM, "class_getMethodImplementation",
                                          ImpPtrTy,
                                          ObjCTypes.ClassPtrTy,
                                          ObjCTypes.SelectorPtrTy,
                                          NULL);

    // Unfortunately, even though class_getMethodImplementation is provided by
    // the GNU runtime, it doesn't work on a class unless objc_msg_lookup was
    // called first.
    //
    LOAD_FN(_objc_msg_lookup, "objc_msg_lookup");

    if (_objc_msg_lookup) {
      fn_objc_msg_lookup.init(&CGM, "objc_msg_lookup",
                              ImpPtrTy,
                              ObjCTypes.ClassPtrTy,
                              ObjCTypes.SelectorPtrTy,
                              NULL);
    }

    // Save 'isa' pointer value used for locally-stored prototypes
    void *sampleProtocol = _objc_getProtocol("NSObject");
    ProtocolIsaPointer = *((void**)sampleProtocol);

    InitConstantStringGenerator();
  }
}
Пример #3
0
static bool SSL_library_load(void)
{
	/* Load Library Pointers */
	if (bSslInitDone) return true;

	WaitForSingleObject(g_hSslMutex, INFINITE);

	if (!bSslInitDone) {
		g_hOpenSSLCrypto = LoadLibraryA("libeay32.dll");
		g_hOpenSSL = LoadLibraryA("ssleay32.dll");
		if (g_hOpenSSL && g_hOpenSSLCrypto) {
			// load function pointers
			#define LOAD_FN(struc,lib, name) struc.##name = (pfn##name)GetProcAddress(lib, #name);
			LOAD_FN(g_OpenSSL, g_hOpenSSLCrypto, RAND_screen);
			LOAD_FN(g_OpenSSL, g_hOpenSSL, SSL_connect);
			LOAD_FN(g_OpenSSL, g_hOpenSSL, SSL_free);
			LOAD_FN(g_OpenSSL, g_hOpenSSL, SSL_get_error);
			LOAD_FN(g_OpenSSL, g_hOpenSSL, SSL_library_init);
			LOAD_FN(g_OpenSSL, g_hOpenSSL, SSL_load_error_strings);
			LOAD_FN(g_OpenSSL, g_hOpenSSL, SSL_new);
			LOAD_FN(g_OpenSSL, g_hOpenSSL, SSL_peek);
			LOAD_FN(g_OpenSSL, g_hOpenSSL, SSL_pending);
			LOAD_FN(g_OpenSSL, g_hOpenSSL, SSL_read);
			LOAD_FN(g_OpenSSL, g_hOpenSSL, SSL_write);
			LOAD_FN(g_OpenSSL, g_hOpenSSL, SSL_set_fd);
			LOAD_FN(g_OpenSSL, g_hOpenSSL, SSL_shutdown);
			LOAD_FN(g_OpenSSL, g_hOpenSSL, SSL_CTX_free);
			LOAD_FN(g_OpenSSL, g_hOpenSSL, SSL_CTX_new);
			LOAD_FN(g_OpenSSL, g_hOpenSSL, SSL_CTX_ctrl);
			LOAD_FN(g_OpenSSL, g_hOpenSSLCrypto, CRYPTO_set_mem_functions);

			LOAD_FN(g_OpenSSL, g_hOpenSSL, SSLv23_client_method);

			LOAD_FN(g_OpenSSL, g_hOpenSSL, SSL_get_current_cipher);
			LOAD_FN(g_OpenSSL, g_hOpenSSL, SSL_CIPHER_get_name);

			LOAD_FN(g_OpenSSL, g_hOpenSSL, SSL_get_peer_certificate);
			LOAD_FN(g_OpenSSL, g_hOpenSSL, SSL_get_peer_cert_chain);
			LOAD_FN(g_OpenSSL, g_hOpenSSLCrypto, CRYPTO_free);
			LOAD_FN(g_OpenSSL, g_hOpenSSLCrypto, X509_free);
			LOAD_FN(g_OpenSSL, g_hOpenSSLCrypto, i2d_X509);

			HINSTANCE hCrypt = LoadLibraryA("crypt32.dll");
			if (hCrypt) {
				LOAD_FN(g_Crypt, hCrypt, CertGetCertificateChain);
				LOAD_FN(g_Crypt, hCrypt, CertFreeCertificateChain);
				LOAD_FN(g_Crypt, hCrypt, CertFreeCertificateContext);
				LOAD_FN(g_Crypt, hCrypt, CertVerifyCertificateChainPolicy);
				LOAD_FN(g_Crypt, hCrypt, CertOpenStore);
				LOAD_FN(g_Crypt, hCrypt, CertCloseStore);
				LOAD_FN(g_Crypt, hCrypt, CertAddCertificateContextToStore);
				LOAD_FN(g_Crypt, hCrypt, CertCreateCertificateContext);
			}

			// init OpenSSL
			g_OpenSSL.SSL_library_init();
			g_OpenSSL.SSL_load_error_strings();
			g_OpenSSL.CRYPTO_set_mem_functions(mir_calloc, mir_realloc, mir_free);
			// FIXME check errors

			bSslInitDone = true;
		}
		else {
			SSL_library_unload();
		}
	}

	ReleaseMutex(g_hSslMutex);
	return bSslInitDone;
}
Пример #4
0
void initc(void)
{
    PyObject *m = Py_InitModule3("c", c_funcs, "C repository types module");

    Empty_TUPLE = PyTuple_New(0);
    None_PAIR = PyTuple_Pack(2, Py_None, Py_None);

    _init_view(m);
    _init_repository(m);
    _init_container(m);
    _init_sequence(m);
    _init_db(m);
    _init_cursor(m);
    _init_env(m);
    _init_txn(m);
    _init_lock(m);
    _init_record(m);
    _init_store(m);

    PyExc_DBError = PyErr_NewException("chandlerdb.persistence.c.DBError",
                                       NULL, NULL);
    PyObject_SetAttrString(m, "DBError", PyExc_DBError);

    MAKE_EXC(m, DBLockDeadlockError, DBError);
    MAKE_EXC(m, DBLockNotGrantedError, DBError);
    MAKE_EXC(m, DBAccessError, DBError);
    MAKE_EXC(m, DBBusyError, DBError);
    MAKE_EXC(m, DBInvalidArgError, DBError);
    MAKE_EXC(m, DBNoSpaceError, DBError);
    MAKE_EXC(m, DBNotFoundError, DBError);
    MAKE_EXC(m, DBNoSuchFileError, DBError);
    MAKE_EXC(m, DBPermissionsError, DBError);
    MAKE_EXC(m, DBVersionMismatchError, DBError);
    MAKE_EXC(m, DBRunRecoveryError, DBError);

    PyModule_AddIntConstant(m, "DB_VERSION_MAJOR", DB_VERSION_MAJOR);
    PyModule_AddIntConstant(m, "DB_VERSION_MINOR", DB_VERSION_MINOR);
    PyModule_AddIntConstant(m, "DB_VERSION_PATCH", DB_VERSION_PATCH);

    if (!(m = PyImport_ImportModule("chandlerdb.util.c")))
        return;
    LOAD_FN(m, PyUUID_Check);
    LOAD_FN(m, PyUUID_Make16);
    LOAD_FN(m, _hash_bytes);
    LOAD_OBJ(m, Nil);
    LOAD_TYPE(m, CtxMgr);
    LOAD_TYPE(m, SkipList);
    SkipList_Node = (PyTypeObject *)
        PyObject_GetAttrString((PyObject *) SkipList, "Node");
    Py_DECREF(m);

    if (!(m = PyImport_ImportModule("chandlerdb.item.c")))
        return;
    LOAD_TYPE(m, CItem);
    LOAD_TYPE(m, ItemRef);
    LOAD_FN(m, CItem_getLocalAttributeValue);
    Py_DECREF(m);

    if (!(m = PyImport_ImportModule("chandlerdb.schema.c")))
        return;
    LOAD_FN(m, CAttribute_invokeAfterChange);
    Py_DECREF(m);
}
Пример #5
0
	static int LIBUSB_CALLTYPE load_usb_bulk_write(usb_dev_handle *dev,int ep,char *bytes,int size,int timeout)
	{
		LOAD_FN(usb_bulk_write);

		return success ? usb_bulk_write(dev,ep,bytes,size,timeout) : -1;
	}
Пример #6
0
	static int LIBUSB_CALLTYPE load_usb_reset(usb_dev_handle *dev)
	{
		LOAD_FN(usb_reset);

		return success ? usb_reset(dev) : -1;
	}