[llvm] r306853 - Fix bug in symbol generation for resource COFF

Eric Beckmann via llvm-commits llvm-commits at lists.llvm.org
Fri Jun 30 11:16:35 PDT 2017


Author: ecbeckmann
Date: Fri Jun 30 11:16:35 2017
New Revision: 306853

URL: http://llvm.org/viewvc/llvm-project?rev=306853&view=rev
Log:
Fix bug in symbol generation for resource COFF

Symbols in the resource COFF file should be for .rsrc$02, where the
actual resource data is, not .rsrc$01, which contains the directory
tree.

Differential Revision: https://reviews.llvm.org/D34832

Patch by Joe Ranieri.

Added:
    llvm/trunk/test/tools/llvm-cvtres/symbols.test
Modified:
    llvm/trunk/lib/Object/WindowsResource.cpp

Modified: llvm/trunk/lib/Object/WindowsResource.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/WindowsResource.cpp?rev=306853&r1=306852&r2=306853&view=diff
==============================================================================
--- llvm/trunk/lib/Object/WindowsResource.cpp (original)
+++ llvm/trunk/lib/Object/WindowsResource.cpp Fri Jun 30 11:16:35 2017
@@ -572,7 +572,7 @@ void WindowsResourceCOFFWriter::writeSym
     Symbol = reinterpret_cast<coff_symbol16 *>(BufferStart + CurrentOffset);
     strncpy(Symbol->Name.ShortName, RelocationName, (size_t)COFF::NameSize);
     Symbol->Value = DataOffsets[i];
-    Symbol->SectionNumber = 1;
+    Symbol->SectionNumber = 2;
     Symbol->Type = COFF::IMAGE_SYM_DTYPE_NULL;
     Symbol->StorageClass = COFF::IMAGE_SYM_CLASS_STATIC;
     Symbol->NumberOfAuxSymbols = 0;

Added: llvm/trunk/test/tools/llvm-cvtres/symbols.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-cvtres/symbols.test?rev=306853&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-cvtres/symbols.test (added)
+++ llvm/trunk/test/tools/llvm-cvtres/symbols.test Fri Jun 30 11:16:35 2017
@@ -0,0 +1,33 @@
+// Check COFF emission of cvtres
+// The input was generated with the following command, using the original Windows
+// rc.exe:
+// > rc /fo test_resource.res /nologo test_resource.rc
+// The object file we are comparing against was generated with this command using
+// the original Windows cvtres.exe.
+// > cvtres /machine:X86 /readonly /nologo /out:test_resource.obj.coff \
+//   test_resource.res
+
+RUN: llvm-cvtres /verbose /out:%t %p/Inputs/test_resource.res
+RUN: llvm-readobj -symbols %t | FileCheck %s
+
+CHECK:        Name: $R000000
+CHECK-NEXT:    Value: 0
+CHECK-NEXT:    Section: .rsrc$02
+CHECK:        Name: $R000018
+CHECK-NEXT:    Value: 24
+CHECK-NEXT:    Section: .rsrc$02
+CHECK:        Name: $R000340
+CHECK-NEXT:    Value: 832
+CHECK-NEXT:    Section: .rsrc$02
+CHECK:        Name: $R000668
+CHECK-NEXT:    Value: 1640
+CHECK-NEXT:    Section: .rsrc$02
+CHECK:        Name: $R000698
+CHECK-NEXT:    Value: 1688
+CHECK-NEXT:    Section: .rsrc$02
+CHECK:        Name: $R000720
+CHECK-NEXT:    Value: 1824
+CHECK-NEXT:    Section: .rsrc$02
+CHECK:        Name: $R000750
+CHECK-NEXT:    Value: 1872
+CHECK-NEXT:    Section: .rsrc$02




More information about the llvm-commits mailing list