Procházet zdrojové kódy

support of dynamic loading libBB by c-loader

Alexander Shiryaev před 12 roky
rodič
revize
bc3e8f4223
4 změnil soubory, kde provedl 32 přidání a 7 odebrání
  1. 5 5
      BlackBox/Lin/Mod/Obsd.Dl.txt
  2. 1 0
      BlackBox/libdlobsdwrap.so
  3. 5 2
      c/Makefile
  4. 21 0
      c/libdlobsdwrap.c

+ 5 - 5
BlackBox/Lin/Mod/Obsd.Dl.txt

@@ -1,4 +1,4 @@
-MODULE LinDl ["libc.so.66.0"];
+MODULE LinDl ["libdlobsdwrap.so"];
 
 	(*
 		A. V. Shiryaev, 2012.09
@@ -26,10 +26,10 @@ MODULE LinDl ["libc.so.66.0"];
 		HANDLE* = PtrVoid;
 		PtrSTR* = POINTER TO ARRAY [untagged] OF SHORTCHAR;
 
-	PROCEDURE [ccall] dlopen* (file: PtrSTR; mode: INTEGER): HANDLE;
-	PROCEDURE [ccall] dlclose* (handle: HANDLE): INTEGER;
-	PROCEDURE [ccall] dlsym* (handle: HANDLE; symbol: PtrSTR): HANDLE;
+	PROCEDURE [ccall] dlopen* ["__dlopen"] (file: PtrSTR; mode: INTEGER): HANDLE;
+	PROCEDURE [ccall] dlclose* ["__dlclose"] (handle: HANDLE): INTEGER;
+	PROCEDURE [ccall] dlsym* ["__dlsym"] (handle: HANDLE; symbol: PtrSTR): HANDLE;
 
-	PROCEDURE [ccall] dlerror* (): PtrSTR;
+	PROCEDURE [ccall] dlerror* ["__dlerror"] (): PtrSTR;
 
 END LinDl.

+ 1 - 0
BlackBox/libdlobsdwrap.so

@@ -0,0 +1 @@
+../c/libdlobsdwrap.so

+ 5 - 2
c/Makefile

@@ -1,4 +1,4 @@
-all: lindev BlackBox
+all: lindev BlackBox libdlobsdwrap.so
 
 BlackBox: BlackBox.c
 	${CC} ${CFLAGS} -O0 -g -o ${.TARGET} ${.ALLSRC} -L. -lBB -Wl,-E -pthread
@@ -6,5 +6,8 @@ BlackBox: BlackBox.c
 lindev: BlackBox1.c
 	${CC} ${CFLAGS} -O0 -g -o ${.TARGET} ${.ALLSRC} -L . -lBB0
 
+libdlobsdwrap.so: libdlobsdwrap.c
+	${CC} ${CFLAGS} -O0 -g -o ${.TARGET} ${.ALLSRC} -fPIC -shared
+
 clean:
-	rm -f lindev BlackBox
+	rm -f lindev BlackBox libdlobsdwrap.so

+ 21 - 0
c/libdlobsdwrap.c

@@ -0,0 +1,21 @@
+#include <dlfcn.h>
+
+void * __dlopen (const char *path, int mode)
+{
+	return dlopen(path, mode);
+}
+
+int __dlclose (void *handle)
+{
+	return dlclose(handle);
+}
+
+void * __dlsym (void *handle, const char *symbol)
+{
+	return dlsym(handle, symbol);
+}
+
+const char * __dlerror (void)
+{
+	return dlerror();
+}