[PATCH] D77919: [MC][ELF] Add section flags to diagnostic

Brian Cain via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Apr 10 16:09:58 PDT 2020


bcain created this revision.
bcain added reviewers: MaskRay, sidneym.
Herald added subscribers: hiraditya, emaste.
Herald added a reviewer: espindola.
Herald added a project: LLVM.

Make the assembler diagnostic emit quoted section names and refer to
the expected flag bits by input character flag.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D77919

Files:
  llvm/lib/MC/MCParser/ELFAsmParser.cpp
  llvm/test/MC/ELF/section-flags-changed.s


Index: llvm/test/MC/ELF/section-flags-changed.s
===================================================================
--- llvm/test/MC/ELF/section-flags-changed.s
+++ llvm/test/MC/ELF/section-flags-changed.s
@@ -3,10 +3,10 @@
 foo:
 .section .foo,"ax", at progbits
 
-# CHECK: {{.*}}.s:[[# @LINE+1]]:1: error: changed section flags for .foo, expected: 0x6
+# CHECK: {{.*}}.s:[[# @LINE+1]]:1: error: changed section flags for `.foo', expected: "ax"
 .section .foo,"awx", at progbits
 
-# CHECK: {{.*}}.s:[[# @LINE+1]]:1: error: changed section flags for .foo, expected: 0x6
+# CHECK: {{.*}}.s:[[# @LINE+1]]:1: error: changed section flags for `.foo', expected: "ax"
 .pushsection .foo,"a", at progbits
 
 .pushsection .foo,"ax", at progbits
Index: llvm/lib/MC/MCParser/ELFAsmParser.cpp
===================================================================
--- llvm/lib/MC/MCParser/ELFAsmParser.cpp
+++ llvm/lib/MC/MCParser/ELFAsmParser.cpp
@@ -640,9 +640,16 @@
   if (Section->getType() != Type)
     Error(loc, "changed section type for " + SectionName + ", expected: 0x" +
                    utohexstr(Section->getType()));
-  if (Section->getFlags() != Flags)
-    Error(loc, "changed section flags for " + SectionName + ", expected: 0x" +
-                   utohexstr(Section->getFlags()));
+  if (Section->getFlags() != Flags) {
+    const unsigned ExpectedFlags = Section->getFlags();
+    const std::string ExpectedFlagsText =
+        Twine(StringRef((ExpectedFlags & ELF::SHF_ALLOC) ? "a" : "") +
+              StringRef((ExpectedFlags & ELF::SHF_WRITE) ? "w" : "") +
+              StringRef((ExpectedFlags & ELF::SHF_EXECINSTR) ? "x" : ""))
+            .str();
+    Error(loc, "changed section flags for `" + SectionName + "', expected: \"" +
+                   ExpectedFlagsText + "\"");
+  }
   if (Section->getEntrySize() != Size)
     Error(loc, "changed section entsize for " + SectionName +
                    ", expected: " + Twine(Section->getEntrySize()));


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D77919.256699.patch
Type: text/x-patch
Size: 1966 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200410/b21523f3/attachment.bin>


More information about the llvm-commits mailing list