Imported Upstream version 6.10.0.49

Former-commit-id: 1d6753294b2993e1fbf92de9366bb9544db4189b
This commit is contained in:
Xamarin Public Jenkins (auto-signing)
2020-01-16 16:38:04 +00:00
parent d94e79959b
commit 468663ddbb
48518 changed files with 2789335 additions and 61176 deletions

View File

@ -0,0 +1,18 @@
LEVEL = ../../make
C_SOURCES := main.c
ifeq "$(OS)" ""
OS = $(shell uname -s)
endif
ifeq "$(OS)" "Darwin"
LDFLAGS = $(CFLAGS) -Xlinker -dead_strip
else
CFLAGS += -fdata-sections -ffunction-sections
LDFLAGS = $(CFLAGS) -Wl,--gc-sections
endif
MAKE_DSYM := NO
include $(LEVEL)/Makefile.rules

View File

@ -0,0 +1,68 @@
"""
Test that breakpoint works correctly in the presence of dead-code stripping.
"""
from __future__ import print_function
import os
import time
import lldb
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil
class DeadStripTestCase(TestBase):
mydir = TestBase.compute_mydir(__file__)
@expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24778")
@expectedFailureAll(debug_info="dwo", bugnumber="llvm.org/pr25087")
@expectedFailureAll(
oslist=["linux"],
debug_info="gmodules",
bugnumber="llvm.org/pr27865")
# The -dead_strip linker option isn't supported on FreeBSD versions of ld.
@skipIfFreeBSD
def test(self):
"""Test breakpoint works correctly with dead-code stripping."""
self.build()
exe = os.path.join(os.getcwd(), "a.out")
self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET)
# Break by function name f1 (live code).
lldbutil.run_break_set_by_symbol(
self, "f1", num_expected_locations=1, module_name="a.out")
# Break by function name f2 (dead code).
lldbutil.run_break_set_by_symbol(
self, "f2", num_expected_locations=0, module_name="a.out")
# Break by function name f3 (live code).
lldbutil.run_break_set_by_symbol(
self, "f3", num_expected_locations=1, module_name="a.out")
self.runCmd("run", RUN_SUCCEEDED)
# The stop reason of the thread should be breakpoint (breakpoint #1).
self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT,
substrs=['stopped',
'a.out`f1',
'stop reason = breakpoint'])
# The breakpoint should have a hit count of 1.
self.expect("breakpoint list -f 1", BREAKPOINT_HIT_ONCE,
substrs=[' resolved, hit count = 1'])
self.runCmd("continue")
# The stop reason of the thread should be breakpoint (breakpoint #3).
self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT,
substrs=['stopped',
'a.out`f3',
'stop reason = breakpoint'])
# The breakpoint should have a hit count of 1.
self.expect("breakpoint list -f 3", BREAKPOINT_HIT_ONCE,
substrs=[' resolved, hit count = 1'])

View File

@ -0,0 +1,4 @@
b main.c:21
b main.c:41
lines -shlib a.out main.c
c

View File

@ -0,0 +1,53 @@
//===-- main.c --------------------------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#include <stdio.h>
int f1 (char *s);
int f2 (char *s);
int f3 (char *s);
// We want f1 to start on line 20
int f1 (char *s)
{
return printf("f1: %s\n", s);
}
// We want f2 to start on line 30, this should get stripped
int f2 (char *s)
{
return printf("f2: %s\n", s);
}
// We want f3 to start on line 40
int f3 (char *s)
{
return printf("f3: %s\n", s);
}
// We want main to start on line 50
int main (int argc, const char * argv[])
{
f1("carp");
f3("dong");
return 0;
}