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
af62e83d
Commit
af62e83d
authored
Aug 23, 2003
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Got rid of 16-bit glue code generation since it is no longer used.
parent
5fbb446c
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
4 additions
and
202 deletions
+4
-202
Make.rules.in
Make.rules.in
+1
-1
Makefile.in
Makefile.in
+2
-2
Makedll.rules.in
dlls/Makedll.rules.in
+0
-5
.cvsignore
dlls/ntdll/.cvsignore
+0
-1
build.h
tools/winebuild/build.h
+0
-1
main.c
tools/winebuild/main.c
+0
-10
spec16.c
tools/winebuild/spec16.c
+0
-138
winebuild.man.in
tools/winebuild/winebuild.man.in
+1
-44
No files found.
Make.rules.in
View file @
af62e83d
...
...
@@ -100,7 +100,7 @@ prog_manext = 1
api_manext = 3w
conf_manext = 5
CLEAN_FILES = *.o *.a *.so *.ln *.$(LIBEXT) \\\#*\\\# *~ *% .\\\#* *.bak *.orig *.rej \
*.flc *.spec.c *.spec.def *.
glue.c *.
dbg.c y.tab.c y.tab.h @LEX_OUTPUT_ROOT@.c core
*.flc *.spec.c *.spec.def *.dbg.c y.tab.c y.tab.h @LEX_OUTPUT_ROOT@.c core
OBJS = $(C_SRCS:.c=.o) $(EXTRA_OBJS)
...
...
Makefile.in
View file @
af62e83d
...
...
@@ -126,10 +126,10 @@ crosstest:: $(TESTSUBDIRS:%=%/__crosstest__)
# Misc rules
TAGS etags
:
etags
`
find
$(TOPSRCDIR)
-name
'*.[ch]'
-a
-not
-name
'*.spec.c'
-a
-not
-name
'*.
glue.c'
-a
-not
-name
'*.
dbg.c'
-print
`
etags
`
find
$(TOPSRCDIR)
-name
'*.[ch]'
-a
-not
-name
'*.spec.c'
-a
-not
-name
'*.dbg.c'
-print
`
tags ctags
:
ctags
--c-types
=
+px
`
find
$(TOPSRCDIR)
-name
'*.[ch]'
-a
-not
-name
'*.spec.c'
-a
-not
-name
'*.
glue.c'
-a
-not
-name
'*.
dbg.c'
-print
`
ctags
--c-types
=
+px
`
find
$(TOPSRCDIR)
-name
'*.[ch]'
-a
-not
-name
'*.spec.c'
-a
-not
-name
'*.dbg.c'
-print
`
manpages
:
$(MKINSTALLDIRS)
$(TOPOBJDIR)
/documentation/man3w
...
...
dlls/Makedll.rules.in
View file @
af62e83d
...
...
@@ -34,11 +34,6 @@ $(MODULE).tmp.o: $(ALL_OBJS) Makefile.in
$(LDCOMBINE) $(ALL_OBJS) -o $@
-$(STRIP) --strip-unneeded $@
# Rule for 16-bit glue
$(MODULE).glue.c: $(C_SRCS) $(C_SRCS16) $(WINEBUILD)
$(WINEBUILD) $(DEFS) -o $@ --glue -C$(SRCDIR) $(C_SRCS) $(C_SRCS16)
# Rules for .dll files
$(MODULE): $(RCOBJS) $(OBJS) $(MODULE).dbg.o $(SPEC_DEF) $(IMPORTLIBS) Makefile.in
...
...
dlls/ntdll/.cvsignore
View file @
af62e83d
Makefile
ntdll.dll.dbg.c
ntdll.dll.glue.c
ntdll.spec.c
ntdll.spec.def
relay16.s
...
...
tools/winebuild/build.h
View file @
af62e83d
...
...
@@ -155,7 +155,6 @@ extern int output_res16_directory( unsigned char *buffer );
extern
void
output_dll_init
(
FILE
*
outfile
,
const
char
*
constructor
,
const
char
*
destructor
);
extern
int
parse_debug_channels
(
const
char
*
srcdir
,
const
char
*
filename
);
extern
void
BuildGlue
(
FILE
*
outfile
,
const
char
*
srcdir
,
char
**
argv
);
extern
void
BuildRelays16
(
FILE
*
outfile
);
extern
void
BuildRelays32
(
FILE
*
outfile
);
extern
void
BuildSpec16File
(
FILE
*
outfile
);
...
...
tools/winebuild/main.c
View file @
af62e83d
...
...
@@ -85,7 +85,6 @@ enum exec_mode_values
MODE_NONE
,
MODE_SPEC
,
MODE_EXE
,
MODE_GLUE
,
MODE_DEF
,
MODE_DEBUG
,
MODE_RELAY16
,
...
...
@@ -148,7 +147,6 @@ static const char usage_str[] =
" --def=FILE.SPEC Build a .def file from a spec file
\n
"
" --exe=NAME Build a .c file for the named executable
\n
"
" --debug [FILES] Build a .c file with the debug channels declarations
\n
"
" --glue [FILES] Build the 16-bit glue for the source files
\n
"
" --relay16 Build the 16-bit relay assembly routines
\n
"
" --relay32 Build the 32-bit relay assembly routines
\n\n
"
"The mode options are mutually exclusive; you must specify one and only one.
\n\n
"
;
...
...
@@ -159,7 +157,6 @@ enum long_options_values
LONG_OPT_DEF
,
LONG_OPT_EXE
,
LONG_OPT_DEBUG
,
LONG_OPT_GLUE
,
LONG_OPT_RELAY16
,
LONG_OPT_RELAY32
,
LONG_OPT_VERSION
...
...
@@ -173,7 +170,6 @@ static const struct option long_options[] =
{
"def"
,
1
,
0
,
LONG_OPT_DEF
},
{
"exe"
,
1
,
0
,
LONG_OPT_EXE
},
{
"debug"
,
0
,
0
,
LONG_OPT_DEBUG
},
{
"glue"
,
0
,
0
,
LONG_OPT_GLUE
},
{
"relay16"
,
0
,
0
,
LONG_OPT_RELAY16
},
{
"relay32"
,
0
,
0
,
LONG_OPT_RELAY32
},
{
"version"
,
0
,
0
,
LONG_OPT_VERSION
},
...
...
@@ -328,9 +324,6 @@ static char **parse_options( int argc, char **argv )
case
LONG_OPT_DEBUG
:
set_exec_mode
(
MODE_DEBUG
);
break
;
case
LONG_OPT_GLUE
:
set_exec_mode
(
MODE_GLUE
);
break
;
case
LONG_OPT_RELAY16
:
set_exec_mode
(
MODE_RELAY16
);
break
;
...
...
@@ -421,9 +414,6 @@ int main(int argc, char **argv)
case
MODE_DEBUG
:
BuildDebugFile
(
output_file
,
current_src_dir
,
argv
);
break
;
case
MODE_GLUE
:
BuildGlue
(
output_file
,
current_src_dir
,
argv
);
break
;
case
MODE_RELAY16
:
if
(
argv
[
0
])
fatal_error
(
"file argument '%s' not allowed in this mode
\n
"
,
argv
[
0
]
);
BuildRelays16
(
output_file
);
...
...
tools/winebuild/spec16.c
View file @
af62e83d
...
...
@@ -452,91 +452,6 @@ static void BuildCallFrom16Func( FILE *outfile, const char *profile, const char
/*******************************************************************
* BuildCallTo16Func
*
* Build a Wine-to-16-bit callback glue function.
*
* Prototypes for the CallTo16 functions:
* extern WORD CALLBACK PREFIX_CallTo16_word_xxx( FARPROC16 func, args... );
* extern LONG CALLBACK PREFIX_CallTo16_long_xxx( FARPROC16 func, args... );
*
* These routines are provided solely for convenience; they simply
* write the arguments onto the 16-bit stack, and call the appropriate
* wine_call_to_16... core routine.
*
* If you have more sophisticated argument conversion requirements than
* are provided by these routines, you might as well call the core
* routines by yourself.
*
*/
static
int
BuildCallTo16Func
(
FILE
*
outfile
,
const
char
*
profile
,
const
char
*
prefix
)
{
const
char
*
args
=
profile
+
5
;
int
i
,
argsize
=
0
,
short_ret
=
0
;
if
(
!
strncmp
(
"word_"
,
profile
,
5
))
short_ret
=
1
;
else
if
(
strncmp
(
"long_"
,
profile
,
5
))
{
error
(
"Invalid function name '%s'
\n
"
,
profile
);
return
0
;
}
fprintf
(
outfile
,
"unsigned %s __stdcall %s_CallTo16_%s( void (*proc)()"
,
short_ret
?
"short"
:
"int"
,
prefix
,
profile
);
args
=
profile
+
5
;
for
(
i
=
0
;
args
[
i
];
i
++
)
{
fprintf
(
outfile
,
", "
);
switch
(
args
[
i
])
{
case
'w'
:
fprintf
(
outfile
,
"unsigned short"
);
argsize
+=
2
;
break
;
case
'l'
:
fprintf
(
outfile
,
"unsigned int"
);
argsize
+=
4
;
break
;
default:
error
(
"Invalid letter '%c' in function name '%s'
\n
"
,
args
[
i
],
profile
);
return
0
;
}
fprintf
(
outfile
,
" arg%d"
,
i
+
1
);
}
fprintf
(
outfile
,
" )
\n
{
\n
"
);
#ifdef __i386__
if
(
argsize
>
0
)
{
fprintf
(
outfile
,
" char *args;
\n
"
);
fprintf
(
outfile
,
" unsigned int cur_stack;
\n\n
"
);
fprintf
(
outfile
,
"#ifdef __GNUC__
\n
"
);
fprintf
(
outfile
,
" __asm__(
\"
.byte 0x64
\\
n
\\
tmovl (0x%x),%%0
\"
:
\"
=r
\"
(cur_stack));
\n
"
,
STACKOFFSET
);
fprintf
(
outfile
,
"#else
\n
"
);
fprintf
(
outfile
,
" extern char *NtCurrentTeb(void);
\n
"
);
fprintf
(
outfile
,
" cur_stack = *(unsigned int *)(NtCurrentTeb() + 0x%x);
\n
"
,
STACKOFFSET
);
fprintf
(
outfile
,
"#endif
\n
"
);
fprintf
(
outfile
,
" args = (char *)wine_ldt_copy.base[cur_stack >> 19] + (cur_stack & 0xffff);
\n
"
);
}
args
=
profile
+
5
;
for
(
i
=
0
;
args
[
i
];
i
++
)
{
switch
(
args
[
i
])
{
case
'w'
:
fprintf
(
outfile
,
" args -= sizeof(unsigned short); *(unsigned short"
);
break
;
case
'l'
:
fprintf
(
outfile
,
" args -= sizeof(unsigned int); *(unsigned int"
);
break
;
default:
fprintf
(
stderr
,
"Unexpected case '%c' in BuildCallTo16Func
\n
"
,
args
[
i
]
);
}
fprintf
(
outfile
,
" *)args = arg%d;
\n
"
,
i
+
1
);
}
fprintf
(
outfile
,
" return wine_call_to_16( proc, %d );
\n
}
\n\n
"
,
argsize
);
#else
/* __i386__ */
fprintf
(
outfile
,
" assert(0);
\n
}
\n\n
"
);
#endif
/* __i386__ */
return
1
;
}
/*******************************************************************
* get_function_name
*/
static
const
char
*
get_function_name
(
const
ORDDEF
*
odp
)
...
...
@@ -921,56 +836,3 @@ void BuildSpec16File( FILE *outfile )
" __wine_unregister_dll_16( &descriptor );
\n
"
"}
\n
"
,
destructor
);
}
/*******************************************************************
* BuildGlue
*
* Build the 16-bit-to-Wine/Wine-to-16-bit callback glue code
*/
void
BuildGlue
(
FILE
*
outfile
,
const
char
*
srcdir
,
char
**
argv
)
{
char
buffer
[
1024
];
/* File header */
output_file_header
(
outfile
);
#ifdef __i386__
fprintf
(
outfile
,
"extern unsigned int __stdcall wine_call_to_16( void (*target)(), int args );
\n\n
"
);
#else
fprintf
(
outfile
,
"#include <assert.h>
\n\n
"
);
#endif
/* Build the callback glue functions */
while
(
*
argv
)
{
FILE
*
infile
=
open_input_file
(
srcdir
,
*
argv
);
while
(
fgets
(
buffer
,
sizeof
(
buffer
),
infile
))
{
current_line
++
;
if
(
strstr
(
buffer
,
"### start build ###"
))
break
;
}
while
(
fgets
(
buffer
,
sizeof
(
buffer
),
infile
))
{
char
*
p
;
if
(
(
p
=
strstr
(
buffer
,
"CallTo16_"
))
!=
NULL
)
{
char
*
q
,
*
profile
=
p
+
strlen
(
"CallTo16_"
);
for
(
q
=
profile
;
(
*
q
==
'_'
)
||
isalpha
(
*
q
);
q
++
)
;
*
q
=
'\0'
;
for
(
q
=
p
-
1
;
q
>
buffer
&&
((
*
q
==
'_'
)
||
isalnum
(
*
q
));
q
--
)
;
if
(
++
q
<
p
)
p
[
-
1
]
=
'\0'
;
else
q
=
""
;
BuildCallTo16Func
(
outfile
,
profile
,
q
);
}
current_line
++
;
if
(
strstr
(
buffer
,
"### stop build ###"
))
break
;
}
close_input_file
(
infile
);
argv
++
;
}
}
tools/winebuild/winebuild.man.in
View file @
af62e83d
...
...
@@ -53,13 +53,6 @@ should be a list of C files to search for debug channel
definitions. The resulting C file must be compiled and linked with the
dll.
.TP
.B \--glue
Build a C file containing the glue code for the 16-bit calls contained
in the
.I input files.
These calls must be specified in the source files using special
markers, as described in the \fBGLUE FUNCTIONS\fR section.
.TP
.B \--relay16
Generate the assembly code for the 16-bit relay routines. This is for
Wine internal usage only, you should never need to use this option.
...
...
@@ -72,7 +65,7 @@ Wine internal usage only, you should never need to use this option.
.BI \-C,\ --source-dir= directory
Change to the specified directory before reading source files. Only
meaningful in
.BR \--debug\
and\ --glue\ modes
.
.BR \--debug\
mode
.
.TP
.BI \-D\ symbol
Ignored for compatibility with the C compiler.
...
...
@@ -406,42 +399,6 @@ This declaration defines an ordinal as an absolute value.
will be the name available for dynamic linking.
.I data
can be a decimal number or a hex number preceeded by "0x".
.SH "GLUE FUNCTIONS"
Glue functions are used to call down to 16-bit code from a 32-bit
function. This is done by declaring a special type of function
prototype in the source file that needs to call to 16-bit code, and
processing the source file through
.I winebuild --glue.
.PP
These prototypes must be of one of the following forms:
.PP
.B extern WORD CALLBACK \fIprefix\fB_CallTo16_word_\fIxxx\fB( FARPROC16 func, \fIargs\fB );
.br
.B extern LONG CALLBACK \fIprefix\fB_CallTo16_long_\fIxxx\fB( FARPROC16 func, \fIargs\fB );
.PP
The
.I prefix
can be anything you need to make the function names unique inside a
given dll. The
.I xxx
characters specify the type of the arguments, with one letter for each
argument. A \fBw\fR indicates a WORD argument, a \fBl\fR indicates a
LONG argument.
.PP
All the CallTo16 prototypes must be located between the special
markers
.B ### start build ###
and
.B ### stop build ###
(which have to be inside C comments of course).
.PP
Here's what a real life example looks like:
.PP
.B /* ### start build ### */
.br
.B extern WORD CALLBACK PRTDRV_CallTo16_word_ww(FARPROC16,WORD,WORD);
.br
.B /* ### stop build ### */
.SH AUTHORS
.B winebuild
has been worked on by many people over the years. The main authors are
...
...
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