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

Unified Diff: lib/Analysis/NaCl/PNaClABIVerifyModule.cpp

Issue 14329025: Check for metadata in PNaCl ABI checker. (Closed) Base URL: http://git.chromium.org/native_client/pnacl-llvm.git@master
Patch Set: cleanup Created 7 years, 8 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: lib/Analysis/NaCl/PNaClABIVerifyModule.cpp
diff --git a/lib/Analysis/NaCl/PNaClABIVerifyModule.cpp b/lib/Analysis/NaCl/PNaClABIVerifyModule.cpp
index 88914c85a8a336b85630a35d754c213ac2ba9c05..5055a58223a8ae8e9350dca4e19f8b9c28a78ff7 100644
--- a/lib/Analysis/NaCl/PNaClABIVerifyModule.cpp
+++ b/lib/Analysis/NaCl/PNaClABIVerifyModule.cpp
@@ -31,13 +31,16 @@ class PNaClABIVerifyModule : public ModulePass {
PNaClABIVerifyModule() :
ModulePass(ID),
Reporter(new PNaClABIErrorReporter),
- ReporterIsOwned(true) {
+ ReporterIsOwned(true),
+ AllowDebugMetadata(false) {
initializePNaClABIVerifyModulePass(*PassRegistry::getPassRegistry());
}
- explicit PNaClABIVerifyModule(PNaClABIErrorReporter *Reporter_) :
+ PNaClABIVerifyModule(PNaClABIErrorReporter *Reporter_,
+ bool AllowDebugMetadata_) :
ModulePass(ID),
Reporter(Reporter_),
- ReporterIsOwned(false) {
+ ReporterIsOwned(false),
+ AllowDebugMetadata(AllowDebugMetadata_) {
Mark Seaborn 2013/04/25 18:04:32 Same style comment as other file
initializePNaClABIVerifyModulePass(*PassRegistry::getPassRegistry());
}
~PNaClABIVerifyModule() {
@@ -48,9 +51,11 @@ class PNaClABIVerifyModule : public ModulePass {
virtual void print(raw_ostream &O, const Module *M) const;
private:
void CheckGlobalValueCommon(const GlobalValue *GV);
+ bool WhiteListedMetadata(const NamedMDNode *MD);
PNaClABITypeChecker TC;
PNaClABIErrorReporter *Reporter;
bool ReporterIsOwned;
+ bool AllowDebugMetadata;
};
static const char *linkageName(GlobalValue::LinkageTypes LT) {
@@ -105,6 +110,10 @@ void PNaClABIVerifyModule::CheckGlobalValueCommon(const GlobalValue *GV) {
}
}
+bool PNaClABIVerifyModule::WhiteListedMetadata(const NamedMDNode* MD) {
+ return MD->getName().startswith("llvm.dbg") && AllowDebugMetadata;
Mark Seaborn 2013/04/25 18:04:32 Maybe "llvm.dbg." (trailing dot) to be stricter?
jvoung (off chromium) 2013/04/25 23:22:20 Done.
+}
+
bool PNaClABIVerifyModule::runOnModule(Module &M) {
for (Module::const_global_iterator MI = M.global_begin(), ME = M.global_end();
MI != ME; ++MI) {
@@ -174,11 +183,17 @@ bool PNaClABIVerifyModule::runOnModule(Module &M) {
// Check named metadata nodes
for (Module::const_named_metadata_iterator I = M.named_metadata_begin(),
E = M.named_metadata_end(); I != E; ++I) {
- for (unsigned i = 0, e = I->getNumOperands(); i != e; i++) {
- if (Type *T = TC.checkTypesInMDNode(I->getOperand(i))) {
- Reporter->addError() << "Named metadata node " << I->getName() <<
- " refers to disallowed type: " <<
- PNaClABITypeChecker::getTypeName(T) << "\n";
+ if (!WhiteListedMetadata(I)) {
+ Reporter->addError() << "Named metadata node " << I->getName()
+ << " is disallowed\n";
+ } else {
+ // Check the types in the metadata.
+ for (unsigned i = 0, e = I->getNumOperands(); i != e; i++) {
+ if (Type *T = TC.checkTypesInMDNode(I->getOperand(i))) {
+ Reporter->addError() << "Named metadata node " << I->getName()
+ << " refers to disallowed type: "
+ << PNaClABITypeChecker::getTypeName(T) << "\n";
+ }
}
}
}
@@ -201,6 +216,7 @@ INITIALIZE_PASS(PNaClABIVerifyModule, "verify-pnaclabi-module",
"Verify module for PNaCl", false, true)
ModulePass *llvm::createPNaClABIVerifyModulePass(
- PNaClABIErrorReporter *Reporter) {
- return new PNaClABIVerifyModule(Reporter);
+ PNaClABIErrorReporter *Reporter,
+ bool AllowDebugMetadata) {
+ return new PNaClABIVerifyModule(Reporter, AllowDebugMetadata);
}

Powered by Google App Engine
This is Rietveld 408576698