From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22755 invoked by alias); 23 Nov 2012 07:28:55 -0000 Received: (qmail 22554 invoked by uid 48); 23 Nov 2012 07:27:30 -0000 From: "dvyukov at google dot com" To: gcc-bugs@gcc.gnu.org Subject: [Bug sanitizer/55354] [asan] by default, the asan run-time should be linked statically, not dynamically Date: Fri, 23 Nov 2012 07:28:00 -0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: sanitizer X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: dvyukov at google dot com X-Bugzilla-Status: RESOLVED X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Changed-Fields: Message-ID: In-Reply-To: References: X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated Content-Type: text/plain; charset="UTF-8" MIME-Version: 1.0 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2012-11/txt/msg02168.txt.bz2 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55354 --- Comment #23 from Dmitry Vyukov 2012-11-23 07:27:27 UTC --- (In reply to comment #21) > (In reply to comment #20) > > What I see is that it also affect code generation (register allocation). Do we > > need to file a bug on that? > > If you see a code generation difference even with -ftls-model=local-exec -fPIC > vs. -fPIE, then it must mean you don't have visibility attributes on the > symbols used in the fast path. For initial-exec, the RA effects should be > minimal, the TLS offset load from got is usually very close to the actual TLS > memory load (or lea), and thus it will just pick up some short lived scratch > register. Generally in GCC, -fPIE sets flag_pic and not flag_shlib, while > -fPIC sets flag_pic and flag_shlib. flag_pic is about whether position > independent code needs to be generated, flag_shlib is about whether locally > defined symbols can be interposed (plus it affects TLS model default choice). When I compile with -fvisibility=hidden, it does not affect generated code. It's not that we access a lot of symbols in the function, there is one thread-local and one static global var. That "minimal" RA effects do have effect in our case. We don't have a reserve to squeeze another register for tls access: // -fPIE 000000000009ca30 <__tsan_write2>: 9ca30: 64 48 8b 04 25 40 1f mov %fs:0xffffffffffeb1f40,%rax 9ca37: eb ff 9ca39: 48 8b 0c 24 mov (%rsp),%rcx 9ca3d: a8 01 test $0x1,%al 9ca3f: 0f 85 d3 00 00 00 jne 9cb18 <__tsan_write2+0xe8> 9ca45: 48 83 e8 80 sub $0xffffffffffffff80,%rax 9ca49: 48 89 fe mov %rdi,%rsi 9ca4c: 48 89 c2 mov %rax,%rdx 9ca4f: 64 48 89 04 25 40 1f mov %rax,%fs:0xffffffffffeb1f40 9ca56: eb ff // -fPIC -ftls-model=initial-exec 00000000000969f0 <__tsan_write2>: 969f0: 48 c7 c2 40 1f eb ff mov $0xffffffffffeb1f40,%rdx 969f7: 53 push %rbx 969f8: 48 8b 4c 24 08 mov 0x8(%rsp),%rcx 969fd: 64 48 8b 02 mov %fs:(%rdx),%rax 96a01: a8 01 test $0x1,%al 96a03: 0f 85 c7 00 00 00 jne 96ad0 <__tsan_write2+0xe0>