-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathqubes-vmm-xen-windows-pvdrivers-mingw-fragments.patch
105 lines (93 loc) · 3.53 KB
/
qubes-vmm-xen-windows-pvdrivers-mingw-fragments.patch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
diff --git a/Makefile b/Makefile
index 8b9cdc6..9fe7f8b 100644
--- a/Makefile
+++ b/Makefile
@@ -17,8 +17,38 @@ $(FILES): %-$(PVDRIVERS_VERSION).tar:
grep $@ sources|sed 's:$@:[email protected]:' | sha512sum -c -
mv [email protected] $@
-$(info $(FILES))
-$(info $(URLS))
get-sources: $(FILES)
get-sources:
git submodule update --init --recursive
+
+verify-sources:
+ @true
+
+OUTDIR = $(PWD)/bin/$(ARCH)
+
+all: $(OUTDIR) $(FILES_UPSTREAM:%.tar=%/.unpacked) $(OUTDIR)/xencontrol.dll $(OUTDIR)/libxenvchan.dll include/xencontrol.h include/xeniface_ioctls.h
+
+CFLAGS += -I . -I $(PWD)/include -I$(PWD)/xeniface/include -I $(PWD)/$(ARCH) -I $(DDKPATH) -std=c11 -fgnu89-inline -DUNICODE -D_UNICODE $(DEBUG) -mwindows -D_WIN32_WINNT=0x0600
+LDFLAGS += -L $(PWD)/$(ARCH) -L $(PWD)/xeniface/xeniface/$(ARCH) -lxencontrol -lversion -lshlwapi -lwtsapi32 -luserenv -liphlpapi -lwsock32 -lsetupapi -lrpcrt4 -lole32 -lntdll -luuid -lcomctl32 -lgdi32 -lwinmm -Wl,--as-needed -Wl,--no-insert-timestamp
+
+$(OUTDIR):
+ mkdir -p $(OUTDIR)
+
+$(PWD)/xeniface/xeniface/$(ARCH)/xencontrol.dll:
+ cd xeniface/src/xencontrol/ && \
+ $(CC) xencontrol.c -lsetupapi -I ../../include -DXENCONTROL_EXPORTS -DUNICODE -shared -o $@
+
+$(OUTDIR)/xencontrol.dll: $(PWD)/xeniface/xeniface/$(ARCH)/xencontrol.dll
+ cp $^ $@
+
+$(OUTDIR)/libxenvchan.dll:
+ cd src/libxenvchan && \
+ $(CC) *.c $(CFLAGS) $(LDFLAGS) -DXENVCHAN_EXPORTS -D_NTOS_ -shared -o $@
+
+%/.unpacked: %-$(PVDRIVERS_VERSION).tar
+ tar xvf $< -C $*
+ cp $*/$*/$(ARCH)/* $(OUTDIR)/
+ touch $@
+
+include/%.h: xeniface/include/%.h
+ cp $^ $@
diff --git a/src/libxenvchan/init.c b/src/libxenvchan/init.c
index 281f415..429358e 100644
--- a/src/libxenvchan/init.c
+++ b/src/libxenvchan/init.c
@@ -67,7 +67,7 @@
#define snprintf _snprintf
-static void _Log(XENCONTROL_LOG_LEVEL logLevel, PCHAR function, struct libxenvchan *ctrl, PWCHAR format, ...)
+static void _Log(XENCONTROL_LOG_LEVEL logLevel, LPCSTR function, struct libxenvchan *ctrl, PWCHAR format, ...)
{
va_list args;
@@ -82,7 +82,11 @@ static void _Log(XENCONTROL_LOG_LEVEL logLevel, PCHAR function, struct libxenvch
va_end(args);
}
+#ifdef __MINGW32__
+#define Log(level, msg, ...) _Log(level, __FUNCTION__, ctrl, L"(%p) " L##msg L"\n", ctrl, ##__VA_ARGS__)
+#else
#define Log(level, msg, ...) _Log(level, __FUNCTION__, ctrl, L"(%p) " L##msg L"\n", ctrl, __VA_ARGS__)
+#endif
static int init_gnt_srv(struct libxenvchan *ctrl, USHORT domain)
{
diff --git a/src/libxenvchan/io.c b/src/libxenvchan/io.c
index 16019be..29e334c 100644
--- a/src/libxenvchan/io.c
+++ b/src/libxenvchan/io.c
@@ -45,7 +45,7 @@
#define PAGE_SIZE 4096
#endif
-static void _Log(XENCONTROL_LOG_LEVEL logLevel, PCHAR function, struct libxenvchan *ctrl, PWCHAR format, ...)
+static void _Log(XENCONTROL_LOG_LEVEL logLevel, LPCSTR function, struct libxenvchan *ctrl, PWCHAR format, ...)
{
va_list args;
@@ -60,15 +60,21 @@ static void _Log(XENCONTROL_LOG_LEVEL logLevel, PCHAR function, struct libxenvch
va_end(args);
}
+#ifdef __MINGW32__
+#define Log(level, msg, ...) _Log(level, __FUNCTION__, ctrl, L"(%p) " L##msg L"\n", ctrl, ##__VA_ARGS__)
+#else
#define Log(level, msg, ...) _Log(level, __FUNCTION__, ctrl, L"(%p) " L##msg L"\n", ctrl, __VA_ARGS__)
+#endif
#define inline __inline
#define xen_mb() _ReadWriteBarrier()
#define xen_rmb() _ReadBarrier()
#define xen_wmb() _WriteBarrier()
+#ifndef __MINGW32__
#define __sync_or_and_fetch(a, b) ((*(a)) |= (b))
#define __sync_fetch_and_and InterlockedAnd8
+#endif
static inline uint32_t rd_prod(struct libxenvchan *ctrl)
{