mirror of
https://github.com/reactos/wine.git
synced 2024-11-24 12:20:07 +00:00
winebuild: Add a -ordinal flag for entry points that must be imported by ordinal but exported by name.
This commit is contained in:
parent
8170acfc35
commit
3243311214
@ -124,15 +124,16 @@ extern enum target_platform target_platform;
|
||||
|
||||
/* entry point flags */
|
||||
#define FLAG_NORELAY 0x01 /* don't use relay debugging for this function */
|
||||
#define FLAG_NONAME 0x02 /* don't import function by name */
|
||||
#define FLAG_NONAME 0x02 /* don't export function by name */
|
||||
#define FLAG_RET16 0x04 /* function returns a 16-bit value */
|
||||
#define FLAG_RET64 0x08 /* function returns a 64-bit value */
|
||||
#define FLAG_I386 0x10 /* function is i386 only */
|
||||
#define FLAG_REGISTER 0x20 /* use register calling convention */
|
||||
#define FLAG_PRIVATE 0x40 /* function is private (cannot be imported) */
|
||||
#define FLAG_ORDINAL 0x80 /* function should be imported by ordinal */
|
||||
|
||||
#define FLAG_FORWARD 0x80 /* function is a forwarded name */
|
||||
#define FLAG_EXT_LINK 0x100 /* function links to an external symbol */
|
||||
#define FLAG_FORWARD 0x100 /* function is a forwarded name */
|
||||
#define FLAG_EXT_LINK 0x200 /* function links to an external symbol */
|
||||
|
||||
#define MAX_ORDINALS 65535
|
||||
|
||||
|
@ -70,6 +70,7 @@ static const char * const FlagNames[] =
|
||||
"i386", /* FLAG_I386 */
|
||||
"register", /* FLAG_REGISTER */
|
||||
"private", /* FLAG_PRIVATE */
|
||||
"ordinal", /* FLAG_ORDINAL */
|
||||
NULL
|
||||
};
|
||||
|
||||
@ -545,11 +546,14 @@ static int parse_spec_ordinal( int ordinal, DLLSPEC *spec )
|
||||
}
|
||||
}
|
||||
|
||||
if (!strcmp( odp->name, "@" ) || odp->flags & FLAG_NONAME)
|
||||
if (!strcmp( odp->name, "@" ) || odp->flags & (FLAG_NONAME | FLAG_ORDINAL))
|
||||
{
|
||||
if (ordinal == -1)
|
||||
{
|
||||
error( "Nameless function needs an explicit ordinal number\n" );
|
||||
if (!strcmp( odp->name, "@" ))
|
||||
error( "Nameless function needs an explicit ordinal number\n" );
|
||||
else
|
||||
error( "Function imported by ordinal needs an explicit ordinal number\n" );
|
||||
goto error;
|
||||
}
|
||||
if (spec->type != SPEC_WIN32)
|
||||
@ -557,9 +561,16 @@ static int parse_spec_ordinal( int ordinal, DLLSPEC *spec )
|
||||
error( "Nameless functions not supported for Win16\n" );
|
||||
goto error;
|
||||
}
|
||||
if (!strcmp( odp->name, "@" )) free( odp->name );
|
||||
else odp->export_name = odp->name;
|
||||
odp->name = NULL;
|
||||
if (!strcmp( odp->name, "@" ))
|
||||
{
|
||||
free( odp->name );
|
||||
odp->name = NULL;
|
||||
}
|
||||
else if (!(odp->flags & FLAG_ORDINAL)) /* -ordinal only affects the import library */
|
||||
{
|
||||
odp->export_name = odp->name;
|
||||
odp->name = NULL;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
|
||||
|
@ -552,7 +552,7 @@ void BuildDef32File( DLLSPEC *spec )
|
||||
assert(0);
|
||||
}
|
||||
output( " @%d", odp->ordinal );
|
||||
if (!odp->name) output( " NONAME" );
|
||||
if (!odp->name || (odp->flags & FLAG_ORDINAL)) output( " NONAME" );
|
||||
if (is_data) output( " DATA" );
|
||||
if (odp->flags & FLAG_PRIVATE) output( " PRIVATE" );
|
||||
output( "\n" );
|
||||
|
@ -260,7 +260,8 @@ The entry point is not displayed in relay debugging traces (Win32
|
||||
only).
|
||||
.TP
|
||||
.B -noname
|
||||
The entry point will be imported by ordinal instead of by name.
|
||||
The entry point will be exported by ordinal instead of by name. The
|
||||
name is still available for importing.
|
||||
.TP
|
||||
.B -ret16
|
||||
The function returns a 16-bit value (Win16 only).
|
||||
@ -277,6 +278,10 @@ The function uses CPU register to pass arguments.
|
||||
.B -private
|
||||
The function cannot be imported from other dlls, it can only be
|
||||
accessed through GetProcAddress.
|
||||
.TP
|
||||
.B -ordinal
|
||||
The entry point will be imported by ordinal instead of by name. The
|
||||
name is still exported.
|
||||
.SS "Function ordinals"
|
||||
Syntax:
|
||||
.br
|
||||
|
Loading…
Reference in New Issue
Block a user