mirror of
https://github.com/reactos/reactos.git
synced 2025-04-26 08:30:21 +00:00
modified tools/rbuild/backend/mingw/modulehandler.cpp
DWARF debugging information confuses rsym, and DWARF-2 information from internal libraries (like libgcc) results in huge executables that don't even run on Windows. Therefore, before the rsym phase, strip all DWARF-2 sections This is a HACK for gcc builds compiled with DWARF-2 symbols (e.g. 4.3.2-tdm-1). The real solution (to be implemented soon) is to parse DWARF-2 line numbers in rsym Amendment to r37851: use objcopy instead of strip because strip gets us more than we bargained for, and strips all debug information too modified tools/rsym.c Don't overrun a heap block when there are discarded relocations svn path=/trunk/; revision=37861
This commit is contained in:
parent
599818849a
commit
31b83f59b6
2 changed files with 13 additions and 3 deletions
|
@ -1428,6 +1428,9 @@ MingwModuleHandler::GenerateRunRsymCode () const
|
|||
"ifneq ($(ROS_GENERATE_RSYM),no)\n" );
|
||||
fprintf ( fMakefile,
|
||||
"\t$(ECHO_RSYM)\n" );
|
||||
// FIXME! workaround until rsym can extract line numbers from DWARF
|
||||
fprintf ( fMakefile,
|
||||
"\t$(Q)${objcopy} -R .debug_abbrev -R .debug_aranges -R .debug_frame -R .debug_info -R .debug_line -R .debug_pubnames -R .debug_macinfo -R .debug_str -R .debug_loc -R .debug_pubtypes -R .debug_ranges -R .debug_static_func -R .debug_static_vars -R .debug_types -R .debug_weaknames $@\n\n" );
|
||||
fprintf ( fMakefile,
|
||||
"\t$(Q)$(RSYM_TARGET) $@ $@\n\n" );
|
||||
fprintf ( fMakefile,
|
||||
|
|
|
@ -697,19 +697,23 @@ CreateOutputFile(FILE *OutFile, void *InData,
|
|||
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 < OutSectionHeaders[Section].SizeOfRawData / 2; i++)
|
||||
for (i = 0; i < SizeOfRawData / 2; i++)
|
||||
{
|
||||
CheckSum += ((unsigned short*) Data)[i];
|
||||
CheckSum = 0xffff & (CheckSum + (CheckSum >> 16));
|
||||
|
@ -730,21 +734,24 @@ CreateOutputFile(FILE *OutFile, void *InData,
|
|||
{
|
||||
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, OutSectionHeaders[Section].SizeOfRawData, OutFile) !=
|
||||
OutSectionHeaders[Section].SizeOfRawData)
|
||||
if (fwrite(Data, 1, SizeOfRawData, OutFile) != SizeOfRawData)
|
||||
{
|
||||
perror("Error writing section data\n");
|
||||
free(PaddedRosSym);
|
||||
|
|
Loading…
Reference in a new issue