diff options
Diffstat (limited to 'packages/Python/lldbsuite/test/crashinfo.c')
| -rw-r--r-- | packages/Python/lldbsuite/test/crashinfo.c | 64 | 
1 files changed, 64 insertions, 0 deletions
| diff --git a/packages/Python/lldbsuite/test/crashinfo.c b/packages/Python/lldbsuite/test/crashinfo.c new file mode 100644 index 000000000000..19013468bb26 --- /dev/null +++ b/packages/Python/lldbsuite/test/crashinfo.c @@ -0,0 +1,64 @@ +/****************************************************************************** +                     The LLVM Compiler Infrastructure + +  This file is distributed under the University of Illinois Open Source +  License. See LICENSE.TXT for details. + ****************************************************************************** + +* This C file vends a simple interface to set the Application Specific Info +* on Mac OS X through Python. To use, compile as a dylib, import crashinfo +* and call crashinfo.setCrashReporterDescription("hello world") +* The testCrashReporterDescription() API is simply there to let you test that this +* is doing what it is intended to do without having to actually cons up a crash +******************************************************************************/ + +#include <Python/Python.h> +#include <stdlib.h> +#include <string.h> +#include <stdio.h> + +void *__crashreporter_info__ = NULL; + +asm(".desc ___crashreporter_info__, 0x10"); + +static PyObject* setCrashReporterDescription(PyObject* self, PyObject* string) +{ +	if (__crashreporter_info__) +	{ +		free(__crashreporter_info__); +		__crashreporter_info__ = NULL; +	} +		 +	if (string && PyString_Check(string)) +	{ +		Py_ssize_t size = PyString_Size(string); +		char* data = PyString_AsString(string); +		if (size > 0 && data) +		{ +			++size; // Include the NULL terminateor in allocation and memcpy() +			__crashreporter_info__ = malloc(size); +			memcpy(__crashreporter_info__, data, size); +			return Py_True; +		} +	} +	return Py_False; +} + +static PyObject* testCrashReporterDescription(PyObject*self, PyObject* arg) +{ +	int* ptr = 0; +	*ptr = 1; +	return Py_None; +} + +static PyMethodDef crashinfo_methods[] = { +	{"setCrashReporterDescription", setCrashReporterDescription, METH_O}, +	{"testCrashReporterDescription", testCrashReporterDescription, METH_O}, +	{NULL, NULL} +}; + +void initcrashinfo() +{ +	(void) Py_InitModule("crashinfo", crashinfo_methods); +} + | 
