[llvm] r282010 - Mark ELF sections whose name start with .note as note
Petr Hosek via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 20 13:21:13 PDT 2016
Author: phosek
Date: Tue Sep 20 15:21:13 2016
New Revision: 282010
URL: http://llvm.org/viewvc/llvm-project?rev=282010&view=rev
Log:
Mark ELF sections whose name start with .note as note
Previously, such section would be marked as SHT_PROGBITS which
makes it impossible to use an initialized C variable declaration
to emit an (allocated) ELF note. The new behavior is also consistent
with ELF assembly parser.
Differential Revision: https://reviews.llvm.org/D24692
Added:
llvm/trunk/test/CodeGen/X86/note-sections.ll
Modified:
llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
Modified: llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp?rev=282010&r1=282009&r2=282010&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp (original)
+++ llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp Tue Sep 20 15:21:13 2016
@@ -151,6 +151,11 @@ getELFKindForNamedSection(StringRef Name
static unsigned getELFSectionType(StringRef Name, SectionKind K) {
+ // Use SHT_NOTE for section whose name starts with ".note" to allow
+ // emitting ELF notes from C variable declaration.
+ // See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77609
+ if (Name.startswith(".note"))
+ return ELF::SHT_NOTE;
if (Name == ".init_array")
return ELF::SHT_INIT_ARRAY;
Added: llvm/trunk/test/CodeGen/X86/note-sections.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/note-sections.ll?rev=282010&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/X86/note-sections.ll (added)
+++ llvm/trunk/test/CodeGen/X86/note-sections.ll Tue Sep 20 15:21:13 2016
@@ -0,0 +1,19 @@
+; RUN: llc -mtriple x86_64-pc-linux < %s | FileCheck %s
+
+%struct.note = type { %struct.Elf32_Nhdr, [7 x i8], %struct.payload }
+%struct.Elf32_Nhdr = type { i32, i32, i32 }
+%struct.payload = type { i16 }
+
+ at foonote = internal constant %struct.note { %struct.Elf32_Nhdr { i32 7, i32 2, i32 17 }, [7 x i8] c"foobar\00", %struct.payload { i16 23 } }, section ".note.foo", align 4
+
+; CHECK: .section .note.foo,"a", at note
+; CHECK-NEXT: .p2align 2
+; CHECK-NEXT: foonote:
+; CHECK-NEXT: .long 7
+; CHECK-NEXT: .long 2
+; CHECK-NEXT: .long 17
+; CHECK-NEXT: .asciz "foobar"
+; CHECK-NEXT: .zero 1
+; CHECK-NEXT: .short 23
+; CHECK-NEXT: .zero 2
+; CHECK-NEXT: .size foonote, 24
More information about the llvm-commits
mailing list