[llvm] r207763 - Compute the correct section for zed = foo + 1 in COFF.
Rafael Espindola
rafael.espindola at gmail.com
Thu May 1 06:37:57 PDT 2014
Author: rafael
Date: Thu May 1 08:37:57 2014
New Revision: 207763
URL: http://llvm.org/viewvc/llvm-project?rev=207763&view=rev
Log:
Compute the correct section for zed = foo + 1 in COFF.
This fixes pr19147.
There are a few more related issues to fix, but the testcase in the bug now
passes.
Modified:
llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp
llvm/trunk/test/MC/COFF/offset.s
Modified: llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp?rev=207763&r1=207762&r2=207763&view=diff
==============================================================================
--- llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp (original)
+++ llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp Thu May 1 08:37:57 2014
@@ -441,6 +441,7 @@ void WinCOFFObjectWriter::DefineSymbol(M
} else {
const MCSymbolData &ResSymData =
Assembler.getSymbolData(Symbol.AliasedSymbol());
+ const MCSymbol *Base = Layout.getBaseSymbol(Symbol);
coff_symbol->Data.Value = getSymbolValue(ResSymData, Layout);
coff_symbol->Data.Type = (ResSymData.getFlags() & 0x0000FFFF) >> 0;
@@ -454,11 +455,14 @@ void WinCOFFObjectWriter::DefineSymbol(M
external ? COFF::IMAGE_SYM_CLASS_EXTERNAL : COFF::IMAGE_SYM_CLASS_STATIC;
}
- if (Symbol.isAbsolute() || Symbol.AliasedSymbol().isVariable())
+ if (!Base) {
coff_symbol->Data.SectionNumber = COFF::IMAGE_SYM_ABSOLUTE;
- else if (ResSymData.Fragment)
- coff_symbol->Section =
- SectionMap[&ResSymData.Fragment->getParent()->getSection()];
+ } else {
+ const MCSymbolData &BaseData = Assembler.getSymbolData(*Base);
+ if (BaseData.Fragment)
+ coff_symbol->Section =
+ SectionMap[&BaseData.Fragment->getParent()->getSection()];
+ }
coff_symbol->MCData = &ResSymData;
}
@@ -826,14 +830,9 @@ void WinCOFFObjectWriter::WriteObject(MC
Header.NumberOfSymbols = 0;
for (auto & Symbol : Symbols) {
- MCSymbolData const *SymbolData = Symbol->MCData;
-
// Update section number & offset for symbols that have them.
- if (SymbolData && SymbolData->Fragment) {
- assert(Symbol->Section != nullptr);
-
+ if (Symbol->Section)
Symbol->Data.SectionNumber = Symbol->Section->Number;
- }
if (Symbol->should_keep()) {
MakeSymbolReal(*Symbol, Header.NumberOfSymbols++);
Modified: llvm/trunk/test/MC/COFF/offset.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/COFF/offset.s?rev=207763&r1=207762&r2=207763&view=diff
==============================================================================
--- llvm/trunk/test/MC/COFF/offset.s (original)
+++ llvm/trunk/test/MC/COFF/offset.s Thu May 1 08:37:57 2014
@@ -11,7 +11,7 @@ test1_zed = test1_foo + 1
// CHECK: Symbol {
// CHECK: Name: test1_zed
// CHECK-NEXT: Value: 1
-// CHECK-NEXT: Section:
+// CHECK-NEXT: Section: .data
// CHECK-NEXT: BaseType: Null
// CHECK-NEXT: ComplexType: Null
// CHECK-NEXT: StorageClass: External
More information about the llvm-commits
mailing list