diff --git a/Makefile b/Makefile index a9535b3..43b2b64 100644 --- a/Makefile +++ b/Makefile @@ -100,6 +100,7 @@ OBJ=\ util/stab.o \ util/dis.o \ util/gdb_proto.o \ + util/dynload.o \ drivers/device.o \ drivers/bsl.o \ drivers/fet.o \ diff --git a/util/dynload.c b/util/dynload.c new file mode 100644 index 0000000..1bda10e --- /dev/null +++ b/util/dynload.c @@ -0,0 +1,67 @@ +/* MSPDebug - debugging tool for MSP430 MCUs + * Copyright (C) 2009-2011 Daniel Beer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "dynload.h" + +#ifdef WIN32 + +dynload_handle_t dynload_open(const char *filename) +{ + return LoadLibrary(filename); +} + +void dynload_close(dynload_handle_t hnd) +{ + FreeLibrary(hnd); +} + +void *dynload_sym(dynload_handle_t hnd, const char *name) +{ + return GetProcAddress(hnd, name); +} + +const char *dynload_error(void) +{ + return last_error(); +} + +#else /* WIN32 */ + +#include + +dynload_handle_t dynload_open(const char *filename) +{ + return dlopen(filename, RTLD_LAZY); +} + +void dynload_close(dynload_handle_t hnd) +{ + dlclose(hnd); +} + +void *dynload_sym(dynload_handle_t hnd, const char *name) +{ + return dlsym(hnd, name); +} + +const char *dynload_error(void) +{ + return dlerror(); +} + +#endif diff --git a/util/dynload.h b/util/dynload.h new file mode 100644 index 0000000..c358f57 --- /dev/null +++ b/util/dynload.h @@ -0,0 +1,41 @@ +/* MSPDebug - debugging tool for MSP430 MCUs + * Copyright (C) 2009-2011 Daniel Beer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef DYNLOAD_H_ +#define DYNLOAD_H_ + +/* Portable dynamic loader interface. */ + +#ifdef WIN32 +#include + +typedef HMODULE dynload_handle_t; +#else /* WIN32 */ +typedef void *dynload_handle_t; +#endif + +#ifndef WINAPI +#define WINAPI +#endif + +dynload_handle_t dynload_open(const char *filename); +void dynload_close(dynload_handle_t hnd); +void *dynload_sym(dynload_handle_t hnd, const char *name); +const char *dynload_error(void); + +#endif