1*99451b44SJordan Rupprecht"""
2*99451b44SJordan RupprechtTest that we can hit breakpoints in global constructors
3*99451b44SJordan Rupprecht"""
4*99451b44SJordan Rupprecht
5*99451b44SJordan Rupprecht
6*99451b44SJordan Rupprecht
7*99451b44SJordan Rupprechtimport lldb
8*99451b44SJordan Rupprechtfrom lldbsuite.test.decorators import *
9*99451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import *
10*99451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil
11*99451b44SJordan Rupprecht
12*99451b44SJordan Rupprecht
13*99451b44SJordan Rupprechtclass TestBreakpointInGlobalConstructors(TestBase):
14*99451b44SJordan Rupprecht    NO_DEBUG_INFO_TESTCASE = True
15*99451b44SJordan Rupprecht
16*99451b44SJordan Rupprecht    def test(self):
17*99451b44SJordan Rupprecht        self.build()
18*99451b44SJordan Rupprecht        self.line_foo = line_number('foo.cpp', '// !BR_foo')
19*99451b44SJordan Rupprecht        self.line_main = line_number('main.cpp', '// !BR_main')
20*99451b44SJordan Rupprecht
21*99451b44SJordan Rupprecht        target = self.dbg.CreateTarget(self.getBuildArtifact("a.out"))
22*99451b44SJordan Rupprecht        self.assertTrue(target, VALID_TARGET)
23*99451b44SJordan Rupprecht
24*99451b44SJordan Rupprecht        env= self.registerSharedLibrariesWithTarget(target, ["foo"])
25*99451b44SJordan Rupprecht
26*99451b44SJordan Rupprecht        bp_main = lldbutil.run_break_set_by_file_and_line(
27*99451b44SJordan Rupprecht            self, 'main.cpp', self.line_main)
28*99451b44SJordan Rupprecht
29*99451b44SJordan Rupprecht        bp_foo = lldbutil.run_break_set_by_file_and_line(
30*99451b44SJordan Rupprecht            self, 'foo.cpp', self.line_foo, num_expected_locations=-2)
31*99451b44SJordan Rupprecht
32*99451b44SJordan Rupprecht        process = target.LaunchSimple(
33*99451b44SJordan Rupprecht            None, env, self.get_process_working_directory())
34*99451b44SJordan Rupprecht
35*99451b44SJordan Rupprecht        self.assertIsNotNone(
36*99451b44SJordan Rupprecht            lldbutil.get_one_thread_stopped_at_breakpoint_id(
37*99451b44SJordan Rupprecht                self.process(), bp_foo))
38*99451b44SJordan Rupprecht
39*99451b44SJordan Rupprecht        self.runCmd("continue")
40*99451b44SJordan Rupprecht
41*99451b44SJordan Rupprecht        self.assertIsNotNone(
42*99451b44SJordan Rupprecht            lldbutil.get_one_thread_stopped_at_breakpoint_id(
43*99451b44SJordan Rupprecht                self.process(), bp_main))
44