From patchwork Mon Dec 19 22:28:44 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Cadhalpun X-Patchwork-Id: 1863 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.65.86 with SMTP id o83csp1381175vsa; Mon, 19 Dec 2016 14:35:45 -0800 (PST) X-Received: by 10.194.141.239 with SMTP id rr15mr15002752wjb.144.1482186945563; Mon, 19 Dec 2016 14:35:45 -0800 (PST) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id oy7si20066375wjb.129.2016.12.19.14.35.45; Mon, 19 Dec 2016 14:35:45 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@googlemail.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=QUARANTINE dis=NONE) header.from=googlemail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6651168A05D; Tue, 20 Dec 2016 00:35:35 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wj0-f193.google.com (mail-wj0-f193.google.com [209.85.210.193]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6F95B689CE3 for ; Tue, 20 Dec 2016 00:35:28 +0200 (EET) Received: by mail-wj0-f193.google.com with SMTP id j10so25445440wjb.3 for ; Mon, 19 Dec 2016 14:35:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=20161025; h=from:subject:to:references:message-id:date:user-agent:mime-version :in-reply-to; bh=VxvMUYxhwKeLAWSUGoqCAQr6I69+dNuqZFvBp47fSCY=; b=dgkNG/uJser/SttvHRYNtTI7LOwYoZEvVQdkDR7dTZx9WKPSBntWQ4EQ6hwDb9/4En QfDkOcN5YSSReXHQ6YT9ywZoh4YgAfNfGlqmUW3wVSf8BuobD+GJGdW6ln5cQ4pRKJO1 FxoiCDWvQohubNZ2BJ9baPVKkj3ZDAu8JHWfX82YW9s8s9OmVnfMLswEZ6fHKXvLuXq1 auTquwdGW+dvLyRNLaxSQik/ZY5ix97A5skJu5ak9DvYdbXSJRU1YnF2Bn6vBreGtTRT d2zZ4s1r36HVhOrjSEneittSrIWqDYnL2fDOvNUxKUZNYwIkJT461Leed/SyovxRqfAP 5m9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:subject:to:references:message-id:date :user-agent:mime-version:in-reply-to; bh=VxvMUYxhwKeLAWSUGoqCAQr6I69+dNuqZFvBp47fSCY=; b=tDXFS/5WZFY1grdsY66OV6c6eGU+XFxD+bx+99cgioGdPB01H3wqYA9tDQ+ttbv0RG vY9EyoIPWizTa5N9h6BEpvGq3HhQGNfBf8TELHSq/ydQk0A+B5JVCME8QJhOR49Uc0d5 LJhBUWSQL5KpGh+xw3l3kFQPeyh8OU+BaSBnHVfEsZVohfXgjcoSMSQIqrdBX1ohaZtT T22LhwXw6ZouHPw6adCCMcZkjWuz/3gKHdhnRqc2O1k/D0JprY3R/4vB1qLRmM6ZD1oc pDVHAhueVtUAHP9TcfbtqNNvyCwVEFvjpi2UT3JS03WG+bLhHyLZUGqmmMXES77Amt36 UOxw== X-Gm-Message-State: AKaTC03cXPxf2mT6HGpsSTo//YpA6gkAhmAd3ypJsWTNJHxnstXekKDpjsBLF6xiZIsFPQ== X-Received: by 10.194.125.114 with SMTP id mp18mr15058637wjb.106.1482186526548; Mon, 19 Dec 2016 14:28:46 -0800 (PST) Received: from [192.168.2.21] (pD9E8E889.dip0.t-ipconnect.de. [217.232.232.137]) by smtp.googlemail.com with ESMTPSA id r7sm22576892wjp.43.2016.12.19.14.28.45 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 19 Dec 2016 14:28:46 -0800 (PST) From: Andreas Cadhalpun X-Google-Original-From: Andreas Cadhalpun To: ffmpeg-devel@ffmpeg.org References: <1d169ce9-caa2-3a6a-3f5b-7d2b77d5b513@googlemail.com> <20161216030828.GJ4749@nb4> Message-ID: <10c7e655-9da9-aa4c-fa59-6ed79b9750f6@googlemail.com> Date: Mon, 19 Dec 2016 23:28:44 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Icedove/45.4.0 MIME-Version: 1.0 In-Reply-To: <20161216030828.GJ4749@nb4> Subject: Re: [FFmpeg-devel] [PATCH] swscale: also save ebx register when using PIE X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" On 16.12.2016 04:08, Michael Niedermayer wrote: > On Fri, Dec 16, 2016 at 02:36:53AM +0100, Andreas Cadhalpun wrote: >> Otherwise the build fails when configuring with --toolchain=hardened >> --disable-pic on i386 using gcc 4.8: >> error: PIC register clobbered by '%ebx' in 'asm' >> >> Signed-off-by: Andreas Cadhalpun >> --- >> libswscale/x86/hscale_fast_bilinear_simd.c | 20 ++++++++++---------- >> 1 file changed, 10 insertions(+), 10 deletions(-) >> >> diff --git a/libswscale/x86/hscale_fast_bilinear_simd.c b/libswscale/x86/hscale_fast_bilinear_simd.c >> index 2cba5f0..3f0f5f5 100644 >> --- a/libswscale/x86/hscale_fast_bilinear_simd.c >> +++ b/libswscale/x86/hscale_fast_bilinear_simd.c >> @@ -199,7 +199,7 @@ void ff_hyscale_fast_mmxext(SwsContext *c, int16_t *dst, >> #if ARCH_X86_64 >> uint64_t retsave; >> #else >> -#if defined(PIC) >> +#if defined(PIC) || defined(__PIE__) > > please correct me if iam wrong > our configure adds -DPIC to define PIC when its enabled, > it does not add that in this case but gcc is still generating PIC code > that doesnt seem good gcc does not generate PIC, only PIE, which is subtly different. What's wrong here is that this code in swscale tries to determine, whether or not the ebx register can be used for asm, but doesn't check that correctly. However, configure has a working check for that, the result of which can be used here. Patch doing that is attached. Best regards, Andreas From 7b5d0714482a0ec42d317fa1e9fa095180e39ccd Mon Sep 17 00:00:00 2001 From: Andreas Cadhalpun Date: Fri, 16 Dec 2016 02:29:56 +0100 Subject: [PATCH] swscale: save ebx register when it is not available Configure checks if the ebx register can be used for asm and it has to be saved if and only if this is not the case. Without this the build fails when configuring with --toolchain=hardened --disable-pic on i386 using gcc 4.8: error: PIC register clobbered by '%ebx' in 'asm' In that case gcc 4.8 reserves the ebx register for the GOT needed for PIE, so it can't be used in asm directly. Signed-off-by: Andreas Cadhalpun --- libswscale/x86/hscale_fast_bilinear_simd.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/libswscale/x86/hscale_fast_bilinear_simd.c b/libswscale/x86/hscale_fast_bilinear_simd.c index 2cba5f0a1c..60a2cbfc50 100644 --- a/libswscale/x86/hscale_fast_bilinear_simd.c +++ b/libswscale/x86/hscale_fast_bilinear_simd.c @@ -199,7 +199,7 @@ void ff_hyscale_fast_mmxext(SwsContext *c, int16_t *dst, #if ARCH_X86_64 uint64_t retsave; #else -#if defined(PIC) +#if !HAVE_EBX_AVAILABLE uint64_t ebxsave; #endif #endif @@ -209,7 +209,7 @@ void ff_hyscale_fast_mmxext(SwsContext *c, int16_t *dst, "mov -8(%%rsp), %%"FF_REG_a" \n\t" "mov %%"FF_REG_a", %5 \n\t" // retsave #else -#if defined(PIC) +#if !HAVE_EBX_AVAILABLE "mov %%"FF_REG_b", %5 \n\t" // ebxsave #endif #endif @@ -255,7 +255,7 @@ void ff_hyscale_fast_mmxext(SwsContext *c, int16_t *dst, "mov %5, %%"FF_REG_a" \n\t" "mov %%"FF_REG_a", -8(%%rsp) \n\t" #else -#if defined(PIC) +#if !HAVE_EBX_AVAILABLE "mov %5, %%"FF_REG_b" \n\t" #endif #endif @@ -264,12 +264,12 @@ void ff_hyscale_fast_mmxext(SwsContext *c, int16_t *dst, #if ARCH_X86_64 ,"m"(retsave) #else -#if defined(PIC) +#if !HAVE_EBX_AVAILABLE ,"m" (ebxsave) #endif #endif : "%"FF_REG_a, "%"FF_REG_c, "%"FF_REG_d, "%"FF_REG_S, "%"FF_REG_D -#if ARCH_X86_64 || !defined(PIC) +#if ARCH_X86_64 || HAVE_EBX_AVAILABLE ,"%"FF_REG_b #endif ); @@ -289,7 +289,7 @@ void ff_hcscale_fast_mmxext(SwsContext *c, int16_t *dst1, int16_t *dst2, #if ARCH_X86_64 DECLARE_ALIGNED(8, uint64_t, retsave); #else -#if defined(PIC) +#if !HAVE_EBX_AVAILABLE DECLARE_ALIGNED(8, uint64_t, ebxsave); #endif #endif @@ -298,7 +298,7 @@ void ff_hcscale_fast_mmxext(SwsContext *c, int16_t *dst1, int16_t *dst2, "mov -8(%%rsp), %%"FF_REG_a" \n\t" "mov %%"FF_REG_a", %7 \n\t" // retsave #else -#if defined(PIC) +#if !HAVE_EBX_AVAILABLE "mov %%"FF_REG_b", %7 \n\t" // ebxsave #endif #endif @@ -332,7 +332,7 @@ void ff_hcscale_fast_mmxext(SwsContext *c, int16_t *dst1, int16_t *dst2, "mov %7, %%"FF_REG_a" \n\t" "mov %%"FF_REG_a", -8(%%rsp) \n\t" #else -#if defined(PIC) +#if !HAVE_EBX_AVAILABLE "mov %7, %%"FF_REG_b" \n\t" #endif #endif @@ -341,12 +341,12 @@ void ff_hcscale_fast_mmxext(SwsContext *c, int16_t *dst1, int16_t *dst2, #if ARCH_X86_64 ,"m"(retsave) #else -#if defined(PIC) +#if !HAVE_EBX_AVAILABLE ,"m" (ebxsave) #endif #endif : "%"FF_REG_a, "%"FF_REG_c, "%"FF_REG_d, "%"FF_REG_S, "%"FF_REG_D -#if ARCH_X86_64 || !defined(PIC) +#if ARCH_X86_64 || HAVE_EBX_AVAILABLE ,"%"FF_REG_b #endif ); -- 2.11.0