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