[Lldb-commits] [PATCH] D152757: [lldb][ObjectFileELF] Set ModuleSpec file offset and size
Kazuki Sakamoto via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Wed Jun 14 09:32:13 PDT 2023
splhack updated this revision to Diff 531383.
splhack added a comment.
rebase onto D152712 <https://reviews.llvm.org/D152712>
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D152757/new/
https://reviews.llvm.org/D152757
Files:
lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
lldb/unittests/ObjectFile/ELF/CMakeLists.txt
lldb/unittests/ObjectFile/ELF/Inputs/liboffset-test.so
lldb/unittests/ObjectFile/ELF/Inputs/offset-test.bin
lldb/unittests/ObjectFile/ELF/TestObjectFileELF.cpp
Index: lldb/unittests/ObjectFile/ELF/TestObjectFileELF.cpp
===================================================================
--- lldb/unittests/ObjectFile/ELF/TestObjectFileELF.cpp
+++ lldb/unittests/ObjectFile/ELF/TestObjectFileELF.cpp
@@ -156,6 +156,35 @@
EXPECT_EQ(Spec.GetUUID(), Uuid);
}
+TEST_F(ObjectFileELFTest, GetModuleSpecifications_OffsetSizeWithNormalFile) {
+ std::string SO = GetInputFilePath("liboffset-test.so");
+ ModuleSpecList Specs;
+ ASSERT_EQ(1u, ObjectFile::GetModuleSpecifications(FileSpec(SO), 0, 0, Specs));
+ ModuleSpec Spec;
+ ASSERT_TRUE(Specs.GetModuleSpecAtIndex(0, Spec)) ;
+ UUID Uuid;
+ Uuid.SetFromStringRef("7D6E4738");
+ EXPECT_EQ(Spec.GetUUID(), Uuid);
+ EXPECT_EQ(Spec.GetObjectOffset(), 0UL);
+ EXPECT_EQ(Spec.GetObjectSize(), 3600UL);
+ EXPECT_EQ(FileSystem::Instance().GetByteSize(FileSpec(SO)), 3600UL);
+}
+
+TEST_F(ObjectFileELFTest, GetModuleSpecifications_OffsetSizeWithOffsetFile) {
+ std::string SO = GetInputFilePath("offset-test.bin");
+ ModuleSpecList Specs;
+ ASSERT_EQ(
+ 1u, ObjectFile::GetModuleSpecifications(FileSpec(SO), 1024, 3600, Specs));
+ ModuleSpec Spec;
+ ASSERT_TRUE(Specs.GetModuleSpecAtIndex(0, Spec)) ;
+ UUID Uuid;
+ Uuid.SetFromStringRef("7D6E4738");
+ EXPECT_EQ(Spec.GetUUID(), Uuid);
+ EXPECT_EQ(Spec.GetObjectOffset(), 1024UL);
+ EXPECT_EQ(Spec.GetObjectSize(), 3600UL);
+ EXPECT_EQ(FileSystem::Instance().GetByteSize(FileSpec(SO)), 4640UL);
+}
+
TEST_F(ObjectFileELFTest, GetSymtab_NoSymEntryPointArmThumbAddressClass) {
/*
// nosym-entrypoint-arm-thumb.s
Index: lldb/unittests/ObjectFile/ELF/CMakeLists.txt
===================================================================
--- lldb/unittests/ObjectFile/ELF/CMakeLists.txt
+++ lldb/unittests/ObjectFile/ELF/CMakeLists.txt
@@ -11,5 +11,7 @@
set(test_inputs
early-section-headers.so
+ liboffset-test.so
+ offset-test.bin
)
add_unittest_inputs(ObjectFileELFTests "${test_inputs}")
Index: lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
===================================================================
--- lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
+++ lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
@@ -555,6 +555,8 @@
if (header.Parse(data, &header_offset)) {
if (data_sp) {
ModuleSpec spec(file);
+ spec.SetObjectOffset(file_offset);
+ spec.SetObjectSize(length);
const uint32_t sub_type = subTypeFromElfHeader(header);
spec.GetArchitecture().SetArchitecture(
@@ -587,7 +589,7 @@
}
if (data_sp->GetByteSize() < length)
- data_sp = MapFileData(file, -1, file_offset);
+ data_sp = MapFileData(file, length, file_offset);
if (data_sp)
data.SetData(data_sp);
// In case there is header extension in the section #0, the header we
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D152757.531383.patch
Type: text/x-patch
Size: 2867 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20230614/5cb049e0/attachment-0001.bin>
More information about the lldb-commits
mailing list