Lines Matching full:elf
17 #include <elf.h>
34 #include <unwindstack/Elf.h>
75 // The map is empty, but this should still create an invalid elf object. in TEST_F()
76 Elf* elf = info->GetElf(process_memory_, ARCH_ARM); in TEST_F() local
77 ASSERT_TRUE(elf != nullptr); in TEST_F()
78 ASSERT_FALSE(elf->valid()); in TEST_F()
87 Elf* elf = info->GetElf(process_memory_, ARCH_ARM); in TEST_F() local
88 ASSERT_TRUE(elf != nullptr); in TEST_F()
89 ASSERT_TRUE(elf->valid()); in TEST_F()
90 EXPECT_EQ(static_cast<uint32_t>(EM_ARM), elf->machine_type()); in TEST_F()
91 EXPECT_EQ(ELFCLASS32, elf->class_type()); in TEST_F()
93 // Now verify that an empty process memory returns an invalid elf object. in TEST_F()
95 elf = info->GetElf(std::shared_ptr<Memory>(), ARCH_ARM); in TEST_F()
96 ASSERT_TRUE(elf != nullptr); in TEST_F()
97 ASSERT_FALSE(elf->valid()); in TEST_F()
106 Elf* elf = info->GetElf(process_memory_, ARCH_ARM64); in TEST_F() local
107 ASSERT_TRUE(elf != nullptr); in TEST_F()
108 ASSERT_TRUE(elf->valid()); in TEST_F()
109 EXPECT_EQ(static_cast<uint32_t>(EM_AARCH64), elf->machine_type()); in TEST_F()
110 EXPECT_EQ(ELFCLASS64, elf->class_type()); in TEST_F()
119 Elf* elf = info->GetElf(process_memory_, ARCH_X86); in TEST_F() local
120 ASSERT_TRUE(elf != nullptr); in TEST_F()
121 ASSERT_FALSE(elf->valid()); in TEST_F()
131 Elf* elf = info->GetElf(process_memory_, ARCH_ARM); in TEST_F() local
132 ASSERT_TRUE(elf != nullptr); in TEST_F()
133 ASSERT_TRUE(elf->valid()); in TEST_F()
134 EXPECT_EQ(static_cast<uint32_t>(EM_ARM), elf->machine_type()); in TEST_F()
135 EXPECT_EQ(ELFCLASS32, elf->class_type()); in TEST_F()
136 EXPECT_TRUE(elf->gnu_debugdata_interface() != nullptr); in TEST_F()
146 Elf* elf = info->GetElf(process_memory_, ARCH_ARM64); in TEST_F() local
147 ASSERT_TRUE(elf != nullptr); in TEST_F()
148 ASSERT_TRUE(elf->valid()); in TEST_F()
149 EXPECT_EQ(static_cast<uint32_t>(EM_AARCH64), elf->machine_type()); in TEST_F()
150 EXPECT_EQ(ELFCLASS64, elf->class_type()); in TEST_F()
151 EXPECT_TRUE(elf->gnu_debugdata_interface() != nullptr); in TEST_F()
160 Elf* elf = info->GetElf(process_memory_, ARCH_ARM); in TEST_F() local
161 ASSERT_TRUE(elf != nullptr); in TEST_F()
162 ASSERT_FALSE(elf->valid()); in TEST_F()
166 elf = info->GetElf(process_memory_, ARCH_ARM); in TEST_F()
167 ASSERT_TRUE(elf != nullptr); in TEST_F()
168 ASSERT_FALSE(elf->valid()); in TEST_F()
173 elf = info->GetElf(process_memory_, ARCH_ARM); in TEST_F()
174 ASSERT_TRUE(elf != nullptr); in TEST_F()
175 ASSERT_TRUE(elf->valid()); in TEST_F()
178 // Verify that if the offset is non-zero but there is no elf at the offset,
189 Elf* elf = info->GetElf(process_memory_, ARCH_ARM); in TEST_F() local
190 ASSERT_TRUE(elf != nullptr); in TEST_F()
191 ASSERT_TRUE(elf->valid()); in TEST_F()
192 ASSERT_TRUE(elf->memory() != nullptr); in TEST_F()
197 ASSERT_TRUE(elf->memory()->ReadFully(0, buffer.data(), buffer.size())); in TEST_F()
203 ASSERT_FALSE(elf->memory()->ReadFully(buffer.size(), buffer.data(), 1)); in TEST_F()
206 // Verify that if the offset is non-zero and there is an elf at that
218 Elf* elf = info->GetElf(process_memory_, ARCH_ARM); in TEST_F() local
219 ASSERT_TRUE(elf != nullptr); in TEST_F()
220 ASSERT_TRUE(elf->valid()); in TEST_F()
221 ASSERT_TRUE(elf->memory() != nullptr); in TEST_F()
225 ASSERT_TRUE(elf->memory()->ReadFully(0, buffer.data(), 0x1000)); in TEST_F()
231 ASSERT_FALSE(elf->memory()->ReadFully(0x1000, buffer.data(), 1)); in TEST_F()
234 // Verify that if the offset is non-zero and there is an elf at that
236 // embedded elf is bigger than the initial map, the new object is larger
237 // than the original map size. Do this for a 32 bit elf and a 64 bit elf.
251 Elf* elf = info->GetElf(process_memory_, ARCH_ARM); in TEST_F() local
252 ASSERT_TRUE(elf != nullptr); in TEST_F()
253 ASSERT_TRUE(elf->valid()); in TEST_F()
254 ASSERT_TRUE(elf->memory() != nullptr); in TEST_F()
257 // Verify the memory is a valid elf. in TEST_F()
259 ASSERT_TRUE(elf->memory()->ReadFully(0, buffer.data(), 0x1000)); in TEST_F()
263 ASSERT_TRUE(elf->memory()->ReadFully(0x1000, buffer.data(), 1)); in TEST_F()
279 Elf* elf = info->GetElf(process_memory_, ARCH_ARM64); in TEST_F() local
280 ASSERT_TRUE(elf != nullptr); in TEST_F()
281 ASSERT_TRUE(elf->valid()); in TEST_F()
282 ASSERT_TRUE(elf->memory() != nullptr); in TEST_F()
285 // Verify the memory is a valid elf. in TEST_F()
287 ASSERT_TRUE(elf->memory()->ReadFully(0, buffer.data(), 0x1000)); in TEST_F()
291 ASSERT_TRUE(elf->memory()->ReadFully(0x1000, buffer.data(), 1)); in TEST_F()
294 // Verify that if the offset is non-zero and there is an elf at that
296 // the initial map is smaller than elf header size, we can still read the elf.
310 Elf* elf = info->GetElf(process_memory_, ARCH_ARM64); in TEST_F() local
311 ASSERT_TRUE(elf != nullptr); in TEST_F()
312 ASSERT_TRUE(elf->valid()); in TEST_F()
313 ASSERT_TRUE(elf->memory() != nullptr); in TEST_F()
316 // Verify the memory is a valid elf. in TEST_F()
318 ASSERT_TRUE(elf->memory()->ReadFully(0, buffer.data(), 0x1000)); in TEST_F()
322 ASSERT_TRUE(elf->memory()->ReadFully(0x1000, buffer.data(), 1)); in TEST_F()
326 // Create valid elf data in process memory for this to verify that only in TEST_F()
327 // the name is causing invalid elf data. in TEST_F()
337 Elf* elf = info->GetElf(process_memory_, ARCH_X86_64); in TEST_F() local
338 ASSERT_TRUE(elf != nullptr); in TEST_F()
339 ASSERT_FALSE(elf->valid()); in TEST_F()
344 elf = info->GetElf(process_memory_, ARCH_X86_64); in TEST_F()
345 ASSERT_FALSE(elf->valid()); in TEST_F()
347 // Change the flags and verify the elf is valid now. in TEST_F()
350 elf = info->GetElf(process_memory_, ARCH_X86_64); in TEST_F()
351 ASSERT_TRUE(elf->valid()); in TEST_F()
364 Elf* elf_in_threads[kNumConcurrentThreads]; in TEST_F()
376 Elf* elf = info->GetElf(process_memory_, ARCH_X86_64); in TEST_F() local
377 elf_in_threads[i] = elf; in TEST_F()
381 ASSERT_TRUE(info->elf() == nullptr); in TEST_F()
390 // Now verify that all of the elf files are exactly the same and valid. in TEST_F()
391 Elf* elf = info->elf().get(); in TEST_F() local
392 ASSERT_TRUE(elf != nullptr); in TEST_F()
393 EXPECT_TRUE(elf->valid()); in TEST_F()
395 EXPECT_EQ(elf, elf_in_threads[i]) << "Thread " << i << " mismatched."; in TEST_F()
399 // Verify that previous maps don't automatically get the same elf object.
407 Elf* elf = info2->GetElf(process_memory_, ARCH_ARM); in TEST_F() local
408 ASSERT_TRUE(elf != nullptr); in TEST_F()
409 ASSERT_TRUE(elf->valid()); in TEST_F()
411 ASSERT_NE(elf, info1->GetElf(process_memory_, ARCH_ARM)); in TEST_F()
429 // in the same elf object in both maps.
439 // Get the elf from the read-exec map first. in TEST_F()
440 Elf* elf = rx_map_info->GetElf(process_memory_, ARCH_ARM); in TEST_F() local
441 ASSERT_TRUE(elf != nullptr); in TEST_F()
442 ASSERT_TRUE(elf->valid()); in TEST_F()
444 ASSERT_EQ(elf, r_map_info->GetElf(process_memory_, ARCH_ARM)); in TEST_F()
453 // Get the elf from the read-exec map first. in TEST_F()
454 elf = rx_map_info->GetElf(process_memory_, ARCH_ARM); in TEST_F()
455 ASSERT_TRUE(elf != nullptr); in TEST_F()
456 ASSERT_TRUE(elf->valid()); in TEST_F()
458 ASSERT_EQ(elf, r_map_info->GetElf(process_memory_, ARCH_ARM)); in TEST_F()
462 // in the same elf object in both maps.
472 // Get the elf from the read-only map first. in TEST_F()
473 Elf* elf = r_map_info->GetElf(process_memory_, ARCH_ARM); in TEST_F() local
474 ASSERT_TRUE(elf != nullptr); in TEST_F()
475 ASSERT_TRUE(elf->valid()); in TEST_F()
477 ASSERT_EQ(elf, rx_map_info->GetElf(process_memory_, ARCH_ARM)); in TEST_F()
486 // Get the elf from the read-only map first. in TEST_F()
487 elf = r_map_info->GetElf(process_memory_, ARCH_ARM); in TEST_F()
488 ASSERT_TRUE(elf != nullptr); in TEST_F()
489 ASSERT_TRUE(elf->valid()); in TEST_F()
491 ASSERT_EQ(elf, rx_map_info->GetElf(process_memory_, ARCH_ARM)); in TEST_F()
495 // a read-execute map will result in the same elf object in both maps.
504 Elf* elf = rw_info->GetElf(process_memory_, ARCH_ARM); in TEST_F() local
505 ASSERT_TRUE(elf != nullptr); in TEST_F()
506 ASSERT_TRUE(elf->valid()); in TEST_F()
508 ASSERT_EQ(elf, r_info->GetElf(process_memory_, ARCH_ARM)); in TEST_F()