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
11ee7a70
Commit
11ee7a70
authored
Apr 22, 2019
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
winegcc: Add option to put a builtin dll signature in the DOS header of PE files.
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
f8fff8b2
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
30 additions
and
0 deletions
+30
-0
winegcc.c
tools/winegcc/winegcc.c
+30
-0
No files found.
tools/winegcc/winegcc.c
View file @
11ee7a70
...
...
@@ -205,6 +205,7 @@ struct options
int
compile_only
;
int
force_pointer_size
;
int
large_address_aware
;
int
wine_builtin
;
int
unwind_tables
;
int
strip
;
const
char
*
wine_objdir
;
...
...
@@ -515,6 +516,28 @@ static int check_platform( struct options *opts, const char *file )
return
ret
;
}
static
void
make_wine_builtin
(
const
char
*
file
)
{
static
const
char
wine_magic
[
32
]
=
"Wine builtin DLL"
;
int
fd
;
struct
{
unsigned
short
e_magic
;
unsigned
short
unused
[
29
];
unsigned
int
e_lfanew
;
}
header
;
if
((
fd
=
open
(
file
,
O_RDWR
|
O_BINARY
))
==
-
1
)
error
(
"Failed to add signature to %s
\n
"
,
file
);
if
(
read
(
fd
,
&
header
,
sizeof
(
header
)
)
==
sizeof
(
header
)
&&
!
memcmp
(
&
header
.
e_magic
,
"MZ"
,
2
))
{
if
(
header
.
e_lfanew
<
sizeof
(
header
)
+
sizeof
(
wine_magic
))
error
(
"Not enough space (%x) for Wine signature
\n
"
,
header
.
e_lfanew
);
write
(
fd
,
wine_magic
,
sizeof
(
wine_magic
)
);
}
close
(
fd
);
}
static
const
char
*
get_multiarch_dir
(
enum
target_cpu
cpu
)
{
switch
(
cpu
)
...
...
@@ -1131,6 +1154,8 @@ static void build(struct options* opts)
spawn
(
opts
->
prefix
,
link_args
,
0
);
strarray_free
(
link_args
);
if
(
is_pe
&&
opts
->
wine_builtin
)
make_wine_builtin
(
output_path
);
/* set the base address with prelink if linker support is not present */
if
(
opts
->
prelink
&&
!
opts
->
target
)
{
...
...
@@ -1549,6 +1574,11 @@ int main(int argc, char **argv)
opts
.
large_address_aware
=
1
;
continue
;
}
if
(
!
strcmp
(
Wl
->
base
[
j
],
"--wine-builtin"
))
{
opts
.
wine_builtin
=
1
;
continue
;
}
if
(
!
strcmp
(
Wl
->
base
[
j
],
"--subsystem"
)
&&
j
<
Wl
->
size
-
1
)
{
opts
.
subsystem
=
strdup
(
Wl
->
base
[
++
j
]
);
...
...
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