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
|
Here are some patches for FreeBSD's kernel that are necessary for wine
(well not strictly _necessary_ but without them parts of it won't work.)
They unfortunately didn't make it into the base distribution in time
for the 3.3 release code freeze...
patch-3.3-sys-ldtshare:
make kernel threads (rfork(), which wine uses) share one LDT instead of
each having its own. this fixes the same problem that wine also had on
linux kernels before 2.2.
patch-3.3-sys-sigtrap:
stop wine's SIGTRAP handler from being called in the sigreturn syscall,
causing problems for wine's internal debugger. (it would still
correctly show a crash backtrace but all commands that use single-
stepping failed.)
patch-3.3-sys-fsgs:
always set/use the sc_fs and sc_gs entries in the sigcontext struct,
making -stable behave the same as -current there. this should finally
allow signal handling of a wine that was built on -stable to correctly
run on -current too. The corresponding wine change is in the port in
patches/patch-af, it is also in wine's CVS tree now, so that file will
disappear when the port is updated after the next wine release.
(this one was MFC'd Nov 15 1999, so you only need it if you're running a
system from the -stable branch older than that, like a 3.3-RELEASE. If you
happen to try to apply it when its already there patch(1) should complain
`Reversed (or previously applied) patch detected! Assume -R? [y]',
just hit ^C then...)
Apply as follows:
(cd /usr/src/sys && patch ) <patch-3.3-sys-ldtshare
(cd /usr/src/sys && patch ) <patch-3.3-sys-sigtrap
And if you don't already have it:
(cd /usr/src/sys && patch ) <patch-3.3-sys-fsgs
then build a new kernel. (don't forget to include the options USER_LDT,
SYSVSHM, SYSVSEM, and SYSVMSG, wine needs these.)
A note about local patches and ctm, cvsup and friends...
(if you don't know what those are good for see for example
http://www.freebsd.org/handbook/stable.html)
ctm cannot deal with local patches (unless you use it to mirror
the cvs tree of course, instead of the sources directly), with
cvsup i'm not sure but in any case the workaround is simple: use
patch -R to un-apply any local patches before the update (feeding
it the patches again as above on stdin), then when the update is
finished apply them again. Should they fail on the updated sources
(and you cannot fix it yourself), look for new versions of the
patches at the place where you got them, or in this case you
can also look in my current wine port tree at
http://www.jelal.kn-bremen.de/freebsd/ports/emulators/wine/files/
-current users:
A LDT patch for -current is at http://www.freebsd.org/~luoqi/
(well in a recent posting on the -current list,
http://www.freebsd.org/cgi/mid.cgi?db=&id=199911150745.CAA27884@lor.watermarkgroup.com
he said that version is outdated, seems you have to mail him to
get a current one), the sigtrap patch looks like it could also
apply to -current but i haven't tried. And the fs/gs patch of course
already is in -current.
Late note: the LDT sharing fix just seems to have been committed now...
(to -current that is.)
|