[llvm] r219281 - COFF: Don't oversize COMMON symbols when targeting BFD ld
David Majnemer
david.majnemer at gmail.com
Tue Oct 7 23:38:53 PDT 2014
Author: majnemer
Date: Wed Oct 8 01:38:53 2014
New Revision: 219281
URL: http://llvm.org/viewvc/llvm-project?rev=219281&view=rev
Log:
COFF: Don't oversize COMMON symbols when targeting BFD ld
COFF normally doesn't allow us to describe the alignment of COMMON
symbols.
It turns out that most linkers use the symbol size as a hint as to how
aligned the symbol should be.
However the BFD folks have added a .drectve command, which we
now support as of r219229, that allows us to specify the alignment
precisely. With this in mind, stop rounding sizes up.
Modified:
llvm/trunk/lib/MC/WinCOFFStreamer.cpp
llvm/trunk/test/MC/COFF/comm-align.s
Modified: llvm/trunk/lib/MC/WinCOFFStreamer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/WinCOFFStreamer.cpp?rev=219281&r1=219280&r2=219281&view=diff
==============================================================================
--- llvm/trunk/lib/MC/WinCOFFStreamer.cpp (original)
+++ llvm/trunk/lib/MC/WinCOFFStreamer.cpp Wed Oct 8 01:38:53 2014
@@ -185,14 +185,13 @@ void MCWinCOFFStreamer::EmitCommonSymbol
"Got non-COFF section in the COFF backend!");
const Triple &T = getContext().getObjectFileInfo()->getTargetTriple();
- if (T.isKnownWindowsMSVCEnvironment())
+ if (T.isKnownWindowsMSVCEnvironment()) {
if (ByteAlignment > 32)
report_fatal_error("alignment is limited to 32-bytes");
- // Round size up to alignment so that we will honor the alignment request.
- // TODO: We don't need to do this if we are targeting the bfd linker once we
- // add support for adding -aligncomm into the .drectve section.
- Size = std::max(Size, static_cast<uint64_t>(ByteAlignment));
+ // Round size up to alignment so that we will honor the alignment request.
+ Size = std::max(Size, static_cast<uint64_t>(ByteAlignment));
+ }
AssignSection(Symbol, nullptr);
Modified: llvm/trunk/test/MC/COFF/comm-align.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/COFF/comm-align.s?rev=219281&r1=219280&r2=219281&view=diff
==============================================================================
--- llvm/trunk/test/MC/COFF/comm-align.s (original)
+++ llvm/trunk/test/MC/COFF/comm-align.s Wed Oct 8 01:38:53 2014
@@ -24,6 +24,8 @@ _a:
.comm _s_4,4,2 # @s_3
.comm _s_8,4,3 # @s_4
+ .comm _small_but_overaligned,1,3 # @s_4
+
.text
.def _b
@@ -41,10 +43,15 @@ _b:
# CHECK: Section: .text (1)
# CHECK: }
# CHECK: Symbol {
+# CHECK: Name: _small_but_overaligned
+# CHECK-NEXT:Value: 1
+# CHECK-NEXT:Section: IMAGE_SYM_UNDEFINED (0)
+# CHECK: }
+# CHECK: Symbol {
# CHECK: Name: _b
# CHECK: Section: .text (1)
# CHECK: }
# CHECK: ]
-# CHECK: Directive(s): -aligncomm:"_s_2",1 -aligncomm:"_s_4",2 -aligncomm:"_s_8",3
+# CHECK: Directive(s): -aligncomm:"_s_2",1 -aligncomm:"_s_4",2 -aligncomm:"_s_8",3 -aligncomm:"_small_but_overaligned",3
More information about the llvm-commits
mailing list