Fixes for various 64-bit hosting problems. Modified: trunk/reactos/tools/pefixup.c Modified: trunk/reactos/tools/rsym.c Modified: trunk/reactos/tools/rsym.h Modified: trunk/reactos/tools/winebuild/main.c Modified: trunk/reactos/tools/wrc/genres.c Modified: trunk/reactos/w32api/include/winnt.h _____
Modified: trunk/reactos/tools/pefixup.c --- trunk/reactos/tools/pefixup.c 2005-08-08 01:47:52 UTC (rev 17193) +++ trunk/reactos/tools/pefixup.c 2005-08-08 04:26:23 UTC (rev 17194) @@ -44,7 +44,7 @@
#define IMAGE_SCN_MEM_DISCARDABLE 0x2000000 #define IMAGE_SCN_MEM_NOT_PAGED 0x8000000 #define FIELD_OFFSET(t,f) ((LONG)&(((t*)0)->f)) -#define IMAGE_FIRST_SECTION(h) ((PIMAGE_SECTION_HEADER) ((DWORD)h+FIELD_OFFSET(IMAGE_NT_HEADERS,OptionalHeader)+((PIMAGE_NT_HEAD ERS)(h))->FileHeader.SizeOfOptionalHeader)) +#define IMAGE_FIRST_SECTION(h) ((PIMAGE_SECTION_HEADER) ((unsigned long)h+FIELD_OFFSET(IMAGE_NT_HEADERS,OptionalHeader)+((PIMAGE_NT_HEADERS )(h))->FileHeader.SizeOfOptionalHeader)) #define IMAGE_DIRECTORY_ENTRY_EXPORT 0
#pragma pack(push,2) _____
Modified: trunk/reactos/tools/rsym.c --- trunk/reactos/tools/rsym.c 2005-08-08 01:47:52 UTC (rev 17193) +++ trunk/reactos/tools/rsym.c 2005-08-08 04:26:23 UTC (rev 17194) @@ -23,6 +23,7 @@
#include <stdio.h> #include <string.h> #include <stdlib.h> +#include <assert.h>
#include "rsym.h"
@@ -809,6 +810,7 @@ PEFileHeader = (PIMAGE_FILE_HEADER)((char *) FileData + PEDosHeader->e_lfanew + sizeof(ULONG));
/* Locate optional header */ + assert(sizeof(ULONG) == 4); PEOptHeader = (PIMAGE_OPTIONAL_HEADER)(PEFileHeader + 1); ImageBase = PEOptHeader->ImageBase;
_____
Modified: trunk/reactos/tools/rsym.h --- trunk/reactos/tools/rsym.h 2005-08-08 01:47:52 UTC (rev 17193) +++ trunk/reactos/tools/rsym.h 2005-08-08 04:26:23 UTC (rev 17194) @@ -11,15 +11,27 @@
#define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16
typedef unsigned char BYTE; +typedef unsigned char UCHAR; typedef unsigned short WORD; -typedef unsigned long DWORD; +typedef unsigned short USHORT; +#if defined(__x86_64__) && defined(linux) +typedef signed int LONG; +typedef unsigned int ULONG; +typedef unsigned int DWORD; +#else typedef signed long LONG; typedef unsigned long ULONG; +typedef unsigned long DWORD; +#endif #if defined(_WIN64) typedef unsigned __int64 ULONG_PTR; #else +#if defined(__x86_64__) && defined(linux) +typedef unsigned int ULONG_PTR; +#else typedef unsigned long ULONG_PTR; #endif +#endif
#pragma pack(push,2) typedef struct _IMAGE_DOS_HEADER { @@ -129,42 +141,42 @@
typedef struct { - unsigned short f_magic; /* magic number */ - unsigned short f_nscns; /* number of sections */ - unsigned long f_timdat; /* time & date stamp */ - unsigned long f_symptr; /* file pointer to symtab */ - unsigned long f_nsyms; /* number of symtab entries */ - unsigned short f_opthdr; /* sizeof(optional hdr) */ - unsigned short f_flags; /* flags */ + USHORT f_magic; /* magic number */ + USHORT f_nscns; /* number of sections */ + ULONG f_timdat; /* time & date stamp */ + ULONG f_symptr; /* file pointer to symtab */ + ULONG f_nsyms; /* number of symtab entries */ + USHORT f_opthdr; /* sizeof(optional hdr) */ + USHORT f_flags; /* flags */ } FILHDR;
typedef struct { char s_name[8]; /* section name */ - unsigned long s_paddr; /* physical address, aliased s_nlib */ - unsigned long s_vaddr; /* virtual address */ - unsigned long s_size; /* section size */ - unsigned long s_scnptr; /* file ptr to raw data for section */ - unsigned long s_relptr; /* file ptr to relocation */ - unsigned long s_lnnoptr; /* file ptr to line numbers */ - unsigned short s_nreloc; /* number of relocation entries */ - unsigned short s_nlnno; /* number of line number entries */ - unsigned long s_flags; /* flags */ + ULONG s_paddr; /* physical address, aliased s_nlib */ + ULONG s_vaddr; /* virtual address */ + ULONG s_size; /* section size */ + ULONG s_scnptr; /* file ptr to raw data for section */ + ULONG s_relptr; /* file ptr to relocation */ + ULONG s_lnnoptr; /* file ptr to line numbers */ + USHORT s_nreloc; /* number of relocation entries */ + USHORT s_nlnno; /* number of line number entries */ + ULONG s_flags; /* flags */ } SCNHDR; #pragma pack(pop)
typedef struct _SYMBOLFILE_HEADER { - unsigned long SymbolsOffset; - unsigned long SymbolsLength; - unsigned long StringsOffset; - unsigned long StringsLength; + ULONG SymbolsOffset; + ULONG SymbolsLength; + ULONG StringsOffset; + ULONG StringsLength; } SYMBOLFILE_HEADER, *PSYMBOLFILE_HEADER;
typedef struct _STAB_ENTRY { - unsigned long n_strx; /* index into string table of name */ - unsigned char n_type; /* type of symbol */ - unsigned char n_other; /* misc info (usually empty) */ - unsigned short n_desc; /* description field */ - unsigned long n_value; /* value of symbol */ + ULONG n_strx; /* index into string table of name */ + UCHAR n_type; /* type of symbol */ + UCHAR n_other; /* misc info (usually empty) */ + USHORT n_desc; /* description field */ + ULONG n_value; /* value of symbol */ } STAB_ENTRY, *PSTAB_ENTRY;
#define N_FUN 0x24 @@ -234,17 +246,17 @@ char e_name[E_SYMNMLEN]; struct { - unsigned long e_zeroes; - unsigned long e_offset; + ULONG e_zeroes; + ULONG e_offset; } e; } e; - unsigned long e_value; + ULONG e_value; short e_scnum; - unsigned short e_type; - unsigned char e_sclass; - unsigned char e_numaux; + USHORT e_type; + UCHAR e_sclass; + UCHAR e_numaux; } COFF_SYMENT, *PCOFF_SYMENT; #pragma pack(pop)
_____
Modified: trunk/reactos/tools/winebuild/main.c --- trunk/reactos/tools/winebuild/main.c 2005-08-08 01:47:52 UTC (rev 17193) +++ trunk/reactos/tools/winebuild/main.c 2005-08-08 04:26:23 UTC (rev 17194) @@ -46,7 +46,7 @@
int kill_at = 0; int debugging = 0;
-#ifdef __i386__ +#if defined(__i386__) || defined(__x86_64__) enum target_cpu target_cpu = CPU_x86; #elif defined(__sparc__) enum target_cpu target_cpu = CPU_SPARC; _____
Modified: trunk/reactos/tools/wrc/genres.c --- trunk/reactos/tools/wrc/genres.c 2005-08-08 01:47:52 UTC (rev 17193) +++ trunk/reactos/tools/wrc/genres.c 2005-08-08 04:26:23 UTC (rev 17194) @@ -43,6 +43,13 @@
#include "winuser.h" #include "wine/unicode.h"
+/* Fix 64-bit host, re: put_dword */ +#if defined(linux) && defined(__x86_64__) +typedef unsigned int HOST_DWORD; +#else +typedef unsigned long HOST_DWORD; +#endif + #define SetResSize(res, tag) set_dword((res), (tag), (res)->size - get_dword((res), (tag)))
res_t *new_res(void) @@ -114,7 +121,9 @@
void put_dword(res_t *res, unsigned d) { - if(res->allocsize - res->size < sizeof(DWORD)) + assert(sizeof(HOST_DWORD) == 4); + + if(res->allocsize - res->size < sizeof(HOST_DWORD)) grow_res(res, RES_BLOCKSIZE); switch(byteorder) { @@ -138,7 +147,7 @@ res->data[res->size+0] = LOBYTE(LOWORD(d)); break; } - res->size += sizeof(DWORD); + res->size += sizeof(HOST_DWORD); }
static void put_pad(res_t *res) @@ -223,7 +232,7 @@ * Remarks :
************************************************************************ ***** */ -static DWORD get_dword(res_t *res, int ofs) +static HOST_DWORD get_dword(res_t *res, int ofs) { switch(byteorder) { @@ -434,7 +443,7 @@
************************************************************************ ***** */ static int put_res_header(res_t *res, int type, name_id_t *ntype, name_id_t *name, - DWORD memopt, lvc_t *lvc) + HOST_DWORD memopt, lvc_t *lvc) { if(win32) { @@ -452,8 +461,8 @@ put_dword(res, 0); /* DataVersion */ put_word(res, memopt); /* Memory options */ put_lvc(res, lvc); /* Language, version and characts */ - set_dword(res, 0*sizeof(DWORD), res->size); /* Set preliminary resource */ - set_dword(res, 1*sizeof(DWORD), res->size); /* Set HeaderSize */ + set_dword(res, 0*sizeof(HOST_DWORD), res->size); /* Set preliminary resource */ + set_dword(res, 1*sizeof(HOST_DWORD), res->size); /* Set HeaderSize */ res->dataidx = res->size; return 0; } @@ -1415,7 +1424,7 @@ name_id_t name; int i; int restag; - DWORD lastsize = 0; + HOST_DWORD lastsize = 0;
assert(stt != NULL); res = new_res(); _____
Modified: trunk/reactos/w32api/include/winnt.h --- trunk/reactos/w32api/include/winnt.h 2005-08-08 01:47:52 UTC (rev 17193) +++ trunk/reactos/w32api/include/winnt.h 2005-08-08 04:26:23 UTC (rev 17194) @@ -1533,7 +1533,7 @@
} ACL_SIZE_INFORMATION;
/* FIXME: add more machines */ -#ifdef _X86_ +#if defined(_X86_) || defined(linux) #define SIZE_OF_80387_REGISTERS 80 #define CONTEXT_i386 0x10000 #define CONTEXT_i486 0x10000