From a274452924e5edf7a3e95c3ab4927c70c29b510c Mon Sep 17 00:00:00 2001 From: Pavel Labath Date: Thu, 19 Jul 2018 14:38:30 +0000 Subject: [PATCH] ELF: Replace the header-extension unit test with a lit one The new test checks that we are actually able to read data from these kinds of elf headers correctly instead of just that we read the section number correctly. It is also easier to figure out what's going on in the test. llvm-svn: 337459 --- lldb/lit/Modules/elf-many-sections.s | 72 +++++++++++++++++++++++++ lldb/lit/Modules/lit.local.cfg | 2 +- lldb/unittests/ObjectFile/ELF/CMakeLists.txt | 1 - lldb/unittests/ObjectFile/ELF/TestELFHeader.cpp | 62 --------------------- 4 files changed, 73 insertions(+), 64 deletions(-) create mode 100644 lldb/lit/Modules/elf-many-sections.s delete mode 100644 lldb/unittests/ObjectFile/ELF/TestELFHeader.cpp diff --git a/lldb/lit/Modules/elf-many-sections.s b/lldb/lit/Modules/elf-many-sections.s new file mode 100644 index 0000000..a5e4aee --- /dev/null +++ b/lldb/lit/Modules/elf-many-sections.s @@ -0,0 +1,72 @@ +# REQUIRES: x86 +# RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux %s -o %t +# RUN: lldb-test object-file %t | FileCheck %s + +## Check that we are able to parse ELF files with more than SHN_LORESERVE +## sections. This generates a file that contains 64k sections from +## aaaaaaaa..dddddddd, plus a couple of standard ones (.strtab, etc.) +## Check the number is correct plus the names of a couple of chosen sections. + +# CHECK: Showing 65541 sections +# CHECK: Name: aaaaaaaa +# CHECK: Name: bbbbbbbb +# CHECK: Name: cccccccc +# CHECK: Name: abcdabcd +# CHECK: Name: dddddddd + +.macro gen_sections4 x + .section a\x + .section b\x + .section c\x + .section d\x +.endm + +.macro gen_sections16 x + gen_sections4 a\x + gen_sections4 b\x + gen_sections4 c\x + gen_sections4 d\x +.endm + +.macro gen_sections64 x + gen_sections16 a\x + gen_sections16 b\x + gen_sections16 c\x + gen_sections16 d\x +.endm + +.macro gen_sections256 x + gen_sections64 a\x + gen_sections64 b\x + gen_sections64 c\x + gen_sections64 d\x +.endm + +.macro gen_sections1024 x + gen_sections256 a\x + gen_sections256 b\x + gen_sections256 c\x + gen_sections256 d\x +.endm + +.macro gen_sections4096 x + gen_sections1024 a\x + gen_sections1024 b\x + gen_sections1024 c\x + gen_sections1024 d\x +.endm + +.macro gen_sections16384 x + gen_sections4096 a\x + gen_sections4096 b\x + gen_sections4096 c\x + gen_sections4096 d\x +.endm + +gen_sections16384 a +gen_sections16384 b +gen_sections16384 c +gen_sections16384 d + +.global _start +_start: diff --git a/lldb/lit/Modules/lit.local.cfg b/lldb/lit/Modules/lit.local.cfg index 8169b9f..71a6605 100644 --- a/lldb/lit/Modules/lit.local.cfg +++ b/lldb/lit/Modules/lit.local.cfg @@ -1 +1 @@ -config.suffixes = ['.yaml'] +config.suffixes = ['.s', '.yaml'] diff --git a/lldb/unittests/ObjectFile/ELF/CMakeLists.txt b/lldb/unittests/ObjectFile/ELF/CMakeLists.txt index 3d53f54..cfdacdc 100644 --- a/lldb/unittests/ObjectFile/ELF/CMakeLists.txt +++ b/lldb/unittests/ObjectFile/ELF/CMakeLists.txt @@ -1,5 +1,4 @@ add_lldb_unittest(ObjectFileELFTests - TestELFHeader.cpp TestObjectFileELF.cpp LINK_LIBS diff --git a/lldb/unittests/ObjectFile/ELF/TestELFHeader.cpp b/lldb/unittests/ObjectFile/ELF/TestELFHeader.cpp deleted file mode 100644 index 979011f..0000000 --- a/lldb/unittests/ObjectFile/ELF/TestELFHeader.cpp +++ /dev/null @@ -1,62 +0,0 @@ -//===-- TestELFHeader.cpp ---------------------------------------*- C++ -*-===// -// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include "Plugins/ObjectFile/ELF/ELFHeader.h" -#include "lldb/Utility/DataExtractor.h" -#include "gtest/gtest.h" - -using namespace lldb; -using namespace lldb_private; - - -TEST(ELFHeader, ParseHeaderExtension) { - uint8_t data[] = { - // e_ident - 0x7f, 0x45, 0x4c, 0x46, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - - // e_type, e_machine, e_version, e_entry - 0x03, 0x00, 0x3e, 0x00, 0x01, 0x00, 0x00, 0x00, 0x90, 0x48, 0x40, 0x00, - 0x00, 0x00, 0x00, 0x00, - - // e_phoff, e_shoff - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - - // e_flags, e_ehsize, e_phentsize, e_phnum, e_shentsize, e_shnum, - // e_shstrndx - 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x38, 0x00, 0xff, 0xff, 0x40, 0x00, - 0x00, 0x00, 0xff, 0xff, - - // sh_name, sh_type, sh_flags - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - - // sh_addr, sh_offset - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - - // sh_size, sh_link, sh_info - 0x23, 0x45, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x56, 0x78, 0x00, - 0x12, 0x34, 0x56, 0x00, - - // sh_addralign, sh_entsize - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }; - - DataExtractor extractor(data, sizeof data, eByteOrderLittle, 8); - elf::ELFHeader header; - offset_t offset = 0; - ASSERT_TRUE(header.Parse(extractor, &offset)); - EXPECT_EQ(0x563412u, header.e_phnum); - EXPECT_EQ(0x785634u, header.e_shstrndx); - EXPECT_EQ(0x674523u, header.e_shnum); -} -- 2.7.4