Skip to content

Commit c69307e

Browse files
committed
[lldb] Prevent object file plugins from changing the data buffer
The current design allows that the object file contents could be mapped by one object file plugin and then used by another. Presumably the idea here was to avoid mapping the same file twice. This becomes an issue when one object file plugin wants to map the file differently from the others. For example, ObjectFileELF needs to map its memory as writable while others likeObjectFileMachO needs it to be mapped read-only. This patch prevents plugins from changing the buffer by passing them is by value rather than by reference. Differential revision: https://reviews.llvm.org/D122944
1 parent b08ede4 commit c69307e

17 files changed

+37
-39
lines changed

lldb/include/lldb/lldb-private-interfaces.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,13 @@ typedef size_t (*ObjectFileGetModuleSpecifications)(
4545
lldb::offset_t data_offset, lldb::offset_t file_offset,
4646
lldb::offset_t length, ModuleSpecList &module_specs);
4747
typedef ObjectFile *(*ObjectFileCreateInstance)(const lldb::ModuleSP &module_sp,
48-
lldb::DataBufferSP &data_sp,
48+
lldb::DataBufferSP data_sp,
4949
lldb::offset_t data_offset,
5050
const FileSpec *file,
5151
lldb::offset_t file_offset,
5252
lldb::offset_t length);
5353
typedef ObjectFile *(*ObjectFileCreateMemoryInstance)(
54-
const lldb::ModuleSP &module_sp, lldb::DataBufferSP &data_sp,
54+
const lldb::ModuleSP &module_sp, lldb::DataBufferSP data_sp,
5555
const lldb::ProcessSP &process_sp, lldb::addr_t offset);
5656
typedef bool (*ObjectFileSaveCore)(const lldb::ProcessSP &process_sp,
5757
const FileSpec &outfile,

lldb/source/Plugins/ObjectFile/Breakpad/ObjectFileBreakpad.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ void ObjectFileBreakpad::Terminate() {
5757
}
5858

5959
ObjectFile *ObjectFileBreakpad::CreateInstance(
60-
const ModuleSP &module_sp, DataBufferSP &data_sp, offset_t data_offset,
60+
const ModuleSP &module_sp, DataBufferSP data_sp, offset_t data_offset,
6161
const FileSpec *file, offset_t file_offset, offset_t length) {
6262
if (!data_sp) {
6363
data_sp = MapFileData(*file, length, file_offset);
@@ -84,7 +84,7 @@ ObjectFile *ObjectFileBreakpad::CreateInstance(
8484
}
8585

8686
ObjectFile *ObjectFileBreakpad::CreateMemoryInstance(
87-
const ModuleSP &module_sp, DataBufferSP &data_sp,
87+
const ModuleSP &module_sp, DataBufferSP data_sp,
8888
const ProcessSP &process_sp, addr_t header_addr) {
8989
return nullptr;
9090
}

lldb/source/Plugins/ObjectFile/Breakpad/ObjectFileBreakpad.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,12 @@ class ObjectFileBreakpad : public ObjectFile {
2727
}
2828

2929
static ObjectFile *
30-
CreateInstance(const lldb::ModuleSP &module_sp, lldb::DataBufferSP &data_sp,
30+
CreateInstance(const lldb::ModuleSP &module_sp, lldb::DataBufferSP data_sp,
3131
lldb::offset_t data_offset, const FileSpec *file,
3232
lldb::offset_t file_offset, lldb::offset_t length);
3333

3434
static ObjectFile *CreateMemoryInstance(const lldb::ModuleSP &module_sp,
35-
lldb::DataBufferSP &data_sp,
35+
lldb::DataBufferSP data_sp,
3636
const lldb::ProcessSP &process_sp,
3737
lldb::addr_t header_addr);
3838

lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,7 @@ void ObjectFileELF::Terminate() {
336336
}
337337

338338
ObjectFile *ObjectFileELF::CreateInstance(const lldb::ModuleSP &module_sp,
339-
DataBufferSP &data_sp,
339+
DataBufferSP data_sp,
340340
lldb::offset_t data_offset,
341341
const lldb_private::FileSpec *file,
342342
lldb::offset_t file_offset,
@@ -379,7 +379,7 @@ ObjectFile *ObjectFileELF::CreateInstance(const lldb::ModuleSP &module_sp,
379379
}
380380

381381
ObjectFile *ObjectFileELF::CreateMemoryInstance(
382-
const lldb::ModuleSP &module_sp, DataBufferSP &data_sp,
382+
const lldb::ModuleSP &module_sp, DataBufferSP data_sp,
383383
const lldb::ProcessSP &process_sp, lldb::addr_t header_addr) {
384384
if (data_sp && data_sp->GetByteSize() > (llvm::ELF::EI_NIDENT)) {
385385
const uint8_t *magic = data_sp->GetBytes();

lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,12 @@ class ObjectFileELF : public lldb_private::ObjectFile {
6868
}
6969

7070
static lldb_private::ObjectFile *
71-
CreateInstance(const lldb::ModuleSP &module_sp, lldb::DataBufferSP &data_sp,
71+
CreateInstance(const lldb::ModuleSP &module_sp, lldb::DataBufferSP data_sp,
7272
lldb::offset_t data_offset, const lldb_private::FileSpec *file,
7373
lldb::offset_t file_offset, lldb::offset_t length);
7474

7575
static lldb_private::ObjectFile *CreateMemoryInstance(
76-
const lldb::ModuleSP &module_sp, lldb::DataBufferSP &data_sp,
76+
const lldb::ModuleSP &module_sp, lldb::DataBufferSP data_sp,
7777
const lldb::ProcessSP &process_sp, lldb::addr_t header_addr);
7878

7979
static size_t GetModuleSpecifications(const lldb_private::FileSpec &file,

lldb/source/Plugins/ObjectFile/JIT/ObjectFileJIT.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ void ObjectFileJIT::Terminate() {
5454
}
5555

5656
ObjectFile *ObjectFileJIT::CreateInstance(const lldb::ModuleSP &module_sp,
57-
DataBufferSP &data_sp,
57+
DataBufferSP data_sp,
5858
lldb::offset_t data_offset,
5959
const FileSpec *file,
6060
lldb::offset_t file_offset,
@@ -65,7 +65,7 @@ ObjectFile *ObjectFileJIT::CreateInstance(const lldb::ModuleSP &module_sp,
6565
}
6666

6767
ObjectFile *ObjectFileJIT::CreateMemoryInstance(const lldb::ModuleSP &module_sp,
68-
DataBufferSP &data_sp,
68+
DataBufferSP data_sp,
6969
const ProcessSP &process_sp,
7070
lldb::addr_t header_addr) {
7171
// JIT'ed object file is backed by the ObjectFileJITDelegate, never read from

lldb/source/Plugins/ObjectFile/JIT/ObjectFileJIT.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,12 @@ class ObjectFileJIT : public lldb_private::ObjectFile {
3333
}
3434

3535
static lldb_private::ObjectFile *
36-
CreateInstance(const lldb::ModuleSP &module_sp, lldb::DataBufferSP &data_sp,
36+
CreateInstance(const lldb::ModuleSP &module_sp, lldb::DataBufferSP data_sp,
3737
lldb::offset_t data_offset, const lldb_private::FileSpec *file,
3838
lldb::offset_t file_offset, lldb::offset_t length);
3939

4040
static lldb_private::ObjectFile *CreateMemoryInstance(
41-
const lldb::ModuleSP &module_sp, lldb::DataBufferSP &data_sp,
41+
const lldb::ModuleSP &module_sp, lldb::DataBufferSP data_sp,
4242
const lldb::ProcessSP &process_sp, lldb::addr_t header_addr);
4343

4444
static size_t GetModuleSpecifications(const lldb_private::FileSpec &file,

lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -817,7 +817,7 @@ void ObjectFileMachO::Terminate() {
817817
}
818818

819819
ObjectFile *ObjectFileMachO::CreateInstance(const lldb::ModuleSP &module_sp,
820-
DataBufferSP &data_sp,
820+
DataBufferSP data_sp,
821821
lldb::offset_t data_offset,
822822
const FileSpec *file,
823823
lldb::offset_t file_offset,
@@ -848,7 +848,7 @@ ObjectFile *ObjectFileMachO::CreateInstance(const lldb::ModuleSP &module_sp,
848848
}
849849

850850
ObjectFile *ObjectFileMachO::CreateMemoryInstance(
851-
const lldb::ModuleSP &module_sp, DataBufferSP &data_sp,
851+
const lldb::ModuleSP &module_sp, DataBufferSP data_sp,
852852
const ProcessSP &process_sp, lldb::addr_t header_addr) {
853853
if (ObjectFileMachO::MagicBytesMatch(data_sp, 0, data_sp->GetByteSize())) {
854854
std::unique_ptr<ObjectFile> objfile_up(

lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,12 @@ class ObjectFileMachO : public lldb_private::ObjectFile {
4444
}
4545

4646
static lldb_private::ObjectFile *
47-
CreateInstance(const lldb::ModuleSP &module_sp, lldb::DataBufferSP &data_sp,
47+
CreateInstance(const lldb::ModuleSP &module_sp, lldb::DataBufferSP data_sp,
4848
lldb::offset_t data_offset, const lldb_private::FileSpec *file,
4949
lldb::offset_t file_offset, lldb::offset_t length);
5050

5151
static lldb_private::ObjectFile *CreateMemoryInstance(
52-
const lldb::ModuleSP &module_sp, lldb::DataBufferSP &data_sp,
52+
const lldb::ModuleSP &module_sp, lldb::DataBufferSP data_sp,
5353
const lldb::ProcessSP &process_sp, lldb::addr_t header_addr);
5454

5555
static size_t GetModuleSpecifications(const lldb_private::FileSpec &file,

lldb/source/Plugins/ObjectFile/Minidump/ObjectFileMinidump.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,14 @@ void ObjectFileMinidump::Terminate() {
3333
}
3434

3535
ObjectFile *ObjectFileMinidump::CreateInstance(
36-
const lldb::ModuleSP &module_sp, lldb::DataBufferSP &data_sp,
36+
const lldb::ModuleSP &module_sp, lldb::DataBufferSP data_sp,
3737
lldb::offset_t data_offset, const lldb_private::FileSpec *file,
3838
lldb::offset_t offset, lldb::offset_t length) {
3939
return nullptr;
4040
}
4141

4242
ObjectFile *ObjectFileMinidump::CreateMemoryInstance(
43-
const lldb::ModuleSP &module_sp, DataBufferSP &data_sp,
43+
const lldb::ModuleSP &module_sp, DataBufferSP data_sp,
4444
const ProcessSP &process_sp, lldb::addr_t header_addr) {
4545
return nullptr;
4646
}

lldb/source/Plugins/ObjectFile/Minidump/ObjectFileMinidump.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,12 @@ class ObjectFileMinidump : public lldb_private::PluginInterface {
3838
llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }
3939

4040
static lldb_private::ObjectFile *
41-
CreateInstance(const lldb::ModuleSP &module_sp, lldb::DataBufferSP &data_sp,
41+
CreateInstance(const lldb::ModuleSP &module_sp, lldb::DataBufferSP data_sp,
4242
lldb::offset_t data_offset, const lldb_private::FileSpec *file,
4343
lldb::offset_t offset, lldb::offset_t length);
4444

4545
static lldb_private::ObjectFile *CreateMemoryInstance(
46-
const lldb::ModuleSP &module_sp, lldb::DataBufferSP &data_sp,
46+
const lldb::ModuleSP &module_sp, lldb::DataBufferSP data_sp,
4747
const lldb::ProcessSP &process_sp, lldb::addr_t header_addr);
4848

4949
static size_t GetModuleSpecifications(const lldb_private::FileSpec &file,

lldb/source/Plugins/ObjectFile/PDB/ObjectFilePDB.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ bool ObjectFilePDB::initPDBFile() {
8787
}
8888

8989
ObjectFile *
90-
ObjectFilePDB::CreateInstance(const ModuleSP &module_sp, DataBufferSP &data_sp,
90+
ObjectFilePDB::CreateInstance(const ModuleSP &module_sp, DataBufferSP data_sp,
9191
offset_t data_offset, const FileSpec *file,
9292
offset_t file_offset, offset_t length) {
9393
auto objfile_up = std::make_unique<ObjectFilePDB>(
@@ -98,7 +98,7 @@ ObjectFilePDB::CreateInstance(const ModuleSP &module_sp, DataBufferSP &data_sp,
9898
}
9999

100100
ObjectFile *ObjectFilePDB::CreateMemoryInstance(const ModuleSP &module_sp,
101-
DataBufferSP &data_sp,
101+
DataBufferSP data_sp,
102102
const ProcessSP &process_sp,
103103
addr_t header_addr) {
104104
return nullptr;

lldb/source/Plugins/ObjectFile/PDB/ObjectFilePDB.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,12 @@ class ObjectFilePDB : public ObjectFile {
3131
loadPDBFile(std::string PdbPath, llvm::BumpPtrAllocator &Allocator);
3232

3333
static ObjectFile *
34-
CreateInstance(const lldb::ModuleSP &module_sp, lldb::DataBufferSP &data_sp,
34+
CreateInstance(const lldb::ModuleSP &module_sp, lldb::DataBufferSP data_sp,
3535
lldb::offset_t data_offset, const FileSpec *file,
3636
lldb::offset_t file_offset, lldb::offset_t length);
3737

3838
static ObjectFile *CreateMemoryInstance(const lldb::ModuleSP &module_sp,
39-
lldb::DataBufferSP &data_sp,
39+
lldb::DataBufferSP data_sp,
4040
const lldb::ProcessSP &process_sp,
4141
lldb::addr_t header_addr);
4242

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

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -77,12 +77,10 @@ llvm::StringRef ObjectFilePECOFF::GetPluginDescriptionStatic() {
7777
"(32 and 64 bit)";
7878
}
7979

80-
ObjectFile *ObjectFilePECOFF::CreateInstance(const lldb::ModuleSP &module_sp,
81-
DataBufferSP &data_sp,
82-
lldb::offset_t data_offset,
83-
const lldb_private::FileSpec *file_p,
84-
lldb::offset_t file_offset,
85-
lldb::offset_t length) {
80+
ObjectFile *ObjectFilePECOFF::CreateInstance(
81+
const lldb::ModuleSP &module_sp, DataBufferSP data_sp,
82+
lldb::offset_t data_offset, const lldb_private::FileSpec *file_p,
83+
lldb::offset_t file_offset, lldb::offset_t length) {
8684
FileSpec file = file_p ? *file_p : FileSpec();
8785
if (!data_sp) {
8886
data_sp = MapFileData(file, length, file_offset);
@@ -113,7 +111,7 @@ ObjectFile *ObjectFilePECOFF::CreateInstance(const lldb::ModuleSP &module_sp,
113111
}
114112

115113
ObjectFile *ObjectFilePECOFF::CreateMemoryInstance(
116-
const lldb::ModuleSP &module_sp, lldb::DataBufferSP &data_sp,
114+
const lldb::ModuleSP &module_sp, lldb::DataBufferSP data_sp,
117115
const lldb::ProcessSP &process_sp, lldb::addr_t header_addr) {
118116
if (!data_sp || !ObjectFilePECOFF::MagicBytesMatch(data_sp))
119117
return nullptr;

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,12 @@ class ObjectFilePECOFF : public lldb_private::ObjectFile {
6262
static llvm::StringRef GetPluginDescriptionStatic();
6363

6464
static ObjectFile *
65-
CreateInstance(const lldb::ModuleSP &module_sp, lldb::DataBufferSP &data_sp,
65+
CreateInstance(const lldb::ModuleSP &module_sp, lldb::DataBufferSP data_sp,
6666
lldb::offset_t data_offset, const lldb_private::FileSpec *file,
6767
lldb::offset_t offset, lldb::offset_t length);
6868

6969
static lldb_private::ObjectFile *CreateMemoryInstance(
70-
const lldb::ModuleSP &module_sp, lldb::DataBufferSP &data_sp,
70+
const lldb::ModuleSP &module_sp, lldb::DataBufferSP data_sp,
7171
const lldb::ProcessSP &process_sp, lldb::addr_t header_addr);
7272

7373
static size_t GetModuleSpecifications(const lldb_private::FileSpec &file,

lldb/source/Plugins/ObjectFile/wasm/ObjectFileWasm.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ void ObjectFileWasm::Terminate() {
8888
}
8989

9090
ObjectFile *
91-
ObjectFileWasm::CreateInstance(const ModuleSP &module_sp, DataBufferSP &data_sp,
91+
ObjectFileWasm::CreateInstance(const ModuleSP &module_sp, DataBufferSP data_sp,
9292
offset_t data_offset, const FileSpec *file,
9393
offset_t file_offset, offset_t length) {
9494
Log *log = GetLog(LLDBLog::Object);
@@ -141,7 +141,7 @@ ObjectFileWasm::CreateInstance(const ModuleSP &module_sp, DataBufferSP &data_sp,
141141
}
142142

143143
ObjectFile *ObjectFileWasm::CreateMemoryInstance(const ModuleSP &module_sp,
144-
DataBufferSP &data_sp,
144+
DataBufferSP data_sp,
145145
const ProcessSP &process_sp,
146146
addr_t header_addr) {
147147
if (!ValidateModuleHeader(data_sp))

lldb/source/Plugins/ObjectFile/wasm/ObjectFileWasm.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,12 @@ class ObjectFileWasm : public ObjectFile {
3030
}
3131

3232
static ObjectFile *
33-
CreateInstance(const lldb::ModuleSP &module_sp, lldb::DataBufferSP &data_sp,
33+
CreateInstance(const lldb::ModuleSP &module_sp, lldb::DataBufferSP data_sp,
3434
lldb::offset_t data_offset, const FileSpec *file,
3535
lldb::offset_t file_offset, lldb::offset_t length);
3636

3737
static ObjectFile *CreateMemoryInstance(const lldb::ModuleSP &module_sp,
38-
lldb::DataBufferSP &data_sp,
38+
lldb::DataBufferSP data_sp,
3939
const lldb::ProcessSP &process_sp,
4040
lldb::addr_t header_addr);
4141

0 commit comments

Comments
 (0)