diff options
| author | Davide Italiano <davide@freebsd.org> | 2018-11-06 17:11:34 +0000 |
|---|---|---|
| committer | Davide Italiano <davide@freebsd.org> | 2018-11-06 17:11:34 +0000 |
| commit | b37f1ec86131d3963177bffc22449b881db3f98a (patch) | |
| tree | df406c63c94ebd6b017402a38b0a54e22827632c /lldb/unittests/ObjectFile/ELF/TestObjectFileELF.cpp | |
| parent | db272b3720c4ebd69b077c546ad0b0b18e4e8e00 (diff) | |
| download | bcm5719-llvm-b37f1ec86131d3963177bffc22449b881db3f98a.tar.gz bcm5719-llvm-b37f1ec86131d3963177bffc22449b881db3f98a.zip | |
[ObjectFileELF] Fix misaligned read/writes caught by UBSan.
llvm-svn: 346244
Diffstat (limited to 'lldb/unittests/ObjectFile/ELF/TestObjectFileELF.cpp')
| -rw-r--r-- | lldb/unittests/ObjectFile/ELF/TestObjectFileELF.cpp | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/lldb/unittests/ObjectFile/ELF/TestObjectFileELF.cpp b/lldb/unittests/ObjectFile/ELF/TestObjectFileELF.cpp index 86bbe0330b7..00b66c3a797 100644 --- a/lldb/unittests/ObjectFile/ELF/TestObjectFileELF.cpp +++ b/lldb/unittests/ObjectFile/ELF/TestObjectFileELF.cpp @@ -143,10 +143,17 @@ TEST_F(ObjectFileELFTest, GetModuleSpecifications_EarlySectionHeaders) { EXPECT_EQ(Spec.GetUUID(), Uuid); } -#define CHECK_ABS32(offset, addend) \ - ASSERT_EQ((uint32_t)addend, *(uint32_t *)(bytes + offset)) -#define CHECK_ABS64(offset, addend) \ - ASSERT_EQ((uint64_t)addend, *(uint64_t *)(bytes + offset)) +static void CHECK_ABS32(uint8_t *bytes, uint32_t offset, uint32_t addend) { + uint32_t res; + memcpy(&res, (uint32_t *)(bytes + offset), sizeof(uint32_t)); + ASSERT_EQ(addend, res); +} + +static void CHECK_ABS64(uint8_t *bytes, uint64_t offset, uint64_t addend) { + uint64_t res; + memcpy(&res, (uint64_t *)(bytes + offset), sizeof(uint64_t)); + ASSERT_EQ(addend, res); +} TEST_F(ObjectFileELFTest, TestAARCH64Relocations) { std::string yaml = GetInputFilePath("debug-info-relocations.pcm.yaml"); @@ -193,13 +200,13 @@ TEST_F(ObjectFileELFTest, TestAARCH64Relocations) { // .rela.debug_info contains 9 relocations: // 7 R_AARCH64_ABS32 - 2 R_AARCH64_ABS64 // None have a value. Four have addends. - CHECK_ABS32(0x6, 0); - CHECK_ABS32(0xC, 0); - CHECK_ABS32(0x12, 45); - CHECK_ABS32(0x16, 0); - CHECK_ABS32(0x1A, 55); - CHECK_ABS64(0x1E, 0); - CHECK_ABS64(0x2B, 0); - CHECK_ABS32(0x39, 73); - CHECK_ABS32(0x44, 75); + CHECK_ABS32(bytes, 0x6, 0); + CHECK_ABS32(bytes, 0xC, 0); + CHECK_ABS32(bytes, 0x12, 45); + CHECK_ABS32(bytes, 0x16, 0); + CHECK_ABS32(bytes, 0x1A, 55); + CHECK_ABS64(bytes, 0x1E, 0); + CHECK_ABS64(bytes, 0x2B, 0); + CHECK_ABS32(bytes, 0x39, 73); + CHECK_ABS32(bytes, 0x44, 75); } |

