Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
4d3996d5
Commit
4d3996d5
authored
19 years ago
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
libwine: Added LDT support for MacOS/x86.
parent
9b1ea63b
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
7 additions
and
26 deletions
+7
-26
ldt.c
libs/wine/ldt.c
+7
-26
No files found.
libs/wine/ldt.c
View file @
4d3996d5
...
...
@@ -117,22 +117,8 @@ extern int i386_set_ldt(int, union descriptor *, int);
#endif
/* __NetBSD__ || __FreeBSD__ || __OpenBSD__ */
#ifdef __APPLE__
static
inline
int
thread_set_user_ldt
(
const
void
*
addr
,
unsigned
int
size
,
unsigned
int
flags
)
{
int
ret
;
__asm__
__volatile__
(
"pushl %4
\n\t
"
"pushl %3
\n\t
"
"pushl %2
\n\t
"
"pushl $0
\n\t
"
"lcall $0x3b,$0
\n\t
"
"leal 16(%%esp),%%esp"
:
"=a"
(
ret
)
:
"0"
(
4
/*thread_set_user_ldt*/
),
"r"
(
addr
),
"r"
(
size
),
"r"
(
flags
)
);
return
ret
;
}
#endif
/* __APPLE__ */
#include <i386/user_ldt.h>
#endif
#endif
/* __i386__ */
...
...
@@ -242,6 +228,9 @@ static int internal_set_entry( unsigned short sel, const LDT_ENTRY *entry )
ldt_mod
.
acc2
=
entry
->
HighWord
.
Bytes
.
Flags2
>>
4
;
if
((
ret
=
sysi86
(
SI86DSCR
,
&
ldt_mod
))
==
-
1
)
perror
(
"sysi86"
);
}
#elif defined(__APPLE__)
if
((
ret
=
i386_set_ldt
(
index
,
(
union
ldt_entry
*
)
entry
,
1
))
<
0
)
perror
(
"i386_set_ldt"
);
#else
fprintf
(
stderr
,
"No LDT support on this platform
\n
"
);
exit
(
1
);
...
...
@@ -423,11 +412,7 @@ unsigned short wine_ldt_alloc_fs(void)
if
(
errno
!=
ENOSYS
)
perror
(
"set_thread_area"
);
}
else
global_fs_sel
=
(
ldt_info
.
entry_number
<<
3
)
|
3
;
#elif defined(__APPLE__)
int
ret
=
thread_set_user_ldt
(
NULL
,
0
,
0
);
if
(
ret
!=
-
1
)
global_fs_sel
=
ret
;
else
global_fs_sel
=
0
;
#endif
/* __APPLE__ */
#endif
}
if
(
global_fs_sel
>
0
)
return
global_fs_sel
;
return
wine_ldt_alloc_entries
(
1
);
...
...
@@ -453,11 +438,7 @@ void wine_ldt_init_fs( unsigned short sel, const LDT_ENTRY *entry )
ldt_info
.
entry_number
=
sel
>>
3
;
fill_modify_ldt_struct
(
&
ldt_info
,
entry
);
if
((
ret
=
set_thread_area
(
&
ldt_info
)
<
0
))
perror
(
"set_thread_area"
);
#elif defined(__APPLE__)
int
ret
=
thread_set_user_ldt
(
wine_ldt_get_base
(
entry
),
wine_ldt_get_limit
(
entry
),
0
);
if
(
ret
==
-
1
)
perror
(
"thread_set_user_ldt"
);
else
assert
(
ret
==
global_fs_sel
);
#endif
/* __APPLE__ */
#endif
}
else
/* LDT selector */
{
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment