diff options
author | Pavel Labath <labath@google.com> | 2018-04-30 13:23:47 +0000 |
---|---|---|
committer | Pavel Labath <labath@google.com> | 2018-04-30 13:23:47 +0000 |
commit | edb012762914c36314aa96a4635570340131bda8 (patch) | |
tree | 71faf7ffe9b4147bb6a4e2d8aa6ecbc9d2928ab1 /lldb/packages/Python | |
parent | 410c5acf27167e482d5cdb83adeda3ea4714426d (diff) | |
download | bcm5719-llvm-edb012762914c36314aa96a4635570340131bda8.tar.gz bcm5719-llvm-edb012762914c36314aa96a4635570340131bda8.zip |
ObjectFileELF: Add support for arbitrarily named code sections
ObjectFileELF assumes that code section has ".text" name. There is an
exception for kalimba toolchain that can use arbitrary names, but other
toolchains also could use arbitrary names for code sections. For
example, corert uses separate section for compiled managed code. As lldb
doesn't recognize such section it leads to problem with breakpoints on
arm, because debugger cannot determine instruction set (arm/thumb) and
uses incorrect breakpoint opcode that breaks program execution.
This change allows debugger to correctly handle such code sections. We
assume that section is a code section if it has SHF_EXECINSTR flag set
and has SHT_PROGBITS type.
Patch by Konstantin Baladurin <k.baladurin@partner.samsung.com>.
Differential Revision: https://reviews.llvm.org/D44998
llvm-svn: 331173
Diffstat (limited to 'lldb/packages/Python')
3 files changed, 49 insertions, 0 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/arm/breakpoint-thumb-codesection/Makefile b/lldb/packages/Python/lldbsuite/test/arm/breakpoint-thumb-codesection/Makefile new file mode 100644 index 00000000000..ea79c55cd4a --- /dev/null +++ b/lldb/packages/Python/lldbsuite/test/arm/breakpoint-thumb-codesection/Makefile @@ -0,0 +1,6 @@ +LEVEL = ../../make + +C_SOURCES := main.c +CFLAGS_EXTRAS = -mthumb + +include $(LEVEL)/Makefile.rules
\ No newline at end of file diff --git a/lldb/packages/Python/lldbsuite/test/arm/breakpoint-thumb-codesection/TestBreakpointThumbCodesection.py b/lldb/packages/Python/lldbsuite/test/arm/breakpoint-thumb-codesection/TestBreakpointThumbCodesection.py new file mode 100644 index 00000000000..f020a653852 --- /dev/null +++ b/lldb/packages/Python/lldbsuite/test/arm/breakpoint-thumb-codesection/TestBreakpointThumbCodesection.py @@ -0,0 +1,35 @@ +""" +Test that breakpoints correctly work in an thumb function in an arbitrary +named codesection. +""" +from __future__ import print_function + + +import lldb +import os +import time +from lldbsuite.test.decorators import * +from lldbsuite.test.lldbtest import * +from lldbsuite.test import lldbutil + + +class TestBreakpointThumbCodesection(TestBase): + + mydir = TestBase.compute_mydir(__file__) + + @skipIf(archs=no_match(["arm"])) + def test_breakpoint(self): + self.build() + exe = self.getBuildArtifact("a.out") + line = line_number('main.c', '// Set break point at this line.') + + self.runCmd("target create %s" % exe) + bpid = lldbutil.run_break_set_by_file_and_line(self, "main.c", line) + + self.runCmd("run") + + self.assertIsNotNone(lldbutil.get_one_thread_stopped_at_breakpoint_id( + self.process(), bpid), "Process is not stopped at breakpoint") + + self.process().Continue() + self.assertEqual(self.process().GetState(), lldb.eStateExited, PROCESS_EXITED) diff --git a/lldb/packages/Python/lldbsuite/test/arm/breakpoint-thumb-codesection/main.c b/lldb/packages/Python/lldbsuite/test/arm/breakpoint-thumb-codesection/main.c new file mode 100644 index 00000000000..38ea7be6bfc --- /dev/null +++ b/lldb/packages/Python/lldbsuite/test/arm/breakpoint-thumb-codesection/main.c @@ -0,0 +1,8 @@ +__attribute__((section("__codesection"))) +int f(int a) { + return a + 1; // Set break point at this line. +} + +int main() { + return f(10); +} |