Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(17)

Unified Diff: src/IceELFObjectWriter.cpp

Issue 1185703004: Add constant blinding/pooling option for X8632 code translation (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: reformat Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/IceELFObjectWriter.cpp
diff --git a/src/IceELFObjectWriter.cpp b/src/IceELFObjectWriter.cpp
index 9c75482def48ede32edf4d4d097cd5b04e14e768..25138367e32c3ca98e240c68605e6beaca415cfe 100644
--- a/src/IceELFObjectWriter.cpp
+++ b/src/IceELFObjectWriter.cpp
@@ -383,8 +383,9 @@ void ELFObjectWriter::writeDataOfType(SectionType ST,
for (VariableDeclaration::Initializer *Init : Var->getInitializers()) {
switch (Init->getKind()) {
case VariableDeclaration::Initializer::DataInitializerKind: {
- const auto Data = llvm::cast<VariableDeclaration::DataInitializer>(
- Init)->getContents();
+ const auto Data =
+ llvm::cast<VariableDeclaration::DataInitializer>(Init)
+ ->getContents();
Section->appendData(Str, llvm::StringRef(Data.data(), Data.size()));
break;
}
@@ -504,6 +505,12 @@ template <typename ConstType> void ELFObjectWriter::writeConstantPool(Type Ty) {
// Write the data.
for (Constant *C : Pool) {
auto Const = llvm::cast<ConstType>(C);
+ // When constant pooling turned on, only emit labels for eligible constants
Jim Stichnoth 2015/06/12 23:48:17 end sentence with period
qining 2015/06/17 04:28:53 Done.
+ // If C is i32 constant and not large enough, we should ignore it here.
+ if (llvm::isa<ConstantInteger32>(C) &&
Jim Stichnoth 2015/06/12 23:48:17 Normally this kind of type checking would be done
qining 2015/06/17 04:28:53 I have moved shouldBeRandomizedOrPooled() to class
+ llvm::dyn_cast_or_null<ConstantInteger32>(C)
+ ->shouldBeRandomizedOrPooled(&Ctx) == false)
Jim Stichnoth 2015/06/12 23:48:17 use "!x" instead of "x==false"
qining 2015/06/17 04:28:53 Done.
+ continue;
std::string SymBuffer;
llvm::raw_string_ostream SymStrBuf(SymBuffer);
Const->emitPoolLabel(SymStrBuf);
@@ -528,6 +535,8 @@ template void ELFObjectWriter::writeConstantPool<ConstantFloat>(Type Ty);
template void ELFObjectWriter::writeConstantPool<ConstantDouble>(Type Ty);
+template void ELFObjectWriter::writeConstantPool<ConstantInteger32>(Type Ty);
+
void ELFObjectWriter::writeAllRelocationSections() {
writeRelocationSections(RelTextSections);
writeRelocationSections(RelDataSections);

Powered by Google App Engine
This is Rietveld 408576698