From owner-freebsd-toolchain@FreeBSD.ORG Fri Dec 31 23:17:20 2010 Return-Path: Delivered-To: freebsd-toolchain@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 1233) id 57DCD1065672; Fri, 31 Dec 2010 23:17:20 +0000 (UTC) Date: Fri, 31 Dec 2010 23:17:20 +0000 From: Alexander Best To: Roman Divacky Message-ID: <20101231231720.GA10589@freebsd.org> References: <20101230002033.GA23583@freebsd.org> <20101230081445.GA99446@freebsd.org> <20101230184048.GA34628@freebsd.org> <20101230184442.GA79735@freebsd.org> <20101230184616.GA35433@freebsd.org> <20101230201848.GA92145@freebsd.org> <20101231012002.GA73736@freebsd.org> <20101231151554.GA29782@freebsd.org> <20101231180054.GA77781@freebsd.org> <20101231190838.GA85678@freebsd.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20101231190838.GA85678@freebsd.org> Cc: freebsd-toolchain@freebsd.org Subject: Re: issue with clang and CPUTYPE native X-BeenThere: freebsd-toolchain@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Maintenance of FreeBSD's integrated toolchain List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 31 Dec 2010 23:17:20 -0000 On Fri Dec 31 10, Alexander Best wrote: > On Fri Dec 31 10, Alexander Best wrote: > > On Fri Dec 31 10, Roman Divacky wrote: > > > On Fri, Dec 31, 2010 at 01:20:02AM +0000, Alexander Best wrote: > > > > On Thu Dec 30 10, Roman Divacky wrote: > > > > > On Thu, Dec 30, 2010 at 06:46:16PM +0000, Alexander Best wrote: > > > > > > On Thu Dec 30 10, Roman Divacky wrote: > > > > > > > On Thu, Dec 30, 2010 at 06:40:48PM +0000, Alexander Best wrote: > > > > > > > > On Thu Dec 30 10, Roman Divacky wrote: > > > > > > > > > On Thu, Dec 30, 2010 at 12:20:33AM +0000, Alexander Best wrote: > > > > > > > > > > On Tue Dec 28 10, Roman Divacky wrote: > > > > > > > > > > > -march=native in clang works by detecting CPU name > > > > > > > > > > > and passing it (if found) to llvm. if the CPU is not > > > > > > > > > > > detected nothing is passed. > > > > > > > > > > > > > > > > > > > > > > nocona is supported > > > > > > > > > > > > > > > > > > > > > > ie. leaving the CPUNAME empty or specifying it to "nocona" should > > > > > > > > > > > be equivalent to setting it to "native". > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > can you apply this patch: > > > > > > > > > > > > > > > > > > > > > > Index: Driver/Tools.cpp > > > > > > > > > > > =================================================================== > > > > > > > > > > > --- Driver/Tools.cpp (revision 122591) > > > > > > > > > > > +++ Driver/Tools.cpp (working copy) > > > > > > > > > > > @@ -684,6 +684,7 @@ > > > > > > > > > > > // FIXME: We should also incorporate the detected target features for use > > > > > > > > > > > // with -native. > > > > > > > > > > > std::string CPU = llvm::sys::getHostCPUName(); > > > > > > > > > > > + llvm::outs() << "detected CPU = " << CPU << "\n"; > > > > > > > > > > > if (!CPU.empty()) > > > > > > > > > > > CPUName = Args.MakeArgString(CPU); > > > > > > > > > > > } else > > > > > > > > > > > > > > > > > > > > thanks a lot for the patch. i've applied it, but am not sure how to only > > > > > > > > > > compile clang. 'make' in usr.bin/clang fails. do i have to run target > > > > > > > > > > buildworld or is there a way to only build clang? > > > > > > > > > > > > > > > > > > I would guess that cd lib/clang && make && cd ../../usr.bin/clang && make > > > > > > > > > should work, if not - full buildworld is necessary I guess > > > > > > > > > > > > > > > > thanks. that worked. this is what clang detects as my cpu: > > > > > > > > > > > > > > > > -march=native > > > > > > > > > > > > > > hm? are you sure it wrote -march=native? it should have written > > > > > > > > > > > > oh sorry. i copy&pasted the wrong line. :( > > > > > > > > > > > > detected CPU = core2 > > > > > > > > > > yes, you have core2, maybe thats why using CPU=nocona is causing you problems? > > > > > > > > CPU=nocona *isn't* causing problems. CPU=native is causing the problems. > > > > > > > > core2 is wrong imo. have a look at share/mk/bsd.cpu.mk for amd64. it sets core2 > > > > to nocona. so clang should detect nocona for CPU=native and *not* core2. > > > > > > no, your cpu is core2 so clang is correct to detect is as such. it's imho irrelevant > > > that we (freebsd mk framework) reset core2 to nocona. > > > > i'm sorry. you're of course right. looking at the manual page of a newer gcc > > release reveals that core2 is in fact the correct cpu. > > > > what i did now was to clean out my src.conf and make.conf and run buildworld > > with gcc and with clang. > > > > you can see the results in the attached file in addition to the contents of my > > src.conf and make.conf > > > > right now i'm trying to repeat the tests with cpu set to core2 and nocona. > > > > cheers. > > alex > > > > > > > > the reason for that is imho that gcc 4.2.1 does not support core2 so we "downgrade" > > > that to nocona. > > > > > > > > > > however i'll try to run buildworld again with the patched clang to completely > > > > pinpoint the problem. > > > > > > yes please, it's going to be interesting to see what is the exact problem > > i've just tried building world with CUPTYPE ?= nocona and got the same result: > gcc succeeds; clang fails. > > the error message however is not the one i was refering to earlier. the reason > i get a different error message seems to be the fact that i got rid of most of > the WITHOUT_* optins in src.conf. so there are at least two issues with clang, > where it fails in cases gcc succeeds. > > i'm doing another final buildworld with CPUTYPE ?= core2, but i suspect the > result will be the same. i think i found the problem. please take a look at the thread on freebsd-current named "userland weirdness between r216351 and r216738". Alexander Kabaev mentions a problem with rtld and this is exactly where the assert i reported gets hit. hopefully this issue will be solved soon. then i can continue looking into the other issue i experienced, where gcc compiled by clang would segfault with signal 11 during buildworld. maybe this also gets caused by the rtld issue. cheers. alex > > cheers. > alex > > > > > -- > > a13x > > > grep -v "^#" /etc/make.conf /etc/src.conf: > > > > /etc/make.conf:KERNCONF = ARUNDEL > > /etc/make.conf:MODULES_OVERRIDE = \ > > /etc/make.conf:netgraph/netgraph \ > > /etc/make.conf:netgraph/socket netgraph/bluetooth/bluetooth netgraph/bluetooth/hci \ > > /etc/make.conf:netgraph/bluetooth/l2cap netgraph/bluetooth/socket netgraph/bluetooth/ubt \ > > /etc/make.conf:linux tmpfs sound/sound sound/driver/hda usb/uhid \ > > /etc/make.conf:procfs pseudofs linprocfs linsysfs lindev usb/quirk geom > > /etc/make.conf: > > /etc/make.conf: > > /etc/make.conf:CPUTYPE ?= native > > /etc/make.conf: > > /etc/make.conf:SENDMAIL_MC = /etc/mail/freebsd.mc > > /etc/make.conf:SENDMAIL_SUBMIT_MC = /etc/mail/freebsd.submit.mc > > /etc/make.conf: > > /etc/make.conf:OVERRIDE_LINUX_BASE_PORT = f10 > > /etc/make.conf:OVERRIDE_LINUX_NONBASE_PORTS = f10 > > /etc/make.conf:DA4 = yes > > /etc/make.conf:WITH_BSDEL = yes > > /etc/make.conf:WITH_256_COLOR = yes > > /etc/make.conf: > > /etc/make.conf:PERL_VERSION=5.12.2 > > /etc/src.conf: > > /etc/src.conf:DEBUG_FLAGS = -g > > /etc/src.conf: > > /etc/src.conf:WITHOUT_PROFILE=true > > /etc/src.conf:WITHOUT_CDDL=true > > /etc/src.conf:WITHOUT_ATM=true > > > > make buildworld: > > > > ==> SUCCEEDS! > > > > grep -v "^#" /etc/make.conf /etc/src.conf: > > > > /etc/make.conf:KERNCONF = ARUNDEL > > /etc/make.conf:MODULES_OVERRIDE = \ > > /etc/make.conf:netgraph/netgraph \ > > /etc/make.conf:netgraph/socket netgraph/bluetooth/bluetooth netgraph/bluetooth/hci \ > > /etc/make.conf:netgraph/bluetooth/l2cap netgraph/bluetooth/socket netgraph/bluetooth/ubt \ > > /etc/make.conf:linux tmpfs sound/sound sound/driver/hda usb/uhid \ > > /etc/make.conf:procfs pseudofs linprocfs linsysfs lindev usb/quirk geom > > /etc/make.conf: > > /etc/make.conf: > > /etc/make.conf:CPUTYPE ?= native > > /etc/make.conf: > > /etc/make.conf:SENDMAIL_MC = /etc/mail/freebsd.mc > > /etc/make.conf:SENDMAIL_SUBMIT_MC = /etc/mail/freebsd.submit.mc > > /etc/make.conf: > > /etc/make.conf:OVERRIDE_LINUX_BASE_PORT = f10 > > /etc/make.conf:OVERRIDE_LINUX_NONBASE_PORTS = f10 > > /etc/make.conf:DA4 = yes > > /etc/make.conf:WITH_BSDEL = yes > > /etc/make.conf:WITH_256_COLOR = yes > > /etc/make.conf: > > /etc/make.conf:PERL_VERSION=5.12.2 > > /etc/src.conf:.if !defined(CC) || ${CC} == "cc" > > /etc/src.conf:CC=clang > > /etc/src.conf:.endif > > /etc/src.conf:.if !defined(CXX) || ${CXX} == "c++" > > /etc/src.conf:CXX=clang++ > > /etc/src.conf:.endif > > /etc/src.conf:NO_WERROR= > > /etc/src.conf:WERROR= > > /etc/src.conf: > > /etc/src.conf:DEBUG_FLAGS = -g > > /etc/src.conf: > > /etc/src.conf:WITHOUT_PROFILE=true > > /etc/src.conf:WITHOUT_CDDL=true > > /etc/src.conf:WITHOUT_ATM=true > > > > make buildworld: > > > > ==> FAILS! > > > > clang -O2 -pipe -march=native -fpic -fvisibility=hidden -DVISIBILITY_HIDDEN -g -std=gnu99 -fstack-protector -Wsystem-headers -Wall -Wno-format-y2k -Wno-uninitialized -Wno-pointer-sign -c /usr/subversion-src/lib/libcompiler_rt/../../contrib/compiler-rt/lib/mulvti3.c > > detected CPU = core2 > > Assertion failed: (getMinSignedBits() <= 64 && "Too many bits for int64_t"), function getSExtValue, file /usr/subversion-src/lib/clang/libclangcodegen/../../../contrib/llvm/include/llvm/ADT/APInt.h, line 1149. > > Stack dump: > > 0. Program arguments: /usr/obj/usr/subversion-src/tmp/usr/bin/clang -cc1 -triple x86_64-undermydesk-freebsd9.0 -S -disable-free -main-file-name mulvti3.c -pic-level 1 -mdisable-fp-elim -mconstructor-aliases -munwind-tables -target-cpu core2 -g -resource-dir /usr/obj/usr/subversion-src/tmp/usr/lib/clang/2.8 -D VISIBILITY_HIDDEN -O2 -Wsystem-headers -Wall -Wno-format-y2k -Wno-uninitialized -Wno-pointer-sign -std=gnu99 -ferror-limit 19 -fmessage-length 275 -fvisibility hidden -stack-protector 1 -fgnu-runtime -fdiagnostics-show-option -fcolor-diagnostics -o /tmp/cc-G6mPQL.s -x c /usr/subversion-src/lib/libcompiler_rt/../../contrib/compiler-rt/lib/mulvti3.c > > 1. parser at end of file > > 2. Code generation > > clang: error: clang frontend command failed due to signal 6 (use -v to see invocation) > > *** Error code 250 > > > > Stop in /usr/subversion-src/lib/libcompiler_rt. > > *** Error code 1 > > > > Stop in /usr/subversion-src. > > *** Error code 1 > > > > Stop in /usr/subversion-src. > > *** Error code 1 > > > > Stop in /usr/subversion-src. > > *** Error code 1 > > > > Stop in /usr/subversion-src. > > > -- > a13x -- a13x