Module: wine Branch: master Commit: 662897e9d675941a089f9e6515006bdecb092ffb URL: http://source.winehq.org/git/wine.git/?a=commit;h=662897e9d675941a089f9e6515...
Author: Alexandre Julliard julliard@winehq.org Date: Thu Dec 7 20:51:49 2006 +0100
winebuild: Added --nxcompat option, and mark all modules as NX-compatible by default.
---
tools/winebuild/build.h | 1 + tools/winebuild/main.c | 7 +++++++ tools/winebuild/spec32.c | 4 ++-- tools/winebuild/utils.c | 3 +++ tools/winebuild/winebuild.man.in | 4 ++++ 5 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/tools/winebuild/build.h b/tools/winebuild/build.h index 2749c4c..5668271 100644 --- a/tools/winebuild/build.h +++ b/tools/winebuild/build.h @@ -99,6 +99,7 @@ typedef struct int nb_names; /* number of entry points with names */ unsigned int nb_resources; /* number of resources */ int characteristics; /* characteristics for the PE header */ + int dll_characteristics;/* DLL characteristics for the PE header */ int subsystem; /* subsystem id */ int subsystem_major; /* subsystem version major number */ int subsystem_minor; /* subsystem version minor number */ diff --git a/tools/winebuild/main.c b/tools/winebuild/main.c index b5f0054..5005fe1 100644 --- a/tools/winebuild/main.c +++ b/tools/winebuild/main.c @@ -260,6 +260,7 @@ static const char usage_str[] = " -L, --library-path=DIR Look for imports libraries in DIR\n" " -M, --main-module=MODULE Set the name of the main module for a Win16 dll\n" " --nm-cmd=NM Command to use to get undefined symbols (default: nm)\n" +" --nxcompat=y|n Set the NX compatibility flag (default: yes)\n" " -N, --dll-name=DLLNAME Set the DLL name (default: from input file name)\n" " -o, --output=NAME Set the output file name (default: stdout)\n" " -r, --res=RSRC.RES Load resources from RSRC.RES\n" @@ -287,6 +288,7 @@ enum long_options_values LONG_OPT_EXTERNAL_SYMS, LONG_OPT_LDCMD, LONG_OPT_NMCMD, + LONG_OPT_NXCOMPAT, LONG_OPT_RELAY16, LONG_OPT_RELAY32, LONG_OPT_SAVE_TEMPS, @@ -306,6 +308,7 @@ static const struct option long_options[ { "external-symbols", 0, 0, LONG_OPT_EXTERNAL_SYMS }, { "ld-cmd", 1, 0, LONG_OPT_LDCMD }, { "nm-cmd", 1, 0, LONG_OPT_NMCMD }, + { "nxcompat", 1, 0, LONG_OPT_NXCOMPAT }, { "relay16", 0, 0, LONG_OPT_RELAY16 }, { "relay32", 0, 0, LONG_OPT_RELAY32 }, { "save-temps", 0, 0, LONG_OPT_SAVE_TEMPS }, @@ -476,6 +479,10 @@ static char **parse_options( int argc, c case LONG_OPT_NMCMD: nm_command = xstrdup( optarg ); break; + case LONG_OPT_NXCOMPAT: + if (optarg[0] == 'n' || optarg[0] == 'N') + spec->dll_characteristics &= ~IMAGE_DLLCHARACTERISTICS_NX_COMPAT; + break; case LONG_OPT_RELAY16: set_exec_mode( MODE_RELAY16 ); break; diff --git a/tools/winebuild/spec32.c b/tools/winebuild/spec32.c index 9e74e85..6fcc42e 100644 --- a/tools/winebuild/spec32.c +++ b/tools/winebuild/spec32.c @@ -426,8 +426,8 @@ void BuildSpec32File( DLLSPEC *spec ) output( "\t.long 0\n" ); /* CheckSum */ output( "\t%s 0x%04x\n", /* Subsystem */ get_asm_short_keyword(), spec->subsystem ); - output( "\t%s 0\n", /* DllCharacteristics */ - get_asm_short_keyword() ); + output( "\t%s 0x%04x\n", /* DllCharacteristics */ + get_asm_short_keyword(), spec->dll_characteristics ); output( "\t%s %u,%u\n", /* SizeOfStackReserve/Commit */ get_asm_ptr_keyword(), (spec->stack_size ? spec->stack_size : 1024) * 1024, page_size ); output( "\t%s %u,%u\n", /* SizeOfHeapReserve/Commit */ diff --git a/tools/winebuild/utils.c b/tools/winebuild/utils.c index f86f198..3458eb7 100644 --- a/tools/winebuild/utils.c +++ b/tools/winebuild/utils.c @@ -31,6 +31,8 @@ # include <unistd.h> #endif
+#include "windef.h" +#include "winnt.h" #include "build.h"
#define MAX_TMP_FILES 8 @@ -332,6 +334,7 @@ DLLSPEC *alloc_dll_spec(void) spec->nb_names = 0; spec->nb_resources = 0; spec->characteristics = 0; + spec->dll_characteristics = IMAGE_DLLCHARACTERISTICS_NX_COMPAT; spec->subsystem = 0; spec->subsystem_major = 4; spec->subsystem_minor = 0; diff --git a/tools/winebuild/winebuild.man.in b/tools/winebuild/winebuild.man.in index 3b6d0c7..87f47f8 100644 --- a/tools/winebuild/winebuild.man.in +++ b/tools/winebuild/winebuild.man.in @@ -153,6 +153,10 @@ KRNL386.EXE. It shouldn't be needed othe Specify the command to use to get the list of undefined symbols; the default is \fBnm\fR. .TP +.BI --nxcompat= yes|no +Specify whether the module is compatible with no-exec support. The +default is yes. +.TP .BI -o,\ --output= file Set the name of the output file (default is standard output). If the output file name end in \fB.o\fR, the text output is sent to a