mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-04 03:06:28 +00:00
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 llvm-svn: 282010
This commit is contained in:
parent
c3764cfede
commit
658d5cf8a0
@ -151,6 +151,11 @@ getELFKindForNamedSection(StringRef Name, SectionKind K) {
|
||||
|
||||
|
||||
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;
|
||||
|
19
test/CodeGen/X86/note-sections.ll
Normal file
19
test/CodeGen/X86/note-sections.ll
Normal file
@ -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 }
|
||||
|
||||
@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",@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
|
Loading…
x
Reference in New Issue
Block a user