From 954eae0ed45d830826c846766c41f82d4493a21e Mon Sep 17 00:00:00 2001 From: Shawn Best Date: Fri, 14 Nov 2014 19:41:33 +0000 Subject: [PATCH] add Makefile rule for test program CREATE_STD_THREADS Effectively removes -lpthreads from linux/gcc build of test programs in test/api/multithreaded. This was done due to that combination causing a test program to hang due, likely due to an issue with gcc linker and libstdc++ conflicting pthreads code in test program and pthread used by lldb. Issue has been documented at: http://llvm.org/bugs/show_bug.cgi?id=21553 Differential Revision: http://reviews.llvm.org/D5838 llvm-svn: 222031 --- lldb/test/api/multithreaded/Makefile | 2 +- lldb/test/make/Makefile.rules | 20 +++++++++++++++++--- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/lldb/test/api/multithreaded/Makefile b/lldb/test/api/multithreaded/Makefile index 09374d3669adc..8b2b6cf23ba72 100644 --- a/lldb/test/api/multithreaded/Makefile +++ b/lldb/test/api/multithreaded/Makefile @@ -1,6 +1,6 @@ LEVEL = ../../make -ENABLE_THREADS := YES +ENABLE_STD_THREADS := YES CXX_SOURCES := main.cpp include $(LEVEL)/Makefile.rules diff --git a/lldb/test/make/Makefile.rules b/lldb/test/make/Makefile.rules index 87c291e4623e2..2b73d441df731 100644 --- a/lldb/test/make/Makefile.rules +++ b/lldb/test/make/Makefile.rules @@ -120,9 +120,23 @@ LD = $(CC) LDFLAGS ?= $(CFLAGS) LDFLAGS += $(LD_EXTRAS) ifneq "$(OS)" "Windows_NT" - ifeq "$(ENABLE_THREADS)" "YES" - LDFLAGS += -lpthread - endif + ifeq "$(ENABLE_THREADS)" "YES" + LDFLAGS += -lpthread + else + ifeq "$(ENABLE_STD_THREADS)" "YES" + # with the specific combination of Linux, g++, std=c++11, adding the + # linker flag -lpthread, will cause a program to hang when a std::conditional_variable + # is used in a program that links lldb (see bugzilla 21553) + ifeq "$(OS)" "Linux" + ifeq (,$(findstring gcc,$(CC))) + # Linux, but not gcc + LDFLAGS += -lpthread + endif + else + LDFLAGS += -lpthread + endif + endif + endif endif OBJECTS = EXE ?= a.out