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
0c214a70
Commit
0c214a70
authored
Mar 03, 2008
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
winebuild: Add support for 16-bit exe modules.
parent
c72b9b28
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
40 additions
and
14 deletions
+40
-14
main.c
tools/winebuild/main.c
+4
-11
spec16.c
tools/winebuild/spec16.c
+36
-3
No files found.
tools/winebuild/main.c
View file @
0c214a70
...
...
@@ -596,10 +596,12 @@ int main(int argc, char **argv)
case
MODE_DLL
:
if
(
spec
->
subsystem
!=
IMAGE_SUBSYSTEM_NATIVE
)
spec
->
characteristics
|=
IMAGE_FILE_DLL
;
if
(
!
spec_file_name
)
fatal_error
(
"missing .spec file
\n
"
);
/* fall through */
case
MODE_EXE
:
load_resources
(
argv
,
spec
);
load_import_libs
(
argv
);
if
(
!
spec_file_name
)
fatal_error
(
"missing .spec file
\n
"
);
if
(
!
parse_input_file
(
spec
))
break
;
if
(
spec_file_name
&&
!
parse_input_file
(
spec
))
break
;
switch
(
spec
->
type
)
{
case
SPEC_WIN16
:
...
...
@@ -614,15 +616,6 @@ int main(int argc, char **argv)
default:
assert
(
0
);
}
break
;
case
MODE_EXE
:
if
(
spec
->
type
==
SPEC_WIN16
)
fatal_error
(
"Cannot build 16-bit exe files
\n
"
);
if
(
!
spec
->
file_name
)
fatal_error
(
"executable must be named via the -F option
\n
"
);
load_resources
(
argv
,
spec
);
load_import_libs
(
argv
);
if
(
spec_file_name
&&
!
parse_input_file
(
spec
))
break
;
read_undef_symbols
(
spec
,
argv
);
BuildSpec32File
(
spec
);
break
;
case
MODE_DEF
:
if
(
argv
[
0
])
fatal_error
(
"file argument '%s' not allowed in this mode
\n
"
,
argv
[
0
]
);
if
(
spec
->
type
==
SPEC_WIN16
)
fatal_error
(
"Cannot yet build .def file for 16-bit dlls
\n
"
);
...
...
tools/winebuild/spec16.c
View file @
0c214a70
...
...
@@ -435,6 +435,7 @@ static int sort_func_list( ORDDEF **list, int count,
{
int
i
,
j
;
if
(
!
count
)
return
0
;
qsort
(
list
,
count
,
sizeof
(
*
list
),
compare
);
for
(
i
=
j
=
0
;
i
<
count
;
i
++
)
...
...
@@ -528,6 +529,7 @@ static void output_init_code( const DLLSPEC *spec, const char *header_name )
void
BuildSpec16File
(
DLLSPEC
*
spec
)
{
ORDDEF
**
typelist
;
ORDDEF
*
entry_point
=
NULL
;
int
i
,
j
,
nb_funcs
;
char
header_name
[
256
];
...
...
@@ -535,6 +537,12 @@ void BuildSpec16File( DLLSPEC *spec )
output_standard_file_header
();
if
(
!
spec
->
file_name
)
{
char
*
p
;
spec
->
file_name
=
xstrdup
(
output_file_name
);
if
((
p
=
strrchr
(
spec
->
file_name
,
'.'
)))
*
p
=
0
;
}
if
(
!
spec
->
dll_name
)
/* set default name from file name */
{
char
*
p
;
...
...
@@ -542,6 +550,28 @@ void BuildSpec16File( DLLSPEC *spec )
if
((
p
=
strrchr
(
spec
->
dll_name
,
'.'
)))
*
p
=
0
;
}
/* store the main entry point as ordinal 0 */
if
(
!
spec
->
ordinals
)
{
spec
->
ordinals
=
xmalloc
(
sizeof
(
spec
->
ordinals
[
0
])
);
spec
->
ordinals
[
0
]
=
NULL
;
}
if
(
spec
->
init_func
&&
!
(
spec
->
characteristics
&
IMAGE_FILE_DLL
))
{
entry_point
=
xmalloc
(
sizeof
(
*
entry_point
)
);
entry_point
->
type
=
TYPE_PASCAL
;
entry_point
->
ordinal
=
0
;
entry_point
->
lineno
=
0
;
entry_point
->
flags
=
FLAG_REGISTER
;
entry_point
->
name
=
NULL
;
entry_point
->
link_name
=
xstrdup
(
spec
->
init_func
);
entry_point
->
export_name
=
NULL
;
entry_point
->
u
.
func
.
arg_types
[
0
]
=
0
;
assert
(
!
spec
->
ordinals
[
0
]
);
spec
->
ordinals
[
0
]
=
entry_point
;
}
/* Build sorted list of all argument types, without duplicates */
typelist
=
xmalloc
(
(
spec
->
limit
+
1
)
*
sizeof
(
*
typelist
)
);
...
...
@@ -594,12 +624,15 @@ void BuildSpec16File( DLLSPEC *spec )
get_asm_short_keyword
()
);
output
(
"
\t
.long 0
\n
"
);
/* ne_crc */
output
(
"
\t
%s 0x%04x
\n
"
,
get_asm_short_keyword
(),
/* ne_flags */
NE_FFLAGS_SINGLEDATA
|
NE_FFLAGS_LIBMODULE
);
NE_FFLAGS_SINGLEDATA
|
((
spec
->
characteristics
&
IMAGE_FILE_DLL
)
?
NE_FFLAGS_LIBMODULE
:
0
)
);
output
(
"
\t
%s 2
\n
"
,
get_asm_short_keyword
()
);
/* ne_autodata */
output
(
"
\t
%s %u
\n
"
,
get_asm_short_keyword
(),
spec
->
heap_size
);
/* ne_heap */
output
(
"
\t
%s 0
\n
"
,
get_asm_short_keyword
()
);
/* ne_stack */
output
(
"
\t
.long 0
\n
"
);
/* ne_csip */
output
(
"
\t
.long 0
\n
"
);
/* ne_sssp */
if
(
!
entry_point
)
output
(
"
\t
.long 0
\n
"
);
/* ne_csip */
else
output
(
"
\t
%s .L__wine_%s_0-.L__wine_spec_code_segment,1
\n
"
,
get_asm_short_keyword
(),
make_c_identifier
(
spec
->
dll_name
)
);
output
(
"
\t
%s 0,2
\n
"
,
get_asm_short_keyword
()
);
/* ne_sssp */
output
(
"
\t
%s 2
\n
"
,
get_asm_short_keyword
()
);
/* ne_cseg */
output
(
"
\t
%s 0
\n
"
,
get_asm_short_keyword
()
);
/* ne_cmod */
output
(
"
\t
%s 0
\n
"
,
get_asm_short_keyword
()
);
/* ne_cbnrestab */
...
...
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