Skip to content

Commit f1e0ae3

Browse files
committed
COFF: Set section permissions
Summary: This enables us to reason about whether a given address can be executable, for instance during unwinding. Reviewers: amccarth, mstorsjo Subscribers: lldb-commits Differential Revision: https://reviews.llvm.org/D69102
1 parent 532815d commit f1e0ae3

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -797,6 +797,7 @@ void ObjectFilePECOFF::CreateSections(SectionList &unified_section_list) {
797797
/*file_offset*/ 0, m_coff_header_opt.header_size,
798798
m_coff_header_opt.sect_alignment,
799799
/*flags*/ 0);
800+
header_sp->SetPermissions(ePermissionsReadable);
800801
m_sections_up->AddSection(header_sp);
801802
unified_section_list.AddSection(header_sp);
802803

@@ -919,6 +920,15 @@ void ObjectFilePECOFF::CreateSections(SectionList &unified_section_list) {
919920
m_coff_header_opt.sect_alignment, // Section alignment
920921
m_sect_headers[idx].flags)); // Flags for this section
921922

923+
uint32_t permissions = 0;
924+
if (m_sect_headers[idx].flags & llvm::COFF::IMAGE_SCN_MEM_EXECUTE)
925+
permissions |= ePermissionsExecutable;
926+
if (m_sect_headers[idx].flags & llvm::COFF::IMAGE_SCN_MEM_READ)
927+
permissions |= ePermissionsReadable;
928+
if (m_sect_headers[idx].flags & llvm::COFF::IMAGE_SCN_MEM_WRITE)
929+
permissions |= ePermissionsWritable;
930+
section_sp->SetPermissions(permissions);
931+
922932
m_sections_up->AddSection(section_sp);
923933
unified_section_list.AddSection(section_sp);
924934
}

lldb/test/Shell/ObjectFile/PECOFF/sections.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
# CHECK-NEXT: ID: 0xffffffffffffffff
88
# CHECK-NEXT: Name: PECOFF header
99
# CHECK-NEXT: Type: regular
10-
# CHECK-NEXT: Permissions: ---
10+
# CHECK-NEXT: Permissions: r--
1111
# CHECK-NEXT: Thread specific: no
1212
# CHECK-NEXT: VM address: 0x40000000
1313
# CHECK-NEXT: VM size: 512
@@ -17,7 +17,7 @@
1717
# CHECK-NEXT: ID: 0x1
1818
# CHECK-NEXT: Name: .text
1919
# CHECK-NEXT: Type: code
20-
# CHECK-NEXT: Permissions: ---
20+
# CHECK-NEXT: Permissions: r-x
2121
# CHECK-NEXT: Thread specific: no
2222
# CHECK-NEXT: VM address: 0x40001000
2323
# CHECK-NEXT: VM size: 64
@@ -27,7 +27,7 @@
2727
# CHECK-NEXT: ID: 0x2
2828
# CHECK-NEXT: Name: .data
2929
# CHECK-NEXT: Type: data
30-
# CHECK-NEXT: Permissions: ---
30+
# CHECK-NEXT: Permissions: r--
3131
# CHECK-NEXT: Thread specific: no
3232
# CHECK-NEXT: VM address: 0x40002000
3333
# CHECK-NEXT: VM size: 64

0 commit comments

Comments
 (0)