[llvm] r211455 - Report error for non-zero data in .bss
Weiming Zhao
weimingz at codeaurora.org
Sat Jun 21 17:33:45 PDT 2014
Author: weimingz
Date: Sat Jun 21 19:33:44 2014
New Revision: 211455
URL: http://llvm.org/viewvc/llvm-project?rev=211455&view=rev
Log:
Report error for non-zero data in .bss
User may initialize a var with non-zero value and specify .bss section.
E.g. : int a __attribute__((section(".bss"))) = 2;
This patch converts an assertion to error report for better user
experience.
Differential Revision: http://reviews.llvm.org/D4199
Added:
llvm/trunk/test/MC/ELF/ARM/bss-non-zero-value.s
Modified:
llvm/trunk/lib/MC/MCAssembler.cpp
Modified: llvm/trunk/lib/MC/MCAssembler.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCAssembler.cpp?rev=211455&r1=211454&r2=211455&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCAssembler.cpp (original)
+++ llvm/trunk/lib/MC/MCAssembler.cpp Sat Jun 21 19:33:44 2014
@@ -27,6 +27,7 @@
#include "llvm/Support/LEB128.h"
#include "llvm/Support/TargetRegistry.h"
#include "llvm/Support/raw_ostream.h"
+#include "llvm/MC/MCSectionELF.h"
#include <tuple>
using namespace llvm;
@@ -782,8 +783,13 @@ void MCAssembler::writeSectionData(const
assert(DF.fixup_begin() == DF.fixup_end() &&
"Cannot have fixups in virtual section!");
for (unsigned i = 0, e = DF.getContents().size(); i != e; ++i)
- assert(DF.getContents()[i] == 0 &&
- "Invalid data value for virtual section!");
+ if (DF.getContents()[i]) {
+ if (auto *ELFSec = dyn_cast<const MCSectionELF>(&SD->getSection()))
+ report_fatal_error("non-zero initializer found in section '" +
+ ELFSec->getSectionName() + "'");
+ else
+ report_fatal_error("non-zero initializer found in virtual section");
+ }
break;
}
case MCFragment::FT_Align:
Added: llvm/trunk/test/MC/ELF/ARM/bss-non-zero-value.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ELF/ARM/bss-non-zero-value.s?rev=211455&view=auto
==============================================================================
--- llvm/trunk/test/MC/ELF/ARM/bss-non-zero-value.s (added)
+++ llvm/trunk/test/MC/ELF/ARM/bss-non-zero-value.s Sat Jun 21 19:33:44 2014
@@ -0,0 +1,9 @@
+// RUN: not llvm-mc -filetype=obj -triple arm-linux-gnu %s -o %t 2>%t.out
+// RUN: FileCheck --input-file=%t.out %s
+// CHECK: non-zero initializer found in section '.bss'
+ .bss
+ .globl a
+ .align 2
+a:
+ .long 1
+ .size a, 4
More information about the llvm-commits
mailing list