[ros-diffs] [tkreuzer] 40757: merge 37282 from amd64-branch: Give rsym it's own directory (Timo Kreuzer)

tkreuzer at svn.reactos.org tkreuzer at svn.reactos.org
Fri May 1 01:26:04 CEST 2009


Author: tkreuzer
Date: Fri May  1 03:26:02 2009
New Revision: 40757

URL: http://svn.reactos.org/svn/reactos?rev=40757&view=rev
Log:
merge 37282 from amd64-branch:
Give rsym it's own directory (Timo Kreuzer)

Added:
    trunk/reactos/tools/rsym/   (props changed)
      - copied from r37282, branches/ros-amd64-bringup/reactos/tools/rsym/
Removed:
    trunk/reactos/tools/rsym.c
    trunk/reactos/tools/rsym.h
    trunk/reactos/tools/rsym.mak
    trunk/reactos/tools/rsym_common.c
Modified:
    trunk/reactos/tools/rsym/rsym.c
    trunk/reactos/tools/tools.mak

Propchange: trunk/reactos/tools/rsym/
------------------------------------------------------------------------------
--- bugtraq:logregex (added)
+++ bugtraq:logregex Fri May  1 03:26:02 2009
@@ -1,0 +1,2 @@
+([Ii]ssue|[Bb]ug)s? #?(\d+)(,? ?#?(\d+))*(,? ?(and |or )?#?(\d+))?
+(\d+)

Propchange: trunk/reactos/tools/rsym/
------------------------------------------------------------------------------
    bugtraq:message = See issue #%BUGID% for more details.

Propchange: trunk/reactos/tools/rsym/
------------------------------------------------------------------------------
    bugtraq:url = http://www.reactos.org/bugzilla/show_bug.cgi?id=%BUGID%

Propchange: trunk/reactos/tools/rsym/
------------------------------------------------------------------------------
    tsvn:logminsize = 10

Removed: trunk/reactos/tools/rsym.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rsym.c?rev=40756&view=auto
==============================================================================
--- trunk/reactos/tools/rsym.c [iso-8859-1] (original)
+++ trunk/reactos/tools/rsym.c (removed)
@@ -1,985 +1,0 @@
-/*
- * Usage: rsym input-file output-file
- *
- * There are two sources of information: the .stab/.stabstr
- * sections of the executable and the COFF symbol table. Most
- * of the information is in the .stab/.stabstr sections.
- * However, most of our asm files don't contain .stab directives,
- * so routines implemented in assembler won't show up in the
- * .stab section. They are present in the COFF symbol table.
- * So, we mostly use the .stab/.stabstr sections, but we augment
- * the info there with info from the COFF symbol table when
- * possible.
- *
- * This is a tool and is compiled using the host compiler,
- * i.e. on Linux gcc and not mingw-gcc (cross-compiler).
- * Therefore we can't include SDK headers and we have to
- * duplicate some definitions here.
- * Also note that the internal functions are "old C-style",
- * returning an int, where a return of 0 means success and
- * non-zero is failure.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <assert.h>
-
-#include "rsym.h"
-
-static int
-CompareSymEntry(const PROSSYM_ENTRY SymEntry1, const PROSSYM_ENTRY SymEntry2)
-{
-  if (SymEntry1->Address < SymEntry2->Address)
-    {
-      return -1;
-    }
-
-  if (SymEntry2->Address < SymEntry1->Address)
-    {
-      return +1;
-    }
-
-  return 0;
-}
-
-static int
-GetStabInfo(void *FileData, PIMAGE_FILE_HEADER PEFileHeader,
-            PIMAGE_SECTION_HEADER PESectionHeaders,
-            ULONG *StabSymbolsLength, void **StabSymbolsBase,
-            ULONG *StabStringsLength, void **StabStringsBase)
-{
-  ULONG Idx;
-
-  /* Load .stab and .stabstr sections if available */
-  *StabSymbolsBase = NULL;
-  *StabSymbolsLength = 0;
-  *StabStringsBase = NULL;
-  *StabStringsLength = 0;
-
-  for (Idx = 0; Idx < PEFileHeader->NumberOfSections; Idx++)
-    {
-      /* printf("section: '%.08s'\n", PESectionHeaders[Idx].Name); */
-      if ((strncmp((char*)PESectionHeaders[Idx].Name, ".stab", 5) == 0)
-        && (PESectionHeaders[Idx].Name[5] == 0))
-        {
-           /* printf(".stab section found. Size %d\n",
-               PESectionHeaders[Idx].SizeOfRawData); */
-
-           *StabSymbolsLength = PESectionHeaders[Idx].SizeOfRawData;
-           *StabSymbolsBase = (void *)((char *) FileData + PESectionHeaders[Idx].PointerToRawData);
-        }
-
-      if (strncmp((char*)PESectionHeaders[Idx].Name, ".stabstr", 8) == 0)
-        {
-           /* printf(".stabstr section found. Size %d\n",
-               PESectionHeaders[Idx].SizeOfRawData); */
-
-           *StabStringsLength = PESectionHeaders[Idx].SizeOfRawData;
-           *StabStringsBase = (void *)((char *) FileData + PESectionHeaders[Idx].PointerToRawData);
-        }
-    }
-
-  return 0;
-}
-
-static int
-GetCoffInfo(void *FileData, PIMAGE_FILE_HEADER PEFileHeader,
-            PIMAGE_SECTION_HEADER PESectionHeaders,
-            ULONG *CoffSymbolsLength, void **CoffSymbolsBase,
-            ULONG *CoffStringsLength, void **CoffStringsBase)
-{
-
-  if (0 == PEFileHeader->PointerToSymbolTable || 0 == PEFileHeader->NumberOfSymbols)
-    {
-      /* No COFF symbol table */
-      *CoffSymbolsLength = 0;
-      *CoffStringsLength = 0;
-    }
-  else
-    {
-      *CoffSymbolsLength = PEFileHeader->NumberOfSymbols * sizeof(COFF_SYMENT);
-      *CoffSymbolsBase = (void *)((char *) FileData + PEFileHeader->PointerToSymbolTable);
-      *CoffStringsLength = *((ULONG *) ((char *) *CoffSymbolsBase + *CoffSymbolsLength));
-      *CoffStringsBase = (void *)((char *) *CoffSymbolsBase + *CoffSymbolsLength);
-    }
-
-  return 0;
-}
-
-static ULONG
-FindOrAddString(char *StringToFind, ULONG *StringsLength, void *StringsBase)
-{
-  char *Search, *End;
-
-  Search = (char *) StringsBase;
-  End = Search + *StringsLength;
-
-  while (Search < End)
-    {
-      if (0 == strcmp(Search, StringToFind))
-        {
-          return Search - (char *) StringsBase;
-        }
-      Search += strlen(Search) + 1;
-    }
-
-  strcpy(Search, StringToFind);
-  *StringsLength += strlen(StringToFind) + 1;
-
-  return Search - (char *) StringsBase;
-}
-
-static int
-ConvertStabs(ULONG *SymbolsCount, PROSSYM_ENTRY *SymbolsBase,
-             ULONG *StringsLength, void *StringsBase,
-             ULONG StabSymbolsLength, void *StabSymbolsBase,
-             ULONG StabStringsLength, void *StabStringsBase,
-             ULONG_PTR ImageBase, PIMAGE_FILE_HEADER PEFileHeader,
-             PIMAGE_SECTION_HEADER PESectionHeaders)
-{
-  PSTAB_ENTRY StabEntry;
-  ULONG Count, i;
-  ULONG_PTR Address, LastFunctionAddress;
-  int First = 1;
-  char *Name;
-  ULONG NameLen;
-  char FuncName[256];
-  PROSSYM_ENTRY Current;
-
-  StabEntry = StabSymbolsBase;
-  Count = StabSymbolsLength / sizeof(STAB_ENTRY);
-  *SymbolsCount = 0;
-  if (Count == 0)
-    {
-      /* No symbol info */
-      *SymbolsBase = NULL;
-      return 0;
-    }
-
-  *SymbolsBase = malloc(Count * sizeof(ROSSYM_ENTRY));
-  if (NULL == *SymbolsBase)
-    {
-      fprintf(stderr, "Failed to allocate memory for converted .stab symbols\n");
-      return 1;
-    }
-  Current = *SymbolsBase;
-  memset ( Current, 0, sizeof(*Current) );
-
-  LastFunctionAddress = 0;
-  for (i = 0; i < Count; i++)
-    {
-      if ( 0 == LastFunctionAddress )
-        {
-          Address = StabEntry[i].n_value - ImageBase;
-        }
-      else
-        {
-          Address = LastFunctionAddress + StabEntry[i].n_value;
-        }
-      switch (StabEntry[i].n_type)
-        {
-          case N_SO:
-          case N_SOL:
-          case N_BINCL:
-            Name = (char *) StabStringsBase + StabEntry[i].n_strx;
-            if (StabStringsLength < StabEntry[i].n_strx
-                ||'\0' == *Name || '/' == Name[strlen(Name) - 1]
-                || '\\' == Name[strlen(Name) - 1]
-                || StabEntry[i].n_value < ImageBase)
-              {
-                continue;
-              }
-            if ( First || Address != Current->Address )
-              {
-                if ( !First )
-                  {
-                    memset ( ++Current, 0, sizeof(*Current) );
-                    Current->FunctionOffset = Current[-1].FunctionOffset;
-                  }
-                else
-                  First = 0;
-                Current->Address = Address;
-              }
-            Current->FileOffset = FindOrAddString((char *)StabStringsBase
-                                                  + StabEntry[i].n_strx,
-                                                  StringsLength,
-                                                  StringsBase);
-            break;
-          case N_FUN:
-            if (0 == StabEntry[i].n_desc || StabEntry[i].n_value < ImageBase)
-              {
-                LastFunctionAddress = 0; /* line # 0 = end of function */
-                continue;
-              }
-            if ( First || Address != Current->Address )
-              {
-                if ( !First )
-                  memset ( ++Current, 0, sizeof(*Current) );
-                else
-                  First = 0;
-                Current->Address = Address;
-                Current->FileOffset = Current[-1].FileOffset;
-              }
-            Name = (char *) StabStringsBase + StabEntry[i].n_strx;
-            NameLen = strcspn(Name, ":");
-            if (sizeof(FuncName) <= NameLen)
-              {
-                free(*SymbolsBase);
-                fprintf(stderr, "Function name too long\n");
-                return 1;
-              }
-            memcpy(FuncName, Name, NameLen);
-            FuncName[NameLen] = '\0';
-            Current->FunctionOffset = FindOrAddString(FuncName,
-                                                      StringsLength,
-                                                      StringsBase);
-            Current->SourceLine = 0;
-            LastFunctionAddress = Address;
-            break;
-          case N_SLINE:
-            if ( First || Address != Current->Address )
-              {
-                if ( !First )
-                  {
-                    memset ( ++Current, 0, sizeof(*Current) );
-                    Current->FileOffset = Current[-1].FileOffset;
-                    Current->FunctionOffset = Current[-1].FunctionOffset;
-                  }
-                else
-                  First = 0;
-                Current->Address = Address;
-              }
-            Current->SourceLine = StabEntry[i].n_desc;
-            break;
-          default:
-            continue;
-        }
-    }
-  *SymbolsCount = (Current - *SymbolsBase + 1);
-
-  qsort(*SymbolsBase, *SymbolsCount, sizeof(ROSSYM_ENTRY), (int (*)(const void *, const void *)) CompareSymEntry);
-
-  return 0;
-}
-
-static int
-ConvertCoffs(ULONG *SymbolsCount, PROSSYM_ENTRY *SymbolsBase,
-             ULONG *StringsLength, void *StringsBase,
-             ULONG CoffSymbolsLength, void *CoffSymbolsBase,
-             ULONG CoffStringsLength, void *CoffStringsBase,
-             ULONG_PTR ImageBase, PIMAGE_FILE_HEADER PEFileHeader,
-             PIMAGE_SECTION_HEADER PESectionHeaders)
-{
-  ULONG Count, i;
-  PCOFF_SYMENT CoffEntry;
-  char FuncName[256];
-  char *p;
-  PROSSYM_ENTRY Current;
-
-  CoffEntry = (PCOFF_SYMENT) CoffSymbolsBase;
-  Count = CoffSymbolsLength / sizeof(COFF_SYMENT);
-  *SymbolsBase = malloc(Count * sizeof(ROSSYM_ENTRY));
-  if (NULL == *SymbolsBase)
-    {
-      fprintf(stderr, "Unable to allocate memory for converted COFF symbols\n");
-      return 1;
-    }
-  *SymbolsCount = 0;
-  Current = *SymbolsBase;
-
-  for (i = 0; i < Count; i++)
-    {
-      if (ISFCN(CoffEntry[i].e_type) || C_EXT == CoffEntry[i].e_sclass)
-        {
-          Current->Address = CoffEntry[i].e_value;
-          if (0 < CoffEntry[i].e_scnum)
-            {
-              if (PEFileHeader->NumberOfSections < CoffEntry[i].e_scnum)
-                {
-                  free(*SymbolsBase);
-                  fprintf(stderr, "Invalid section number %d in COFF symbols (only %d sections present)\n",
-                          CoffEntry[i].e_scnum, PEFileHeader->NumberOfSections);
-                  return 1;
-                }
-              Current->Address += PESectionHeaders[CoffEntry[i].e_scnum - 1].VirtualAddress;
-            }
-          Current->FileOffset = 0;
-          if (0 == CoffEntry[i].e.e.e_zeroes)
-            {
-              if (sizeof(FuncName) <= strlen((char *) CoffStringsBase + CoffEntry[i].e.e.e_offset))
-                {
-                  free(*SymbolsBase);
-                  fprintf(stderr, "Function name too long\n");
-                  return 1;
-                }
-              strcpy(FuncName, (char *) CoffStringsBase + CoffEntry[i].e.e.e_offset);
-            }
-          else
-            {
-              memcpy(FuncName, CoffEntry[i].e.e_name, E_SYMNMLEN);
-              FuncName[E_SYMNMLEN] = '\0';
-            }
-
-          /* Name demangling: stdcall */
-          p = strrchr(FuncName, '@');
-          if (NULL != p)
-            {
-              *p = '\0';
-            }
-          p = ('_' == FuncName[0] || '@' == FuncName[0] ? FuncName + 1 : FuncName);
-          Current->FunctionOffset = FindOrAddString(p,
-                                                                         StringsLength,
-                                                                         StringsBase);
-          Current->SourceLine = 0;
-          memset ( ++Current, 0, sizeof(*Current) );
-        }
-      i += CoffEntry[i].e_numaux;
-    }
-
-  *SymbolsCount = (Current - *SymbolsBase + 1);
-  qsort(*SymbolsBase, *SymbolsCount, sizeof(ROSSYM_ENTRY), (int (*)(const void *, const void *)) CompareSymEntry);
-
-  return 0;
-}
-
-static int
-MergeStabsAndCoffs(ULONG *MergedSymbolCount, PROSSYM_ENTRY *MergedSymbols,
-                   ULONG StabSymbolsCount, PROSSYM_ENTRY StabSymbols,
-                   ULONG CoffSymbolsCount, PROSSYM_ENTRY CoffSymbols)
-{
-  ULONG StabIndex, j;
-  ULONG CoffIndex;
-  ULONG_PTR StabFunctionStartAddress;
-  ULONG StabFunctionStringOffset, NewStabFunctionStringOffset;
-
-  *MergedSymbolCount = 0;
-  if (StabSymbolsCount == 0)
-    {
-      *MergedSymbols = NULL;
-      return 0;
-    }
-  *MergedSymbols = malloc(StabSymbolsCount * sizeof(ROSSYM_ENTRY));
-  if (NULL == *MergedSymbols)
-    {
-      fprintf(stderr, "Unable to allocate memory for merged symbols\n");
-      return 1;
-    }
-
-  StabFunctionStartAddress = 0;
-  StabFunctionStringOffset = 0;
-  CoffIndex = 0;
-  for (StabIndex = 0; StabIndex < StabSymbolsCount; StabIndex++)
-    {
-      (*MergedSymbols)[*MergedSymbolCount] = StabSymbols[StabIndex];
-      for (j = StabIndex + 1;
-           j < StabSymbolsCount && StabSymbols[j].Address == StabSymbols[StabIndex].Address;
-           j++)
-        {
-          if (0 != StabSymbols[j].FileOffset && 0 == (*MergedSymbols)[*MergedSymbolCount].FileOffset)
-            {
-              (*MergedSymbols)[*MergedSymbolCount].FileOffset = StabSymbols[j].FileOffset;
-            }
-          if (0 != StabSymbols[j].FunctionOffset && 0 == (*MergedSymbols)[*MergedSymbolCount].FunctionOffset)
-            {
-              (*MergedSymbols)[*MergedSymbolCount].FunctionOffset = StabSymbols[j].FunctionOffset;
-            }
-          if (0 != StabSymbols[j].SourceLine && 0 == (*MergedSymbols)[*MergedSymbolCount].SourceLine)
-            {
-              (*MergedSymbols)[*MergedSymbolCount].SourceLine = StabSymbols[j].SourceLine;
-            }
-        }
-      StabIndex = j - 1;
-      while (CoffIndex < CoffSymbolsCount
-          && CoffSymbols[CoffIndex + 1].Address <= (*MergedSymbols)[*MergedSymbolCount].Address)
-        {
-          CoffIndex++;
-        }
-      NewStabFunctionStringOffset = (*MergedSymbols)[*MergedSymbolCount].FunctionOffset;
-      if (CoffSymbolsCount > 0 &&
-          CoffSymbols[CoffIndex].Address < (*MergedSymbols)[*MergedSymbolCount].Address
-          && StabFunctionStartAddress < CoffSymbols[CoffIndex].Address
-          && 0 != CoffSymbols[CoffIndex].FunctionOffset)
-        {
-          (*MergedSymbols)[*MergedSymbolCount].FunctionOffset = CoffSymbols[CoffIndex].FunctionOffset;
-        }
-      if (StabFunctionStringOffset != NewStabFunctionStringOffset)
-        {
-          StabFunctionStartAddress = (*MergedSymbols)[*MergedSymbolCount].Address;
-        }
-      StabFunctionStringOffset = NewStabFunctionStringOffset;
-      (*MergedSymbolCount)++;
-    }
-
-  return 0;
-}
-
-static PIMAGE_SECTION_HEADER
-FindSectionForRVA(DWORD RVA, unsigned NumberOfSections, PIMAGE_SECTION_HEADER SectionHeaders)
-{
-  unsigned Section;
-
-  for (Section = 0; Section < NumberOfSections; Section++)
-    {
-      if (SectionHeaders[Section].VirtualAddress <= RVA &&
-          RVA < SectionHeaders[Section].VirtualAddress + SectionHeaders[Section].Misc.VirtualSize)
-        {
-          return SectionHeaders + Section;
-        }
-    }
-
-  return NULL;
-}
-
-static int
-IncludeRelocationsForSection(PIMAGE_SECTION_HEADER SectionHeader)
-{
-  static char *BlacklistedSections[] =
-    {
-      ".edata",
-      ".idata",
-      ".reloc"
-    };
-  char SectionName[IMAGE_SIZEOF_SHORT_NAME];
-  unsigned i;
-
-  if (0 != (SectionHeader->Characteristics & IMAGE_SCN_LNK_REMOVE))
-    {
-      return 0;
-    }
-
-  for (i = 0; i < sizeof(BlacklistedSections) / sizeof(BlacklistedSections[0]); i++)
-    {
-      strncpy(SectionName, BlacklistedSections[i], IMAGE_SIZEOF_SHORT_NAME);
-      if (0 == memcmp(SectionName, SectionHeader->Name, IMAGE_SIZEOF_SHORT_NAME))
-        {
-          return 0;
-        }
-    }
-
-  return 1;
-}
-
-static int
-ProcessRelocations(ULONG *ProcessedRelocsLength, void **ProcessedRelocs,
-                   void *RawData, PIMAGE_OPTIONAL_HEADER OptHeader,
-                   unsigned NumberOfSections, PIMAGE_SECTION_HEADER SectionHeaders)
-{
-  PIMAGE_SECTION_HEADER RelocSectionHeader, TargetSectionHeader;
-  PIMAGE_BASE_RELOCATION BaseReloc, End, AcceptedRelocs;
-  int Found;
-
-  if (OptHeader->NumberOfRvaAndSizes < IMAGE_DIRECTORY_ENTRY_BASERELOC
-      || 0 == OptHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress)
-    {
-      /* No relocation entries */
-      *ProcessedRelocsLength = 0;
-      *ProcessedRelocs = NULL;
-      return 0;
-    }
-
-  RelocSectionHeader = FindSectionForRVA(OptHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress,
-                                         NumberOfSections, SectionHeaders);
-  if (NULL == RelocSectionHeader)
-    {
-      fprintf(stderr, "Can't find section header for relocation data\n");
-      return 1;
-    }
-
-  *ProcessedRelocs = malloc(RelocSectionHeader->SizeOfRawData);
-  if (NULL == *ProcessedRelocs)
-    {
-      fprintf(stderr, "Failed to allocate %u bytes for relocations\n", (unsigned int)RelocSectionHeader->SizeOfRawData);
-      return 1;
-    }
-  *ProcessedRelocsLength = 0;
-
-  BaseReloc = (PIMAGE_BASE_RELOCATION) ((char *) RawData
-                                        + RelocSectionHeader->PointerToRawData
-                                        + (OptHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress -
-                                           RelocSectionHeader->VirtualAddress));
-  End = (PIMAGE_BASE_RELOCATION) ((char *) BaseReloc
-                                  + OptHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].Size);
-
-  while (BaseReloc < End && 0 < BaseReloc->SizeOfBlock)
-    {
-      TargetSectionHeader = FindSectionForRVA(BaseReloc->VirtualAddress, NumberOfSections,
-                                              SectionHeaders);
-      if (NULL != TargetSectionHeader && IncludeRelocationsForSection(TargetSectionHeader))
-        {
-          AcceptedRelocs = *ProcessedRelocs;
-          Found = 0;
-          while (AcceptedRelocs < (PIMAGE_BASE_RELOCATION) ((char *) *ProcessedRelocs +
-                                                            *ProcessedRelocsLength)
-                 && ! Found)
-            {
-              Found = BaseReloc->SizeOfBlock == AcceptedRelocs->SizeOfBlock
-                      && 0 == memcmp(BaseReloc, AcceptedRelocs, AcceptedRelocs->SizeOfBlock);
-              AcceptedRelocs= (PIMAGE_BASE_RELOCATION) ((char *) AcceptedRelocs +
-                                                        AcceptedRelocs->SizeOfBlock);
-            }
-          if (! Found)
-            {
-              memcpy((char *) *ProcessedRelocs + *ProcessedRelocsLength,
-                     BaseReloc, BaseReloc->SizeOfBlock);
-              *ProcessedRelocsLength += BaseReloc->SizeOfBlock;
-            }
-        }
-      BaseReloc = (PIMAGE_BASE_RELOCATION)((char *) BaseReloc + BaseReloc->SizeOfBlock);
-    }
-
-  return 0;
-}
-
-static int
-CreateOutputFile(FILE *OutFile, void *InData,
-                 PIMAGE_DOS_HEADER InDosHeader, PIMAGE_FILE_HEADER InFileHeader,
-                 PIMAGE_OPTIONAL_HEADER InOptHeader, PIMAGE_SECTION_HEADER InSectionHeaders,
-                 ULONG RosSymLength, void *RosSymSection)
-{
-  ULONG StartOfRawData;
-  unsigned Section;
-  void *OutHeader, *ProcessedRelocs, *PaddedRosSym, *Data;
-  PIMAGE_DOS_HEADER OutDosHeader;
-  PIMAGE_FILE_HEADER OutFileHeader;
-  PIMAGE_OPTIONAL_HEADER OutOptHeader;
-  PIMAGE_SECTION_HEADER OutSectionHeaders, CurrentSectionHeader;
-  DWORD CheckSum;
-  ULONG Length, i;
-  ULONG ProcessedRelocsLength;
-  ULONG RosSymOffset, RosSymFileLength;
-  int InRelocSectionIndex;
-  PIMAGE_SECTION_HEADER OutRelocSection;
-
-  StartOfRawData = 0;
-  for (Section = 0; Section < InFileHeader->NumberOfSections; Section++)
-    {
-      if ((0 == StartOfRawData
-           || InSectionHeaders[Section].PointerToRawData < StartOfRawData)
-          && 0 != InSectionHeaders[Section].PointerToRawData
-          && 0 == (InSectionHeaders[Section].Characteristics & IMAGE_SCN_LNK_REMOVE))
-        {
-          StartOfRawData = InSectionHeaders[Section].PointerToRawData;
-        }
-    }
-  OutHeader = malloc(StartOfRawData);
-  if (NULL == OutHeader)
-    {
-      fprintf(stderr, "Failed to allocate %u bytes for output file header\n", (unsigned int)StartOfRawData);
-      return 1;
-    }
-  memset(OutHeader, '\0', StartOfRawData);
-
-  OutDosHeader = (PIMAGE_DOS_HEADER) OutHeader;
-  memcpy(OutDosHeader, InDosHeader, InDosHeader->e_lfanew + sizeof(ULONG));
-
-  OutFileHeader = (PIMAGE_FILE_HEADER)((char *) OutHeader + OutDosHeader->e_lfanew + sizeof(ULONG));
-  memcpy(OutFileHeader, InFileHeader, sizeof(IMAGE_FILE_HEADER));
-  OutFileHeader->PointerToSymbolTable = 0;
-  OutFileHeader->NumberOfSymbols = 0;
-  OutFileHeader->Characteristics &= ~(IMAGE_FILE_LINE_NUMS_STRIPPED | IMAGE_FILE_LOCAL_SYMS_STRIPPED |
-                                      IMAGE_FILE_DEBUG_STRIPPED);
-
-  OutOptHeader = (PIMAGE_OPTIONAL_HEADER)(OutFileHeader + 1);
-  memcpy(OutOptHeader, InOptHeader, sizeof(IMAGE_OPTIONAL_HEADER));
-  OutOptHeader->CheckSum = 0;
-
-  OutSectionHeaders = (PIMAGE_SECTION_HEADER)((char *) OutOptHeader + OutFileHeader->SizeOfOptionalHeader);
-
-  if (ProcessRelocations(&ProcessedRelocsLength, &ProcessedRelocs, InData, InOptHeader,
-                         InFileHeader->NumberOfSections, InSectionHeaders))
-    {
-      return 1;
-    }
-  if (InOptHeader->NumberOfRvaAndSizes < IMAGE_DIRECTORY_ENTRY_BASERELOC
-      || 0 == InOptHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress)
-    {
-      InRelocSectionIndex = -1;
-    }
-  else
-    {
-      InRelocSectionIndex = FindSectionForRVA(InOptHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress,
-                                              InFileHeader->NumberOfSections, InSectionHeaders) - InSectionHeaders;
-    }
-
-  OutFileHeader->NumberOfSections = 0;
-  CurrentSectionHeader = OutSectionHeaders;
-  OutOptHeader->SizeOfImage = 0;
-  RosSymOffset = 0;
-  OutRelocSection = NULL;
-  for (Section = 0; Section < InFileHeader->NumberOfSections; Section++)
-    {
-      if (0 == (InSectionHeaders[Section].Characteristics & IMAGE_SCN_LNK_REMOVE))
-        {
-          *CurrentSectionHeader = InSectionHeaders[Section];
-          CurrentSectionHeader->PointerToLinenumbers = 0;
-          CurrentSectionHeader->NumberOfLinenumbers = 0;
-          if (OutOptHeader->SizeOfImage < CurrentSectionHeader->VirtualAddress +
-                                          CurrentSectionHeader->Misc.VirtualSize)
-            {
-              OutOptHeader->SizeOfImage = ROUND_UP(CurrentSectionHeader->VirtualAddress +
-                                                   CurrentSectionHeader->Misc.VirtualSize,
-                                                   OutOptHeader->SectionAlignment);
-            }
-          if (RosSymOffset < CurrentSectionHeader->PointerToRawData + CurrentSectionHeader->SizeOfRawData)
-            {
-              RosSymOffset = CurrentSectionHeader->PointerToRawData + CurrentSectionHeader->SizeOfRawData;
-            }
-          if (Section == (ULONG)InRelocSectionIndex)
-            {
-              OutRelocSection = CurrentSectionHeader;
-            }
-          (OutFileHeader->NumberOfSections) ++;
-          CurrentSectionHeader++;
-        }
-    }
-
-  if (OutRelocSection == CurrentSectionHeader - 1)
-    {
-      OutOptHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].Size = ProcessedRelocsLength;
-      if (OutOptHeader->SizeOfImage == OutRelocSection->VirtualAddress +
-                                       ROUND_UP(OutRelocSection->Misc.VirtualSize,
-                                                OutOptHeader->SectionAlignment))
-        {
-          OutOptHeader->SizeOfImage = OutRelocSection->VirtualAddress +
-                                      ROUND_UP(ProcessedRelocsLength,
-                                               OutOptHeader->SectionAlignment);
-        }
-      OutRelocSection->Misc.VirtualSize = ProcessedRelocsLength;
-      if (RosSymOffset == OutRelocSection->PointerToRawData
-                          + OutRelocSection->SizeOfRawData)
-        {
-          RosSymOffset = OutRelocSection->PointerToRawData +
-                         ROUND_UP(ProcessedRelocsLength, OutOptHeader->FileAlignment);
-        }
-      OutRelocSection->SizeOfRawData = ROUND_UP(ProcessedRelocsLength,
-                                                OutOptHeader->FileAlignment);
-    }
-
-  if (RosSymLength > 0)
-    {
-      RosSymFileLength = ROUND_UP(RosSymLength, OutOptHeader->FileAlignment);
-      memcpy(CurrentSectionHeader->Name, ".rossym", 8); /* We're lucky: string is exactly 8 bytes long */
-      CurrentSectionHeader->Misc.VirtualSize = RosSymLength;
-      CurrentSectionHeader->VirtualAddress = OutOptHeader->SizeOfImage;
-      CurrentSectionHeader->SizeOfRawData = RosSymFileLength;
-      CurrentSectionHeader->PointerToRawData = RosSymOffset;
-      CurrentSectionHeader->PointerToRelocations = 0;
-      CurrentSectionHeader->PointerToLinenumbers = 0;
-      CurrentSectionHeader->NumberOfRelocations = 0;
-      CurrentSectionHeader->NumberOfLinenumbers = 0;
-      CurrentSectionHeader->Characteristics = IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_DISCARDABLE
-                                              | IMAGE_SCN_LNK_REMOVE | IMAGE_SCN_TYPE_NOLOAD;
-      OutOptHeader->SizeOfImage = ROUND_UP(CurrentSectionHeader->VirtualAddress +
-                                           CurrentSectionHeader->Misc.VirtualSize,
-                                       OutOptHeader->SectionAlignment);
-      (OutFileHeader->NumberOfSections)++;
-
-      PaddedRosSym = malloc(RosSymFileLength);
-      if (NULL == PaddedRosSym)
-        {
-          fprintf(stderr, "Failed to allocate %u bytes for padded .rossym\n", (unsigned int)RosSymFileLength);
-          return 1;
-        }
-      memcpy(PaddedRosSym, RosSymSection, RosSymLength);
-      memset((char *) PaddedRosSym + RosSymLength, '\0', RosSymFileLength - RosSymLength);
-    }
-  else
-    {
-      PaddedRosSym = NULL;
-    }
-  CheckSum = 0;
-  for (i = 0; i < StartOfRawData / 2; i++)
-   {
-      CheckSum += ((unsigned short*) OutHeader)[i];
-      CheckSum = 0xffff & (CheckSum + (CheckSum >> 16));
-   }
-  Length = StartOfRawData;
-  for (Section = 0; Section < OutFileHeader->NumberOfSections; Section++)
-    {
-      DWORD SizeOfRawData;
-      if (OutRelocSection == OutSectionHeaders + Section)
-        {
-          Data = (void *) ProcessedRelocs;
-	  SizeOfRawData = ProcessedRelocsLength;
-        }
-      else if (RosSymLength > 0 && Section + 1 == OutFileHeader->NumberOfSections)
-        {
-          Data = (void *) PaddedRosSym;
-	  SizeOfRawData = OutSectionHeaders[Section].SizeOfRawData;
-        }
-      else
-        {
-          Data = (void *) ((char *) InData + OutSectionHeaders[Section].PointerToRawData);
-	  SizeOfRawData = OutSectionHeaders[Section].SizeOfRawData;
-        }
-      for (i = 0; i < SizeOfRawData / 2; i++)
-        {
-          CheckSum += ((unsigned short*) Data)[i];
-          CheckSum = 0xffff & (CheckSum + (CheckSum >> 16));
-        }
-      Length += OutSectionHeaders[Section].SizeOfRawData;
-    }
-  CheckSum += Length;
-  OutOptHeader->CheckSum = CheckSum;
-
-  if (fwrite(OutHeader, 1, StartOfRawData, OutFile) != StartOfRawData)
-    {
-      perror("Error writing output header\n");
-      free(OutHeader);
-      return 1;
-    }
-
-  for (Section = 0; Section < OutFileHeader->NumberOfSections; Section++)
-    {
-      if (0 != OutSectionHeaders[Section].SizeOfRawData)
-        {
-	  DWORD SizeOfRawData;
-          fseek(OutFile, OutSectionHeaders[Section].PointerToRawData, SEEK_SET);
-          if (OutRelocSection == OutSectionHeaders + Section)
-            {
-              Data = (void *) ProcessedRelocs;
-	      SizeOfRawData = ProcessedRelocsLength;
-            }
-          else if (RosSymLength > 0 && Section + 1 == OutFileHeader->NumberOfSections)
-            {
-              Data = (void *) PaddedRosSym;
-	      SizeOfRawData = OutSectionHeaders[Section].SizeOfRawData;
-            }
-          else
-            {
-              Data = (void *) ((char *) InData + OutSectionHeaders[Section].PointerToRawData);
-	      SizeOfRawData = OutSectionHeaders[Section].SizeOfRawData;
-            }
-          if (fwrite(Data, 1, SizeOfRawData, OutFile) != SizeOfRawData)
-            {
-              perror("Error writing section data\n");
-              free(PaddedRosSym);
-              free(OutHeader);
-              return 1;
-            }
-        }
-   }
-
-  if (PaddedRosSym)
-    {
-      free(PaddedRosSym);
-    }
-  free(OutHeader);
-
-  return 0;
-}
-
-int main(int argc, char* argv[])
-{
-  PSYMBOLFILE_HEADER SymbolFileHeader;
-  PIMAGE_DOS_HEADER PEDosHeader;
-  PIMAGE_FILE_HEADER PEFileHeader;
-  PIMAGE_OPTIONAL_HEADER PEOptHeader;
-  PIMAGE_SECTION_HEADER PESectionHeaders;
-  ULONG ImageBase;
-  void *StabBase;
-  ULONG StabsLength;
-  void *StabStringBase;
-  ULONG StabStringsLength;
-  void *CoffBase = NULL;
-  ULONG CoffsLength;
-  void *CoffStringBase = NULL;
-  ULONG CoffStringsLength;
-  char* path1;
-  char* path2;
-  FILE* out;
-  void *StringBase;
-  ULONG StringsLength;
-  ULONG StabSymbolsCount;
-  PROSSYM_ENTRY StabSymbols;
-  ULONG CoffSymbolsCount;
-  PROSSYM_ENTRY CoffSymbols;
-  ULONG MergedSymbolsCount;
-  PROSSYM_ENTRY MergedSymbols;
-  size_t FileSize;
-  void *FileData;
-  ULONG RosSymLength;
-  void *RosSymSection;
-  char elfhdr[4] = { '\177', 'E', 'L', 'F' };
-
-  if (3 != argc)
-    {
-      fprintf(stderr, "Usage: rsym <exefile> <symfile>\n");
-      exit(1);
-    }
-
-  path1 = convert_path(argv[1]);
-  path2 = convert_path(argv[2]);
-
-  FileData = load_file ( path1, &FileSize );
-  if ( !FileData )
-  {
-    fprintf ( stderr, "An error occured loading '%s'\n", path1 );
-    exit(1);
-  }
-
-  /* Check if MZ header exists  */
-  PEDosHeader = (PIMAGE_DOS_HEADER) FileData;
-  if (PEDosHeader->e_magic != IMAGE_DOS_MAGIC || PEDosHeader->e_lfanew == 0L)
-    {
-      /* Ignore elf */
-      if (!memcmp(PEDosHeader, elfhdr, sizeof(elfhdr)))
-	exit(0);
-      perror("Input file is not a PE image.\n");
-      free(FileData);
-      exit(1);
-    }
-
-  /* Locate PE file header  */
-  /* sizeof(ULONG) = sizeof(MAGIC) */
-  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;
-
-  /* Locate PE section headers  */
-  PESectionHeaders = (PIMAGE_SECTION_HEADER)((char *) PEOptHeader + PEFileHeader->SizeOfOptionalHeader);
-
-  if (GetStabInfo(FileData, PEFileHeader, PESectionHeaders, &StabsLength, &StabBase,
-                  &StabStringsLength, &StabStringBase))
-    {
-      free(FileData);
-      exit(1);
-    }
-
-  if (GetCoffInfo(FileData, PEFileHeader, PESectionHeaders, &CoffsLength, &CoffBase,
-                  &CoffStringsLength, &CoffStringBase))
-    {
-      free(FileData);
-      exit(1);
-    }
-
-  StringBase = malloc(1 + StabStringsLength + CoffStringsLength +
-                      (CoffsLength / sizeof(ROSSYM_ENTRY)) * (E_SYMNMLEN + 1));
-  if (NULL == StringBase)
-    {
-      free(FileData);
-      fprintf(stderr, "Failed to allocate memory for strings table\n");
-      exit(1);
-    }
-  /* Make offset 0 into an empty string */
-  *((char *) StringBase) = '\0';
-  StringsLength = 1;
-
-  if (ConvertStabs(&StabSymbolsCount, &StabSymbols, &StringsLength, StringBase,
-                   StabsLength, StabBase, StabStringsLength, StabStringBase,
-                   ImageBase, PEFileHeader, PESectionHeaders))
-    {
-      free(StringBase);
-      free(FileData);
-      fprintf(stderr, "Failed to allocate memory for strings table\n");
-      exit(1);
-    }
-
-  if (ConvertCoffs(&CoffSymbolsCount, &CoffSymbols, &StringsLength, StringBase,
-                   CoffsLength, CoffBase, CoffStringsLength, CoffStringBase,
-                   ImageBase, PEFileHeader, PESectionHeaders))
-    {
-      if (StabSymbols)
-        {
-          free(StabSymbols);
-        }
-      free(StringBase);
-      free(FileData);
-      exit(1);
-    }
-
-  if (MergeStabsAndCoffs(&MergedSymbolsCount, &MergedSymbols,
-                         StabSymbolsCount, StabSymbols,
-                         CoffSymbolsCount, CoffSymbols))
-    {
-      if (CoffSymbols)
-        {
-         free(CoffSymbols);
-        }
-      if (StabSymbols)
-        {
-          free(StabSymbols);
-        }
-      free(StringBase);
-      free(FileData);
-      exit(1);
-    }
-
-  if (CoffSymbols)
-    {
-      free(CoffSymbols);
-    }
-  if (StabSymbols)
-    {
-      free(StabSymbols);
-    }
-  if (MergedSymbolsCount == 0)
-    {
-      RosSymLength = 0;
-      RosSymSection = NULL;
-    }
-  else
-    {
-      RosSymLength = sizeof(SYMBOLFILE_HEADER) + MergedSymbolsCount * sizeof(ROSSYM_ENTRY)
-                            + StringsLength;
-      RosSymSection = malloc(RosSymLength);
-      if (NULL == RosSymSection)
-        {
-          free(MergedSymbols);
-          free(StringBase);
-          free(FileData);
-          fprintf(stderr, "Unable to allocate memory for .rossym section\n");
-          exit(1);
-        }
-      memset(RosSymSection, '\0', RosSymLength);
-
-      SymbolFileHeader = (PSYMBOLFILE_HEADER) RosSymSection;
-      SymbolFileHeader->SymbolsOffset = sizeof(SYMBOLFILE_HEADER);
-      SymbolFileHeader->SymbolsLength = MergedSymbolsCount * sizeof(ROSSYM_ENTRY);
-      SymbolFileHeader->StringsOffset = SymbolFileHeader->SymbolsOffset + SymbolFileHeader->SymbolsLength;
-      SymbolFileHeader->StringsLength = StringsLength;
-
-      memcpy((char *) RosSymSection + SymbolFileHeader->SymbolsOffset, MergedSymbols,
-             SymbolFileHeader->SymbolsLength);
-      memcpy((char *) RosSymSection + SymbolFileHeader->StringsOffset, StringBase,
-             SymbolFileHeader->StringsLength);
-
-      free(MergedSymbols);
-    }
-  free(StringBase);
-  out = fopen(path2, "wb");
-  if (out == NULL)
-    {
-      perror("Cannot open output file");
-      free(RosSymSection);
-      free(FileData);
-      exit(1);
-    }
-
-  if (CreateOutputFile(out, FileData, PEDosHeader, PEFileHeader, PEOptHeader,
-                       PESectionHeaders, RosSymLength, RosSymSection))
-    {
-      fclose(out);
-      if (RosSymSection)
-        {
-          free(RosSymSection);
-        }
-      free(FileData);
-      exit(1);
-    }
-
-  fclose(out);
-  if (RosSymSection)
-    {
-      free(RosSymSection);
-    }
-  free(FileData);
-
-  return 0;
-}
-
-/* EOF */

Removed: trunk/reactos/tools/rsym.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rsym.h?rev=40756&view=auto
==============================================================================
--- trunk/reactos/tools/rsym.h [iso-8859-1] (original)
+++ trunk/reactos/tools/rsym.h (removed)
@@ -1,354 +1,0 @@
-/* rsym.h */
-
-#ifndef RSYM_H
-#define RSYM_H
-
-#define IMAGE_DOS_MAGIC 0x5a4d
-#define IMAGE_PE_MAGIC  0x00004550
-#define IMAGE_SIZEOF_SHORT_NAME 8
-#define IMAGE_NT_OPTIONAL_HDR32_MAGIC   0x10b
-#define IMAGE_NT_OPTIONAL_HDR64_MAGIC   0x20b
-
-#define IMAGE_FILE_LINE_NUMS_STRIPPED   0x0004
-#define IMAGE_FILE_LOCAL_SYMS_STRIPPED  0x0008
-#define IMAGE_FILE_DEBUG_STRIPPED       0x0200
-
-#define IMAGE_DIRECTORY_ENTRY_BASERELOC 5
-
-#define IMAGE_SCN_TYPE_NOLOAD       0x00000002
-#define IMAGE_SCN_LNK_REMOVE        0x00000800
-#define IMAGE_SCN_MEM_READ          0x40000000
-#define IMAGE_SCN_MEM_DISCARDABLE   0x02000000
-
-#define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16
-
-typedef unsigned char BYTE;
-typedef unsigned char UCHAR;
-typedef unsigned short WORD;
-typedef unsigned short USHORT;
-typedef unsigned long long ULONGLONG;
-#if defined(__x86_64__) && defined(unix)
-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(unix)
-typedef unsigned int ULONG_PTR;
-#else
-typedef unsigned long ULONG_PTR;
-#endif
-#endif
-
-#pragma pack(push,2)
-typedef struct _IMAGE_DOS_HEADER {
-    WORD e_magic;
-    WORD e_cblp;
-    WORD e_cp;
-    WORD e_crlc;
-    WORD e_cparhdr;
-    WORD e_minalloc;
-    WORD e_maxalloc;
-    WORD e_ss;
-    WORD e_sp;
-    WORD e_csum;
-    WORD e_ip;
-    WORD e_cs;
-    WORD e_lfarlc;
-    WORD e_ovno;
-    WORD e_res[4];
-    WORD e_oemid;
-    WORD e_oeminfo;
-    WORD e_res2[10];
-    LONG e_lfanew;
-} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;
-#pragma pack(pop)
-
-#pragma pack(push,4)
-typedef struct _IMAGE_FILE_HEADER {
-    WORD Machine;
-    WORD NumberOfSections;
-    DWORD TimeDateStamp;
-    DWORD PointerToSymbolTable;
-    DWORD NumberOfSymbols;
-    WORD SizeOfOptionalHeader;
-    WORD Characteristics;
-} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
-#pragma pack(pop)
-
-typedef struct _IMAGE_DATA_DIRECTORY {
-    DWORD VirtualAddress;
-    DWORD Size;
-} IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;
-
-typedef struct _IMAGE_OPTIONAL_HEADER32 {
-    WORD Magic;
-    BYTE MajorLinkerVersion;
-    BYTE MinorLinkerVersion;
-    DWORD SizeOfCode;
-    DWORD SizeOfInitializedData;
-    DWORD SizeOfUninitializedData;
-    DWORD AddressOfEntryPoint;
-    DWORD BaseOfCode;
-    DWORD BaseOfData;
-    DWORD ImageBase;
-    DWORD SectionAlignment;
-    DWORD FileAlignment;
-    WORD MajorOperatingSystemVersion;
-    WORD MinorOperatingSystemVersion;
-    WORD MajorImageVersion;
-    WORD MinorImageVersion;
-    WORD MajorSubsystemVersion;
-    WORD MinorSubsystemVersion;
-    DWORD Win32VersionValue;
-    DWORD SizeOfImage;
-    DWORD SizeOfHeaders;
-    DWORD CheckSum;
-    WORD Subsystem;
-    WORD DllCharacteristics;
-    DWORD SizeOfStackReserve;
-    DWORD SizeOfStackCommit;
-    DWORD SizeOfHeapReserve;
-    DWORD SizeOfHeapCommit;
-    DWORD LoaderFlags;
-    DWORD NumberOfRvaAndSizes;
-    IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
-} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;
-
-typedef struct _IMAGE_OPTIONAL_HEADER64 {
-    WORD Magic;
-    BYTE MajorLinkerVersion;
-    BYTE MinorLinkerVersion;
-    DWORD SizeOfCode;
-    DWORD SizeOfInitializedData;
-    DWORD SizeOfUninitializedData;
-    DWORD AddressOfEntryPoint;
-    DWORD BaseOfCode;
-    ULONGLONG ImageBase;
-    DWORD SectionAlignment;
-    DWORD FileAlignment;
-    WORD MajorOperatingSystemVersion;
-    WORD MinorOperatingSystemVersion;
-    WORD MajorImageVersion;
-    WORD MinorImageVersion;
-    WORD MajorSubsystemVersion;
-    WORD MinorSubsystemVersion;
-    DWORD Win32VersionValue;
-    DWORD SizeOfImage;
-    DWORD SizeOfHeaders;
-    DWORD CheckSum;
-    WORD Subsystem;
-    WORD DllCharacteristics;
-    ULONGLONG SizeOfStackReserve;
-    ULONGLONG SizeOfStackCommit;
-    ULONGLONG SizeOfHeapReserve;
-    ULONGLONG SizeOfHeapCommit;
-    DWORD LoaderFlags;
-    DWORD NumberOfRvaAndSizes;
-    IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
-} IMAGE_OPTIONAL_HEADER64, *PIMAGE_OPTIONAL_HEADER64;
-
-#ifdef _TARGET_PE64
-typedef IMAGE_OPTIONAL_HEADER64 IMAGE_OPTIONAL_HEADER;
-typedef PIMAGE_OPTIONAL_HEADER64 PIMAGE_OPTIONAL_HEADER;
-#else
-typedef IMAGE_OPTIONAL_HEADER32 IMAGE_OPTIONAL_HEADER;
-typedef PIMAGE_OPTIONAL_HEADER32 PIMAGE_OPTIONAL_HEADER;
-#endif
-
-typedef struct _IMAGE_SECTION_HEADER {
-    BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
-    union {
-        DWORD PhysicalAddress;
-        DWORD VirtualSize;
-    } Misc;
-    DWORD VirtualAddress;
-    DWORD SizeOfRawData;
-    DWORD PointerToRawData;
-    DWORD PointerToRelocations;
-    DWORD PointerToLinenumbers;
-    WORD NumberOfRelocations;
-    WORD NumberOfLinenumbers;
-    DWORD Characteristics;
-} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
-
-#pragma pack(push,4)
-typedef struct _IMAGE_BASE_RELOCATION {
-    DWORD VirtualAddress;
-    DWORD SizeOfBlock;
-    WORD TypeOffset[1];
-} IMAGE_BASE_RELOCATION, *PIMAGE_BASE_RELOCATION;
-#pragma pack(pop)
-
-typedef struct {
-    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                     */
-    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(4)
-
-typedef struct _SYMBOLFILE_HEADER {
-    ULONG SymbolsOffset;
-    ULONG SymbolsLength;
-    ULONG StringsOffset;
-    ULONG StringsLength;
-} SYMBOLFILE_HEADER, *PSYMBOLFILE_HEADER;
-
-typedef struct _STAB_ENTRY {
-    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;
-
-/* http://www.math.utah.edu/docs/info/stabs_12.html */
-
-#define N_GYSM      0x20
-#define N_FNAME     0x22
-#define N_FUN       0x24
-#define N_STSYM     0x26
-#define N_LCSYM     0x28
-#define N_MAIN      0x2A
-#define N_PC        0x30
-#define N_NSYMS     0x32
-#define N_NOMAP     0x34
-#define N_RSYM      0x40
-#define N_M2C       0x42
-#define N_SLINE     0x44
-#define N_DSLINE    0x46
-#define N_BSLINE    0x48
-#define N_BROWS     0x48
-#define N_DEFD      0x4A
-#define N_EHDECL    0x50
-#define N_MOD2      0x50
-#define N_CATCH     0x54
-#define N_SSYM      0x60
-#define N_SO        0x64
-#define N_LSYM      0x80
-#define N_BINCL     0x82
-#define N_SOL       0x84
-#define N_PSYM      0xA0
-#define N_EINCL     0xA2
-#define N_ENTRY     0xA4
-#define N_LBRAC     0xC0
-#define N_EXCL      0xC2
-#define N_SCOPE     0xC4
-#define N_RBRAC     0xE0
-#define N_BCOMM     0xE2
-#define N_ECOMM     0xE4
-#define N_ECOML     0xE8
-#define N_LENG      0xFE
-
-/* COFF symbol table */
-
-#define E_SYMNMLEN  8           /* # characters in a symbol name         */
-#define E_FILNMLEN  14          /* # characters in a file name           */
-#define E_DIMNUM    4           /* # array dimensions in auxiliary entry */
-
-#define N_BTMASK    (0xf)
-#define N_TMASK     (0x30)
-#define N_BTSHFT    (4)
-#define N_TSHIFT    (2)
-
-/* derived types, in e_type */
-
-#define DT_NON      (0)         /* no derived type */
-#define DT_PTR      (1)         /* pointer         */
-#define DT_FCN      (2)         /* function        */
-#define DT_ARY      (3)         /* array           */
-
-#define BTYPE(x)    ((x) & N_BTMASK)
-
-#define ISPTR(x)    (((x) & N_TMASK) == (DT_PTR << N_BTSHFT))
-#define ISFCN(x)    (((x) & N_TMASK) == (DT_FCN << N_BTSHFT))
-#define ISARY(x)    (((x) & N_TMASK) == (DT_ARY << N_BTSHFT))
-#define ISTAG(x)    ((x) == C_STRTAG || (x) == C_UNTAG || (x) == C_ENTAG)
-#define DECREF(x)   ((((x) >> N_TSHIFT) & ~N_BTMASK) | ((x) & N_BTMASK))
-
-#define C_EFCN      0xff        /* physical end of function                */
-#define C_NULL      0
-#define C_AUTO      1           /* automatic variable                      */
-#define C_EXT       2           /* external symbol                         */
-#define C_STAT      3           /* static                                  */
-#define C_REG       4           /* register variable                       */
-#define C_EXTDEF    5           /* external definition                     */
-#define C_LABEL     6           /* label                                   */
-#define C_ULABEL    7           /* undefined label                         */
-#define C_MOS       8           /* member of structure                     */
-#define C_ARG       9           /* function argument                       */
-#define C_STRTAG    10          /* structure tag                           */
-#define C_MOU       11          /* member of union                         */
-#define C_UNTAG     12          /* union tag                               */
-#define C_TPDEF     13          /* type definition                         */
-#define C_USTATIC   14          /* undefined static                        */
-#define C_ENTAG     15          /* enumeration tag                         */
-#define C_MOE       16          /* member of enumeration                   */
-#define C_REGPARM   17          /* register parameter                      */
-#define C_FIELD     18          /* bit field                               */
-#define C_AUTOARG   19          /* auto argument                           */
-#define C_LASTENT   20          /* dummy entry (end of block)              */
-#define C_BLOCK     100         /* ".bb" or ".eb"                          */
-#define C_FCN       101         /* ".bf" or ".ef"                          */
-#define C_EOS       102         /* end of structure                        */
-#define C_FILE      103         /* file name                               */
-#define C_LINE      104         /* line# reformatted as symbol table entry */
-#define C_ALIAS     105         /* duplicate tag                           */
-#define C_HIDDEN    106         /* ext symbol in dmert public lib          */
-
-#pragma pack(1)
-typedef struct _COFF_SYMENT {
-    union {
-        char e_name[E_SYMNMLEN];
-        struct {
-            ULONG e_zeroes;
-            ULONG e_offset;
-        } e;
-    } e;
-    ULONG e_value;
-    short e_scnum;
-    USHORT e_type;
-    UCHAR e_sclass;
-    UCHAR e_numaux;
-} COFF_SYMENT, *PCOFF_SYMENT;
-#pragma pack(4)
-
-typedef struct _ROSSYM_ENTRY {
-    ULONG_PTR Address;
-    ULONG FunctionOffset;
-    ULONG FileOffset;
-    ULONG SourceLine;
-} ROSSYM_ENTRY, *PROSSYM_ENTRY;
-
-#define ROUND_UP(N, S) (((N) + (S) - 1) & ~((S) - 1))
-
-extern char *
-convert_path(const char *origpath);
-
-extern void *
-load_file(const char *file_name, size_t *file_size);
-
-#endif  /* RSYM_H */

Removed: trunk/reactos/tools/rsym.mak
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rsym.mak?rev=40756&view=auto
==============================================================================
--- trunk/reactos/tools/rsym.mak [iso-8859-1] (original)
+++ trunk/reactos/tools/rsym.mak (removed)
@@ -1,45 +1,0 @@
-RSYM_BASE = $(TOOLS_BASE)
-RSYM_BASE_ = $(RSYM_BASE)$(SEP)
-
-RSYM_INT = $(INTERMEDIATE_)$(RSYM_BASE)
-RSYM_INT_ = $(RSYM_INT)$(SEP)
-RSYM_OUT = $(OUTPUT_)$(RSYM_BASE)
-RSYM_OUT_ = $(RSYM_OUT)$(SEP)
-
-RSYM_TARGET = \
-	$(RSYM_OUT_)rsym$(EXEPOSTFIX)
-
-RSYM_SOURCES = \
-	$(RSYM_BASE_)rsym.c \
-	$(RSYM_BASE_)rsym_common.c
-
-RSYM_OBJECTS = \
-	$(addprefix $(INTERMEDIATE_), $(RSYM_SOURCES:.c=.o))
-
-ifeq ($(ARCH),amd64)
-RSYM_HOST_CFLAGS = $(TOOLS_CFLAGS) -D_TARGET_PE64
-else
-RSYM_HOST_CFLAGS = $(TOOLS_CFLAGS)
-endif
-
-RSYM_HOST_LFLAGS = $(TOOLS_LFLAGS)
-
-.PHONY: rsym
-rsym: $(RSYM_TARGET)
-
-$(RSYM_TARGET): $(RSYM_OBJECTS) | $(RSYM_OUT)
-	$(ECHO_HOSTLD)
-	${host_gcc} $(RSYM_OBJECTS) $(RSYM_HOST_LFLAGS) -o $@
-
-$(RSYM_INT_)rsym.o: $(RSYM_BASE_)rsym.c | $(RSYM_INT)
-	$(ECHO_HOSTCC)
-	${host_gcc} $(RSYM_HOST_CFLAGS) -c $< -o $@
-
-$(RSYM_INT_)rsym_common.o: $(RSYM_BASE_)rsym_common.c | $(RSYM_INT)
-	$(ECHO_HOSTCC)
-	${host_gcc} $(RSYM_HOST_CFLAGS) -c $< -o $@
-
-.PHONY: rsym_clean
-rsym_clean:
-	-@$(rm) $(RSYM_TARGET) $(RSYM_OBJECTS) 2>$(NUL)
-clean: rsym_clean

Modified: trunk/reactos/tools/rsym/rsym.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rsym/rsym.c?rev=40757&r1=37282&r2=40757&view=diff
==============================================================================
--- trunk/reactos/tools/rsym/rsym.c [iso-8859-1] (original)
+++ trunk/reactos/tools/rsym/rsym.c [iso-8859-1] Fri May  1 03:26:02 2009
@@ -489,7 +489,7 @@
   *ProcessedRelocs = malloc(RelocSectionHeader->SizeOfRawData);
   if (NULL == *ProcessedRelocs)
     {
-      fprintf(stderr, "Failed to allocate %lu bytes for relocations\n", RelocSectionHeader->SizeOfRawData);
+      fprintf(stderr, "Failed to allocate %u bytes for relocations\n", (unsigned int)RelocSectionHeader->SizeOfRawData);
       return 1;
     }
   *ProcessedRelocsLength = 0;
@@ -565,7 +565,7 @@
   OutHeader = malloc(StartOfRawData);
   if (NULL == OutHeader)
     {
-      fprintf(stderr, "Failed to allocate %lu bytes for output file header\n", StartOfRawData);
+      fprintf(stderr, "Failed to allocate %u bytes for output file header\n", (unsigned int)StartOfRawData);
       return 1;
     }
   memset(OutHeader, '\0', StartOfRawData);
@@ -678,7 +678,7 @@
       PaddedRosSym = malloc(RosSymFileLength);
       if (NULL == PaddedRosSym)
         {
-          fprintf(stderr, "Failed to allocate %lu bytes for padded .rossym\n", RosSymFileLength);
+          fprintf(stderr, "Failed to allocate %u bytes for padded .rossym\n", (unsigned int)RosSymFileLength);
           return 1;
         }
       memcpy(PaddedRosSym, RosSymSection, RosSymLength);
@@ -697,19 +697,23 @@
   Length = StartOfRawData;
   for (Section = 0; Section < OutFileHeader->NumberOfSections; Section++)
     {
+      DWORD SizeOfRawData;
       if (OutRelocSection == OutSectionHeaders + Section)
         {
           Data = (void *) ProcessedRelocs;
+	  SizeOfRawData = ProcessedRelocsLength;
         }
       else if (RosSymLength > 0 && Section + 1 == OutFileHeader->NumberOfSections)
         {
           Data = (void *) PaddedRosSym;
+	  SizeOfRawData = OutSectionHeaders[Section].SizeOfRawData;
         }
       else
         {
           Data = (void *) ((char *) InData + OutSectionHeaders[Section].PointerToRawData);
-        }
-      for (i = 0; i < OutSectionHeaders[Section].SizeOfRawData / 2; i++)
+	  SizeOfRawData = OutSectionHeaders[Section].SizeOfRawData;
+        }
+      for (i = 0; i < SizeOfRawData / 2; i++)
         {
           CheckSum += ((unsigned short*) Data)[i];
           CheckSum = 0xffff & (CheckSum + (CheckSum >> 16));
@@ -730,21 +734,24 @@
     {
       if (0 != OutSectionHeaders[Section].SizeOfRawData)
         {
+	  DWORD SizeOfRawData;
           fseek(OutFile, OutSectionHeaders[Section].PointerToRawData, SEEK_SET);
           if (OutRelocSection == OutSectionHeaders + Section)
             {
               Data = (void *) ProcessedRelocs;
+	      SizeOfRawData = ProcessedRelocsLength;
             }
           else if (RosSymLength > 0 && Section + 1 == OutFileHeader->NumberOfSections)
             {
               Data = (void *) PaddedRosSym;
+	      SizeOfRawData = OutSectionHeaders[Section].SizeOfRawData;
             }
           else
             {
               Data = (void *) ((char *) InData + OutSectionHeaders[Section].PointerToRawData);
-            }
-          if (fwrite(Data, 1, OutSectionHeaders[Section].SizeOfRawData, OutFile) !=
-              OutSectionHeaders[Section].SizeOfRawData)
+	      SizeOfRawData = OutSectionHeaders[Section].SizeOfRawData;
+            }
+          if (fwrite(Data, 1, SizeOfRawData, OutFile) != SizeOfRawData)
             {
               perror("Error writing section data\n");
               free(PaddedRosSym);

Removed: trunk/reactos/tools/rsym_common.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rsym_common.c?rev=40756&view=auto
==============================================================================
--- trunk/reactos/tools/rsym_common.c [iso-8859-1] (original)
+++ trunk/reactos/tools/rsym_common.c (removed)
@@ -1,62 +1,0 @@
-/* rsym_common.c */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include "rsym.h"
-
-char*
-convert_path ( const char* origpath )
-{
-	char* newpath;
-	int i;
-
-	newpath = strdup(origpath);
-
-	i = 0;
-	while (newpath[i] != 0)
-	{
-#ifdef UNIX_PATHS
-		if (newpath[i] == '\\')
-		{
-			newpath[i] = '/';
-		}
-#else
-#ifdef DOS_PATHS
-		if (newpath[i] == '/')
-		{
-			newpath[i] = '\\';
-		}
-#endif
-#endif
-		i++;
-	}
-	return(newpath);
-}
-
-void*
-load_file ( const char* file_name, size_t* file_size )
-{
-	FILE* f;
-	void* FileData = NULL;
-
-	f = fopen ( file_name, "rb" );
-	if (f != NULL)
-	{
-		fseek(f, 0L, SEEK_END);
-		*file_size = ftell(f);
-		fseek(f, 0L, SEEK_SET);
-		FileData = malloc(*file_size);
-		if (FileData != NULL)
-		{
-			if ( *file_size != fread(FileData, 1, *file_size, f) )
-			{
-				free(FileData);
-				FileData = NULL;
-			}
-		}
-		fclose(f);
-	}
-	return FileData;
-}

Modified: trunk/reactos/tools/tools.mak
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/tools/tools.mak?rev=40757&r1=40756&r2=40757&view=diff
==============================================================================
--- trunk/reactos/tools/tools.mak [iso-8859-1] (original)
+++ trunk/reactos/tools/tools.mak [iso-8859-1] Fri May  1 03:26:02 2009
@@ -51,4 +51,4 @@
 include tools/pefixup.mak
 include tools/raddr2line.mak
 include tools/rbuild/rbuild.mak
-include tools/rsym.mak
+include tools/rsym/rsym.mak



More information about the Ros-diffs mailing list