From patchwork Thu Mar 3 17:01:34 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul Pluzhnikov X-Patchwork-Id: 11176 Received: (qmail 101618 invoked by alias); 3 Mar 2016 17:02:09 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 101601 invoked by uid 89); 3 Mar 2016 17:02:08 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.1 required=5.0 tests=AWL, BAYES_00, KAM_STOCKGEN, RCVD_IN_DNSWL_LOW, RP_MATCHES_RCVD, SPF_PASS autolearn=no version=3.3.2 spammy=C_LABEL, c_label, subq, c_symbol_name X-HELO: mail-wm0-f45.google.com X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=Wy1Te4bGK3CuzF9V2L/J1qVaLoztD7Czw0WT0+kBWhU=; b=XR5GNZJsejeBO9cCt01WZHcXMFgrpSUv8FjGT68hturkGZ5Zzjw36zEko8cgxL3xib 0ytpFF0kdkd8pdGGmKRADUvAVFpzFp7EZBS0DaCWq1JdAgWCWGwbQIPF4fuHLyAAmABK vaPX3Nkda6tgMBXXXs3M+I/ctDaR+JIkyACbc7OMcHrKI9UIKeUM5UTfiODEN8VCQLEc uNa90vJKBeYmfWkFrTnRsVAybdKS2VIlayHaTd/1rYR5XV0708+MvdumFp9+nlKTpd2w Q+3Z20L5xgjoErBeDzl9Fi/uTdfQ5dRZyWLkBGAArvX+AtYCJ8hn5Ag08D6IBp1e+rid 9WZw== X-Gm-Message-State: AD7BkJLoGYH3MA+oF/GzOWR+19BGnr94N52i56Tc36LOoskb2+ElIfaYuBAzgNJo/wyRaoToQG9WuwtwIpSx4dzH X-Received: by 10.28.141.10 with SMTP id p10mr78115wmd.83.1457024524439; Thu, 03 Mar 2016 09:02:04 -0800 (PST) MIME-Version: 1.0 In-Reply-To: References: <20160222091457.GJ19841@vapier.lan> <20160226034043.GM19841@vapier.lan> From: Paul Pluzhnikov Date: Thu, 3 Mar 2016 09:01:34 -0800 Message-ID: Subject: Re: [PATCH][BZ #19490] Add unwind descriptors for x86_64 _mcount and __fentry__ To: Andreas Schwab Cc: "H.J. Lu" , GLIBC Devel On Thu, Mar 3, 2016 at 12:30 AM, Andreas Schwab wrote: > Paul Pluzhnikov writes: > >> Using CALL_MCOUNT in implementation of _mcount isn't going to end well. > > _mcount needs to be arranged to be compiled without PROF, like the > noprof routines in gmon/Makefile. Done by HJ in commit 87a07a437656aede6f303688b55ae1834962bee2. Updated patch attached. Tested on Linux/x86_64. Thanks, 2016-03-03 Paul Pluzhnikov [BZ #19490] * sysdeps/x86_64/_mcount.S (_mcount): Add unwind descriptor. (__fentry__): Likewise diff --git a/sysdeps/x86_64/_mcount.S b/sysdeps/x86_64/_mcount.S index ba13643..69c4b84 100644 --- a/sysdeps/x86_64/_mcount.S +++ b/sysdeps/x86_64/_mcount.S @@ -24,19 +24,24 @@ #include - .globl C_SYMBOL_NAME(_mcount) - .type C_SYMBOL_NAME(_mcount), @function - .align ALIGNARG(4) -C_LABEL(_mcount) +ENTRY(_mcount) /* Allocate space for 7 registers. */ subq $56,%rsp + cfi_adjust_cfa_offset (56) movq %rax,(%rsp) + cfi_rel_offset (rax, 0) movq %rcx,8(%rsp) + cfi_rel_offset (rcx, 8) movq %rdx,16(%rsp) + cfi_rel_offset (rdx, 16) movq %rsi,24(%rsp) + cfi_rel_offset (rsi, 24) movq %rdi,32(%rsp) + cfi_rel_offset (rdi, 32) movq %r8,40(%rsp) + cfi_rel_offset (r8, 40) movq %r9,48(%rsp) + cfi_rel_offset (r9, 48) /* Setup parameter for __mcount_internal. */ /* selfpc is the return address on the stack. */ @@ -47,33 +52,46 @@ C_LABEL(_mcount) /* Pop the saved registers. Please note that `mcount' has no return value. */ movq 48(%rsp),%r9 + cfi_restore (r9) movq 40(%rsp),%r8 + cfi_restore (r8) movq 32(%rsp),%rdi + cfi_restore (rdi) movq 24(%rsp),%rsi + cfi_restore (rsi) movq 16(%rsp),%rdx + cfi_restore (rdx) movq 8(%rsp),%rcx + cfi_restore (rcx) movq (%rsp),%rax + cfi_restore (rax) addq $56,%rsp + cfi_adjust_cfa_offset (-56) ret - - ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(_mcount)) +END(_mcount) #undef mcount weak_alias (_mcount, mcount) - .globl C_SYMBOL_NAME(__fentry__) - .type C_SYMBOL_NAME(__fentry__), @function - .align ALIGNARG(4) -C_LABEL(__fentry__) - /* Allocate space for 7 registers. */ +ENTRY(__fentry__) + /* Allocate space for 7 registers + (+8 bytes for proper stack alignment). */ subq $64,%rsp + cfi_adjust_cfa_offset (64) movq %rax,(%rsp) + cfi_rel_offset (rax, 0) movq %rcx,8(%rsp) + cfi_rel_offset (rcx, 8) movq %rdx,16(%rsp) + cfi_rel_offset (rdx, 16) movq %rsi,24(%rsp) + cfi_rel_offset (rsi, 24) movq %rdi,32(%rsp) + cfi_rel_offset (rdi, 32) movq %r8,40(%rsp) + cfi_rel_offset (r8, 40) movq %r9,48(%rsp) + cfi_rel_offset (r9, 48) /* Setup parameter for __mcount_internal. */ /* selfpc is the return address on the stack. */ @@ -84,13 +102,20 @@ C_LABEL(__fentry__) /* Pop the saved registers. Please note that `__fentry__' has no return value. */ movq 48(%rsp),%r9 + cfi_restore (r9) movq 40(%rsp),%r8 + cfi_restore (r8) movq 32(%rsp),%rdi + cfi_restore (rdi) movq 24(%rsp),%rsi + cfi_restore (rsi) movq 16(%rsp),%rdx + cfi_restore (rdx) movq 8(%rsp),%rcx + cfi_restore (rcx) movq (%rsp),%rax + cfi_restore (rax) addq $64,%rsp + cfi_adjust_cfa_offset (-64) ret - - ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(__fentry__)) +END(__fentry__)