Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
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-winehq
Commits
4826900a
Commit
4826900a
authored
Sep 08, 2020
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
loader: No longer depend on libwine.
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
20f6f612
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
5 additions
and
158 deletions
+5
-158
Makefile.in
loader/Makefile.in
+2
-2
main.c
loader/main.c
+3
-156
No files found.
loader/Makefile.in
View file @
4826900a
...
...
@@ -22,11 +22,11 @@ main_EXTRADEFS = -DDLLDIR=\"${dlldir}\" -DBIN_TO_DLLDIR=\"`$(MAKEDEP) -R ${bindi
wine_OBJS
=
main.o
wine_DEPS
=
$(WINELOADER_DEPENDS)
wine_LDFLAGS
=
$(WINELOADER_LDFLAGS)
$(LDEXECFLAGS)
-lwine
$(PTHREAD_LIBS)
wine_LDFLAGS
=
$(WINELOADER_LDFLAGS)
$(LDEXECFLAGS)
$(PTHREAD_LIBS)
wine64_OBJS
=
main.o
wine64_DEPS
=
$(WINELOADER_DEPENDS)
wine64_LDFLAGS
=
$(WINELOADER_LDFLAGS)
$(LDEXECFLAGS)
-lwine
$(PTHREAD_LIBS)
wine64_LDFLAGS
=
$(WINELOADER_LDFLAGS)
$(LDEXECFLAGS)
$(PTHREAD_LIBS)
wine_preloader_OBJS
=
preloader.o preloader_mac.o
wine_preloader_DEPS
=
$(WINELOADER_DEPENDS)
...
...
loader/main.c
View file @
4826900a
...
...
@@ -21,147 +21,17 @@
#include "config.h"
#include "wine/port.h"
#include <
errno
.h>
#include <
pthread
.h>
#include <stdio.h>
#include <stdlib.h>
#ifdef HAVE_SYS_MMAN_H
# include <sys/mman.h>
#endif
#ifdef HAVE_SYS_RESOURCE_H
# include <sys/resource.h>
#endif
#ifdef HAVE_SYS_SYSCALL_H
# include <sys/syscall.h>
#endif
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif
#include "wine/library.h"
#include "main.h"
extern
char
**
environ
;
extern
const
char
*
wine_get_build_id
(
void
);
/* the preloader will set this variable */
const
struct
wine_preload_info
*
wine_main_preload_info
=
NULL
;
/***********************************************************************
* check_command_line
*
* Check if command line is one that needs to be handled specially.
*/
static
void
check_command_line
(
int
argc
,
char
*
argv
[]
)
{
static
const
char
usage
[]
=
"Usage: wine PROGRAM [ARGUMENTS...] Run the specified program
\n
"
" wine --help Display this help and exit
\n
"
" wine --version Output version information and exit"
;
if
(
argc
<=
1
)
{
fprintf
(
stderr
,
"%s
\n
"
,
usage
);
exit
(
1
);
}
if
(
!
strcmp
(
argv
[
1
],
"--help"
))
{
printf
(
"%s
\n
"
,
usage
);
exit
(
0
);
}
if
(
!
strcmp
(
argv
[
1
],
"--version"
))
{
printf
(
"%s
\n
"
,
wine_get_build_id
()
);
exit
(
0
);
}
}
#ifdef __ANDROID__
static
int
pre_exec
(
void
)
{
#if defined(__i386__) || defined(__x86_64__)
return
1
;
/* we have a preloader */
#else
return
0
;
/* no exec needed */
#endif
}
#elif defined(__linux__) && (defined(__i386__) || defined(__arm__))
static
void
check_vmsplit
(
void
*
stack
)
{
if
(
stack
<
(
void
*
)
0x80000000
)
{
/* if the stack is below 0x80000000, assume we can safely try a munmap there */
if
(
munmap
(
(
void
*
)
0x80000000
,
1
)
==
-
1
&&
errno
==
EINVAL
)
fprintf
(
stderr
,
"Warning: memory above 0x80000000 doesn't seem to be accessible.
\n
"
"Wine requires a 3G/1G user/kernel memory split to work properly.
\n
"
);
}
}
static
void
set_max_limit
(
int
limit
)
{
struct
rlimit
rlimit
;
if
(
!
getrlimit
(
limit
,
&
rlimit
))
{
rlimit
.
rlim_cur
=
rlimit
.
rlim_max
;
setrlimit
(
limit
,
&
rlimit
);
}
}
static
int
pre_exec
(
void
)
{
int
temp
;
check_vmsplit
(
&
temp
);
set_max_limit
(
RLIMIT_AS
);
#ifdef __i386__
return
1
;
/* we have a preloader on x86 */
#else
return
0
;
#endif
}
#elif defined(__linux__) && (defined(__x86_64__) || defined(__aarch64__))
static
int
pre_exec
(
void
)
{
return
1
;
/* we have a preloader on x86-64/arm64 */
}
#elif defined(__APPLE__) && (defined(__i386__) || defined(__x86_64__))
static
int
pre_exec
(
void
)
{
return
1
;
/* we have a preloader */
}
#elif (defined(__FreeBSD__) || defined (__FreeBSD_kernel__) || defined(__DragonFly__))
static
int
pre_exec
(
void
)
{
struct
rlimit
rl
;
rl
.
rlim_cur
=
0x02000000
;
rl
.
rlim_max
=
0x02000000
;
setrlimit
(
RLIMIT_DATA
,
&
rl
);
return
1
;
}
#else
static
int
pre_exec
(
void
)
{
return
0
;
/* no exec needed */
}
#endif
/* canonicalize path and return its directory name */
static
char
*
realpath_dirname
(
const
char
*
name
)
{
...
...
@@ -279,8 +149,6 @@ static void *load_ntdll( char *argv0 )
*/
int
main
(
int
argc
,
char
*
argv
[]
)
{
char
error
[
1024
];
int
i
;
void
*
handle
;
if
((
handle
=
load_ntdll
(
argv
[
0
]
)))
...
...
@@ -291,28 +159,7 @@ int main( int argc, char *argv[] )
exit
(
1
);
}
if
(
!
getenv
(
"WINELOADERNOEXEC"
))
/* first time around */
{
static
char
noexec
[]
=
"WINELOADERNOEXEC=1"
;
putenv
(
noexec
);
check_command_line
(
argc
,
argv
);
if
(
pre_exec
())
{
wine_init_argv0_path
(
argv
[
0
]
);
wine_exec_wine_binary
(
NULL
,
argv
,
getenv
(
"WINELOADER"
));
fprintf
(
stderr
,
"wine: could not exec the wine loader
\n
"
);
exit
(
1
);
}
}
if
(
wine_main_preload_info
)
{
for
(
i
=
0
;
wine_main_preload_info
[
i
].
size
;
i
++
)
wine_mmap_add_reserved_area
(
wine_main_preload_info
[
i
].
addr
,
wine_main_preload_info
[
i
].
size
);
}
wine_init
(
argc
,
argv
,
error
,
sizeof
(
error
)
);
fprintf
(
stderr
,
"wine: failed to initialize: %s
\n
"
,
error
);
fprintf
(
stderr
,
"wine: could not load ntdll.so: %s
\n
"
,
dlerror
()
);
pthread_detach
(
pthread_self
()
);
/* force importing libpthread for OpenGL */
exit
(
1
);
}
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