From patchwork Fri Aug 10 14:33:33 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Hubicka X-Patchwork-Id: 956268 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=gcc.gnu.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=gcc-patches-return-483507-incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=ucw.cz Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="RhEELfjf"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 41n70b6fqsz9s4Z for ; Sat, 11 Aug 2018 00:33:50 +1000 (AEST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:date :from:to:subject:message-id:mime-version:content-type; q=dns; s= default; b=Cz0g85AxR6B5ahf/WPUQFq7i9irUKZlnAkaqJxFUzjkhgeUuby0U7 VT9AwowqibjKG/Y7huWQLKHkDUTlKBbU5WfcHmV0uSD7W8K13Po18sSxkSehOf21 7M8cNmJ60uzLBxLsPB8CHX//R15o2/8+1PX23C1i55W5BbVIaQ2mFQ= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:date :from:to:subject:message-id:mime-version:content-type; s= default; bh=XuSMVh+twmT9AJvnex8tpZJeDe4=; b=RhEELfjflDmkxkAAyvCT FTtLGAAQ/6n9fyYL/ukGPDOSJh6F57KY7Q8I5IhLvJiBZiokJm7IcuJag+v3pdQR 963I5DuD6K7ofl+ijOw70z344EVjswSeNDzsfvZYE4+Eb92KfoJJP7UsVOSJIJvu TAZ9vLJIvg6JZ0I9kms+afo= Received: (qmail 53424 invoked by alias); 10 Aug 2018 14:33:41 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 52725 invoked by uid 89); 10 Aug 2018 14:33:40 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-14.2 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_ASCII_DIVIDERS, KAM_LAZY_DOMAIN_SECURITY autolearn=ham version=3.3.2 spammy=263356, lto1 X-HELO: nikam.ms.mff.cuni.cz Received: from nikam.ms.mff.cuni.cz (HELO nikam.ms.mff.cuni.cz) (195.113.20.16) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 10 Aug 2018 14:33:36 +0000 Received: by nikam.ms.mff.cuni.cz (Postfix, from userid 16202) id 33B7F543006; Fri, 10 Aug 2018 16:33:33 +0200 (CEST) Date: Fri, 10 Aug 2018 16:33:33 +0200 From: Jan Hubicka To: rguenther@suse.de, mliska@suse.cz, gcc-patches@gcc.gnu.org Subject: Fix even more merging PIC and PIE options Message-ID: <20180810143333.GA90959@kam.mff.cuni.cz> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.23 (2014-03-12) Hi, this patch should fix merging of PIC and PIE options so we always resort to the least common denominator of the object files compiled (i.e. linking together -fpic and -fPIE will result in -fpie binary). Note that we also use information about format of output passed by linker plugin so we will disable pic/pie when resulting binary is not relocatable. However for shared libraries and pie we want to pick right mode that makes sense. I wrote simple script that tries all possible options of combining two files. Mode picked is specified in the output file. To support targets that default to pic/pie well, I had to also hack lto_write_options to always stream what mode was used in the given file. lto-bootstrapped/regtested x86_64-linux, OK? Honza PR lto/86517 * lto-opts.c (lto_write_options): Always stream PIC/PIE mode. * lto-wrapper.c (merge_and_complain): Fix merging of PIC/PIE + => -fno-pie + -fpic => -fno-pie + -fPIC => -fno-pie + -fpie => -fno-pie + -fPIE => -fno-pie + -fno-pic => -fno-pie + -fno-pie => -fno-pie -fpic + => -fno-pie -fpic + -fpic => -fpic -fpic + -fPIC => -fpic -fpic + -fpie => -fpie -fpic + -fPIE => -fpie -fpic + -fno-pic => -fno-pic -fpic + -fno-pie => -fno-pie -fPIC + => -fno-pie -fPIC + -fpic => -fpic -fPIC + -fPIC => -fPIC -fPIC + -fpie => -fpie -fPIC + -fPIE => -fPIE -fPIC + -fno-pic => -fno-pic -fPIC + -fno-pie => -fno-pie -fpie + => -fno-pie -fpie + -fpic => -fpie -fpie + -fPIC => -fpie -fpie + -fpie => -fpie -fpie + -fPIE => -fpie -fpie + -fno-pic => -fno-pie -fpie + -fno-pie => -fno-pie -fPIE + => -fno-pie -fPIE + -fpic => -fpie -fPIE + -fPIC => -fPIE -fPIE + -fpie => -fpie -fPIE + -fPIE => -fPIE -fPIE + -fno-pic => -fno-pie -fPIE + -fno-pie => -fno-pie -fno-pic + => -fno-pic -fno-pic + -fpic => -fno-pic -fno-pic + -fPIC => -fno-pic -fno-pic + -fpie => -fno-pic -fno-pic + -fPIE => -fno-pic -fno-pic + -fno-pic => -fno-pic -fno-pic + -fno-pie => -fno-pic -fno-pie + => -fno-pie -fno-pie + -fpic => -fno-pie -fno-pie + -fPIC => -fno-pie -fno-pie + -fpie => -fno-pie -fno-pie + -fPIE => -fno-pie -fno-pie + -fno-pic => -fno-pie -fno-pie + -fno-pie => -fno-pie + -fpic => -fno-pie + -fpic -fpic => -fno-pie + -fPIC -fpic => -fno-pie + -fpie -fpic => -fno-pie + -fPIE -fpic => -fno-pie + -fno-pic -fpic => -fno-pie + -fno-pie -fpic => -fno-pie -fpic + -fpic => -fpic -fpic + -fpic -fpic => -fpic -fpic + -fPIC -fpic => -fpic -fpic + -fpie -fpic => -fpic -fpic + -fPIE -fpic => -fpic -fpic + -fno-pic -fpic => -fpic -fpic + -fno-pie -fpic => -fpic -fPIC + -fpic => -fpic -fPIC + -fpic -fpic => -fpic -fPIC + -fPIC -fpic => -fpic -fPIC + -fpie -fpic => -fpic -fPIC + -fPIE -fpic => -fpic -fPIC + -fno-pic -fpic => -fpic -fPIC + -fno-pie -fpic => -fpic -fpie + -fpic => -fpie -fpie + -fpic -fpic => -fpie -fpie + -fPIC -fpic => -fpie -fpie + -fpie -fpic => -fpie -fpie + -fPIE -fpic => -fpie -fpie + -fno-pic -fpic => -fpie -fpie + -fno-pie -fpic => -fpie -fPIE + -fpic => -fpie -fPIE + -fpic -fpic => -fpie -fPIE + -fPIC -fpic => -fpie -fPIE + -fpie -fpic => -fpie -fPIE + -fPIE -fpic => -fpie -fPIE + -fno-pic -fpic => -fpie -fPIE + -fno-pie -fpic => -fpie -fno-pic + -fpic => -fno-pic -fno-pic + -fpic -fpic => -fno-pic -fno-pic + -fPIC -fpic => -fno-pic -fno-pic + -fpie -fpic => -fno-pic -fno-pic + -fPIE -fpic => -fno-pic -fno-pic + -fno-pic -fpic => -fno-pic -fno-pic + -fno-pie -fpic => -fno-pic -fno-pie + -fpic => -fno-pie -fno-pie + -fpic -fpic => -fno-pie -fno-pie + -fPIC -fpic => -fno-pie -fno-pie + -fpie -fpic => -fno-pie -fno-pie + -fPIE -fpic => -fno-pie -fno-pie + -fno-pic -fpic => -fno-pie -fno-pie + -fno-pie -fpic => -fno-pie + -fPIC => -fno-pie + -fpic -fPIC => -fno-pie + -fPIC -fPIC => -fno-pie + -fpie -fPIC => -fno-pie + -fPIE -fPIC => -fno-pie + -fno-pic -fPIC => -fno-pie + -fno-pie -fPIC => -fno-pie -fpic + -fPIC => -fpic -fpic + -fpic -fPIC => -fpic -fpic + -fPIC -fPIC => -fpic -fpic + -fpie -fPIC => -fpic -fpic + -fPIE -fPIC => -fpic -fpic + -fno-pic -fPIC => -fpic -fpic + -fno-pie -fPIC => -fpic -fPIC + -fPIC => -fPIC -fPIC + -fpic -fPIC => -fPIC -fPIC + -fPIC -fPIC => -fPIC -fPIC + -fpie -fPIC => -fPIC -fPIC + -fPIE -fPIC => -fPIC -fPIC + -fno-pic -fPIC => -fPIC -fPIC + -fno-pie -fPIC => -fPIC -fpie + -fPIC => -fpie -fpie + -fpic -fPIC => -fpie -fpie + -fPIC -fPIC => -fpie -fpie + -fpie -fPIC => -fpie -fpie + -fPIE -fPIC => -fpie -fpie + -fno-pic -fPIC => -fpie -fpie + -fno-pie -fPIC => -fpie -fPIE + -fPIC => -fPIE -fPIE + -fpic -fPIC => -fPIE -fPIE + -fPIC -fPIC => -fPIE -fPIE + -fpie -fPIC => -fPIE -fPIE + -fPIE -fPIC => -fPIE -fPIE + -fno-pic -fPIC => -fPIE -fPIE + -fno-pie -fPIC => -fPIE -fno-pic + -fPIC => -fno-pic -fno-pic + -fpic -fPIC => -fno-pic -fno-pic + -fPIC -fPIC => -fno-pic -fno-pic + -fpie -fPIC => -fno-pic -fno-pic + -fPIE -fPIC => -fno-pic -fno-pic + -fno-pic -fPIC => -fno-pic -fno-pic + -fno-pie -fPIC => -fno-pic -fno-pie + -fPIC => -fno-pie -fno-pie + -fpic -fPIC => -fno-pie -fno-pie + -fPIC -fPIC => -fno-pie -fno-pie + -fpie -fPIC => -fno-pie -fno-pie + -fPIE -fPIC => -fno-pie -fno-pie + -fno-pic -fPIC => -fno-pie -fno-pie + -fno-pie -fPIC => -fno-pie + -fpie => -fno-pie + -fpic -fpie => -fno-pie + -fPIC -fpie => -fno-pie + -fpie -fpie => -fno-pie + -fPIE -fpie => -fno-pie + -fno-pic -fpie => -fno-pie + -fno-pie -fpie => -fno-pie -fpic + -fpie => -fpie -fpic + -fpic -fpie => -fpie -fpic + -fPIC -fpie => -fpie -fpic + -fpie -fpie => -fpie -fpic + -fPIE -fpie => -fpie -fpic + -fno-pic -fpie => -fpie -fpic + -fno-pie -fpie => -fpie -fPIC + -fpie => -fpie -fPIC + -fpic -fpie => -fpie -fPIC + -fPIC -fpie => -fpie -fPIC + -fpie -fpie => -fpie -fPIC + -fPIE -fpie => -fpie -fPIC + -fno-pic -fpie => -fpie -fPIC + -fno-pie -fpie => -fpie -fpie + -fpie => -fpie -fpie + -fpic -fpie => -fpie -fpie + -fPIC -fpie => -fpie -fpie + -fpie -fpie => -fpie -fpie + -fPIE -fpie => -fpie -fpie + -fno-pic -fpie => -fpie -fpie + -fno-pie -fpie => -fpie -fPIE + -fpie => -fpie -fPIE + -fpic -fpie => -fpie -fPIE + -fPIC -fpie => -fpie -fPIE + -fpie -fpie => -fpie -fPIE + -fPIE -fpie => -fpie -fPIE + -fno-pic -fpie => -fpie -fPIE + -fno-pie -fpie => -fpie -fno-pic + -fpie => -fno-pic -fno-pic + -fpic -fpie => -fno-pic -fno-pic + -fPIC -fpie => -fno-pic -fno-pic + -fpie -fpie => -fno-pic -fno-pic + -fPIE -fpie => -fno-pic -fno-pic + -fno-pic -fpie => -fno-pic -fno-pic + -fno-pie -fpie => -fno-pic -fno-pie + -fpie => -fno-pie -fno-pie + -fpic -fpie => -fno-pie -fno-pie + -fPIC -fpie => -fno-pie -fno-pie + -fpie -fpie => -fno-pie -fno-pie + -fPIE -fpie => -fno-pie -fno-pie + -fno-pic -fpie => -fno-pie -fno-pie + -fno-pie -fpie => -fno-pie + -fPIE => -fno-pie + -fpic -fPIE => -fno-pie + -fPIC -fPIE => -fno-pie + -fpie -fPIE => -fno-pie + -fPIE -fPIE => -fno-pie + -fno-pic -fPIE => -fno-pie + -fno-pie -fPIE => -fno-pie -fpic + -fPIE => -fpie -fpic + -fpic -fPIE => -fpie -fpic + -fPIC -fPIE => -fpie -fpic + -fpie -fPIE => -fpie -fpic + -fPIE -fPIE => -fpie -fpic + -fno-pic -fPIE => -fpie -fpic + -fno-pie -fPIE => -fpie -fPIC + -fPIE => -fPIE -fPIC + -fpic -fPIE => -fPIE -fPIC + -fPIC -fPIE => -fPIE -fPIC + -fpie -fPIE => -fPIE -fPIC + -fPIE -fPIE => -fPIE -fPIC + -fno-pic -fPIE => -fPIE -fPIC + -fno-pie -fPIE => -fPIE -fpie + -fPIE => -fpie -fpie + -fpic -fPIE => -fpie -fpie + -fPIC -fPIE => -fpie -fpie + -fpie -fPIE => -fpie -fpie + -fPIE -fPIE => -fpie -fpie + -fno-pic -fPIE => -fpie -fpie + -fno-pie -fPIE => -fpie -fPIE + -fPIE => -fPIE -fPIE + -fpic -fPIE => -fPIE -fPIE + -fPIC -fPIE => -fPIE -fPIE + -fpie -fPIE => -fPIE -fPIE + -fPIE -fPIE => -fPIE -fPIE + -fno-pic -fPIE => -fPIE -fPIE + -fno-pie -fPIE => -fPIE -fno-pic + -fPIE => -fno-pic -fno-pic + -fpic -fPIE => -fno-pic -fno-pic + -fPIC -fPIE => -fno-pic -fno-pic + -fpie -fPIE => -fno-pic -fno-pic + -fPIE -fPIE => -fno-pic -fno-pic + -fno-pic -fPIE => -fno-pic -fno-pic + -fno-pie -fPIE => -fno-pic -fno-pie + -fPIE => -fno-pie -fno-pie + -fpic -fPIE => -fno-pie -fno-pie + -fPIC -fPIE => -fno-pie -fno-pie + -fpie -fPIE => -fno-pie -fno-pie + -fPIE -fPIE => -fno-pie -fno-pie + -fno-pic -fPIE => -fno-pie -fno-pie + -fno-pie -fPIE => -fno-pie + -fno-pic => -fno-pie + -fpic -fno-pic => -fno-pie + -fPIC -fno-pic => -fno-pie + -fpie -fno-pic => -fno-pie + -fPIE -fno-pic => -fno-pie + -fno-pic -fno-pic => -fno-pie + -fno-pie -fno-pic => -fno-pie -fpic + -fno-pic => -fno-pic -fpic + -fpic -fno-pic => -fno-pic -fpic + -fPIC -fno-pic => -fno-pic -fpic + -fpie -fno-pic => -fno-pic -fpic + -fPIE -fno-pic => -fno-pic -fpic + -fno-pic -fno-pic => -fno-pic -fpic + -fno-pie -fno-pic => -fno-pic -fPIC + -fno-pic => -fno-pic -fPIC + -fpic -fno-pic => -fno-pic -fPIC + -fPIC -fno-pic => -fno-pic -fPIC + -fpie -fno-pic => -fno-pic -fPIC + -fPIE -fno-pic => -fno-pic -fPIC + -fno-pic -fno-pic => -fno-pic -fPIC + -fno-pie -fno-pic => -fno-pic -fpie + -fno-pic => -fno-pie -fpie + -fpic -fno-pic => -fno-pie -fpie + -fPIC -fno-pic => -fno-pie -fpie + -fpie -fno-pic => -fno-pie -fpie + -fPIE -fno-pic => -fno-pie -fpie + -fno-pic -fno-pic => -fno-pie -fpie + -fno-pie -fno-pic => -fno-pie -fPIE + -fno-pic => -fno-pie -fPIE + -fpic -fno-pic => -fno-pie -fPIE + -fPIC -fno-pic => -fno-pie -fPIE + -fpie -fno-pic => -fno-pie -fPIE + -fPIE -fno-pic => -fno-pie -fPIE + -fno-pic -fno-pic => -fno-pie -fPIE + -fno-pie -fno-pic => -fno-pie -fno-pic + -fno-pic => -fno-pic -fno-pic + -fpic -fno-pic => -fno-pic -fno-pic + -fPIC -fno-pic => -fno-pic -fno-pic + -fpie -fno-pic => -fno-pic -fno-pic + -fPIE -fno-pic => -fno-pic -fno-pic + -fno-pic -fno-pic => -fno-pic -fno-pic + -fno-pie -fno-pic => -fno-pic -fno-pie + -fno-pic => -fno-pie -fno-pie + -fpic -fno-pic => -fno-pie -fno-pie + -fPIC -fno-pic => -fno-pie -fno-pie + -fpie -fno-pic => -fno-pie -fno-pie + -fPIE -fno-pic => -fno-pie -fno-pie + -fno-pic -fno-pic => -fno-pie -fno-pie + -fno-pie -fno-pic => -fno-pie + -fno-pie => -fno-pie + -fpic -fno-pie => -fno-pie + -fPIC -fno-pie => -fno-pie + -fpie -fno-pie => -fno-pie + -fPIE -fno-pie => -fno-pie + -fno-pic -fno-pie => -fno-pie + -fno-pie -fno-pie => -fno-pie -fpic + -fno-pie => -fno-pie -fpic + -fpic -fno-pie => -fno-pie -fpic + -fPIC -fno-pie => -fno-pie -fpic + -fpie -fno-pie => -fno-pie -fpic + -fPIE -fno-pie => -fno-pie -fpic + -fno-pic -fno-pie => -fno-pie -fpic + -fno-pie -fno-pie => -fno-pie -fPIC + -fno-pie => -fno-pie -fPIC + -fpic -fno-pie => -fno-pie -fPIC + -fPIC -fno-pie => -fno-pie -fPIC + -fpie -fno-pie => -fno-pie -fPIC + -fPIE -fno-pie => -fno-pie -fPIC + -fno-pic -fno-pie => -fno-pie -fPIC + -fno-pie -fno-pie => -fno-pie -fpie + -fno-pie => -fno-pie -fpie + -fpic -fno-pie => -fno-pie -fpie + -fPIC -fno-pie => -fno-pie -fpie + -fpie -fno-pie => -fno-pie -fpie + -fPIE -fno-pie => -fno-pie -fpie + -fno-pic -fno-pie => -fno-pie -fpie + -fno-pie -fno-pie => -fno-pie -fPIE + -fno-pie => -fno-pie -fPIE + -fpic -fno-pie => -fno-pie -fPIE + -fPIC -fno-pie => -fno-pie -fPIE + -fpie -fno-pie => -fno-pie -fPIE + -fPIE -fno-pie => -fno-pie -fPIE + -fno-pic -fno-pie => -fno-pie -fPIE + -fno-pie -fno-pie => -fno-pie -fno-pic + -fno-pie => -fno-pic -fno-pic + -fpic -fno-pie => -fno-pic -fno-pic + -fPIC -fno-pie => -fno-pic -fno-pic + -fpie -fno-pie => -fno-pic -fno-pic + -fPIE -fno-pie => -fno-pic -fno-pic + -fno-pic -fno-pie => -fno-pic -fno-pic + -fno-pie -fno-pie => -fno-pic -fno-pie + -fno-pie => -fno-pie -fno-pie + -fpic -fno-pie => -fno-pie -fno-pie + -fPIC -fno-pie => -fno-pie -fno-pie + -fpie -fno-pie => -fno-pie -fno-pie + -fPIE -fno-pie => -fno-pie -fno-pie + -fno-pic -fno-pie => -fno-pie -fno-pie + -fno-pie -fno-pie => -fno-pie -fpic + => -fno-pie -fpic + -fpic => -fpic -fpic + -fPIC => -fpic -fpic + -fpie => -fpie -fpic + -fPIE => -fpie -fpic + -fno-pic => -fno-pic -fpic + -fno-pie => -fno-pie -fpic -fpic + => -fno-pie -fpic -fpic + -fpic => -fpic -fpic -fpic + -fPIC => -fpic -fpic -fpic + -fpie => -fpie -fpic -fpic + -fPIE => -fpie -fpic -fpic + -fno-pic => -fno-pic -fpic -fpic + -fno-pie => -fno-pie -fpic -fPIC + => -fno-pie -fpic -fPIC + -fpic => -fpic -fpic -fPIC + -fPIC => -fPIC -fpic -fPIC + -fpie => -fpie -fpic -fPIC + -fPIE => -fPIE -fpic -fPIC + -fno-pic => -fno-pic -fpic -fPIC + -fno-pie => -fno-pie -fpic -fpie + => -fno-pie -fpic -fpie + -fpic => -fpie -fpic -fpie + -fPIC => -fpie -fpic -fpie + -fpie => -fpie -fpic -fpie + -fPIE => -fpie -fpic -fpie + -fno-pic => -fno-pie -fpic -fpie + -fno-pie => -fno-pie -fpic -fPIE + => -fno-pie -fpic -fPIE + -fpic => -fpie -fpic -fPIE + -fPIC => -fPIE -fpic -fPIE + -fpie => -fpie -fpic -fPIE + -fPIE => -fPIE -fpic -fPIE + -fno-pic => -fno-pie -fpic -fPIE + -fno-pie => -fno-pie -fpic -fno-pic + => -fno-pic -fpic -fno-pic + -fpic => -fno-pic -fpic -fno-pic + -fPIC => -fno-pic -fpic -fno-pic + -fpie => -fno-pic -fpic -fno-pic + -fPIE => -fno-pic -fpic -fno-pic + -fno-pic => -fno-pic -fpic -fno-pic + -fno-pie => -fno-pic -fpic -fno-pie + => -fno-pie -fpic -fno-pie + -fpic => -fno-pie -fpic -fno-pie + -fPIC => -fno-pie -fpic -fno-pie + -fpie => -fno-pie -fpic -fno-pie + -fPIE => -fno-pie -fpic -fno-pie + -fno-pic => -fno-pie -fpic -fno-pie + -fno-pie => -fno-pie -fpic + -fpic => -fpic -fpic + -fpic -fpic => -fpic -fpic + -fPIC -fpic => -fpic -fpic + -fpie -fpic => -fpic -fpic + -fPIE -fpic => -fpic -fpic + -fno-pic -fpic => -fpic -fpic + -fno-pie -fpic => -fpic -fpic -fpic + -fpic => -fpic -fpic -fpic + -fpic -fpic => -fpic -fpic -fpic + -fPIC -fpic => -fpic -fpic -fpic + -fpie -fpic => -fpic -fpic -fpic + -fPIE -fpic => -fpic -fpic -fpic + -fno-pic -fpic => -fpic -fpic -fpic + -fno-pie -fpic => -fpic -fpic -fPIC + -fpic => -fpic -fpic -fPIC + -fpic -fpic => -fpic -fpic -fPIC + -fPIC -fpic => -fpic -fpic -fPIC + -fpie -fpic => -fpic -fpic -fPIC + -fPIE -fpic => -fpic -fpic -fPIC + -fno-pic -fpic => -fpic -fpic -fPIC + -fno-pie -fpic => -fpic -fpic -fpie + -fpic => -fpie -fpic -fpie + -fpic -fpic => -fpie -fpic -fpie + -fPIC -fpic => -fpie -fpic -fpie + -fpie -fpic => -fpie -fpic -fpie + -fPIE -fpic => -fpie -fpic -fpie + -fno-pic -fpic => -fpie -fpic -fpie + -fno-pie -fpic => -fpie -fpic -fPIE + -fpic => -fpie -fpic -fPIE + -fpic -fpic => -fpie -fpic -fPIE + -fPIC -fpic => -fpie -fpic -fPIE + -fpie -fpic => -fpie -fpic -fPIE + -fPIE -fpic => -fpie -fpic -fPIE + -fno-pic -fpic => -fpie -fpic -fPIE + -fno-pie -fpic => -fpie -fpic -fno-pic + -fpic => -fno-pic -fpic -fno-pic + -fpic -fpic => -fno-pic -fpic -fno-pic + -fPIC -fpic => -fno-pic -fpic -fno-pic + -fpie -fpic => -fno-pic -fpic -fno-pic + -fPIE -fpic => -fno-pic -fpic -fno-pic + -fno-pic -fpic => -fno-pic -fpic -fno-pic + -fno-pie -fpic => -fno-pic -fpic -fno-pie + -fpic => -fno-pie -fpic -fno-pie + -fpic -fpic => -fno-pie -fpic -fno-pie + -fPIC -fpic => -fno-pie -fpic -fno-pie + -fpie -fpic => -fno-pie -fpic -fno-pie + -fPIE -fpic => -fno-pie -fpic -fno-pie + -fno-pic -fpic => -fno-pie -fpic -fno-pie + -fno-pie -fpic => -fno-pie -fpic + -fPIC => -fpic -fpic + -fpic -fPIC => -fpic -fpic + -fPIC -fPIC => -fpic -fpic + -fpie -fPIC => -fpic -fpic + -fPIE -fPIC => -fpic -fpic + -fno-pic -fPIC => -fpic -fpic + -fno-pie -fPIC => -fpic -fpic -fpic + -fPIC => -fpic -fpic -fpic + -fpic -fPIC => -fpic -fpic -fpic + -fPIC -fPIC => -fpic -fpic -fpic + -fpie -fPIC => -fpic -fpic -fpic + -fPIE -fPIC => -fpic -fpic -fpic + -fno-pic -fPIC => -fpic -fpic -fpic + -fno-pie -fPIC => -fpic -fpic -fPIC + -fPIC => -fPIC -fpic -fPIC + -fpic -fPIC => -fPIC -fpic -fPIC + -fPIC -fPIC => -fPIC -fpic -fPIC + -fpie -fPIC => -fPIC -fpic -fPIC + -fPIE -fPIC => -fPIC -fpic -fPIC + -fno-pic -fPIC => -fPIC -fpic -fPIC + -fno-pie -fPIC => -fPIC -fpic -fpie + -fPIC => -fpie -fpic -fpie + -fpic -fPIC => -fpie -fpic -fpie + -fPIC -fPIC => -fpie -fpic -fpie + -fpie -fPIC => -fpie -fpic -fpie + -fPIE -fPIC => -fpie -fpic -fpie + -fno-pic -fPIC => -fpie -fpic -fpie + -fno-pie -fPIC => -fpie -fpic -fPIE + -fPIC => -fPIE -fpic -fPIE + -fpic -fPIC => -fPIE -fpic -fPIE + -fPIC -fPIC => -fPIE -fpic -fPIE + -fpie -fPIC => -fPIE -fpic -fPIE + -fPIE -fPIC => -fPIE -fpic -fPIE + -fno-pic -fPIC => -fPIE -fpic -fPIE + -fno-pie -fPIC => -fPIE -fpic -fno-pic + -fPIC => -fno-pic -fpic -fno-pic + -fpic -fPIC => -fno-pic -fpic -fno-pic + -fPIC -fPIC => -fno-pic -fpic -fno-pic + -fpie -fPIC => -fno-pic -fpic -fno-pic + -fPIE -fPIC => -fno-pic -fpic -fno-pic + -fno-pic -fPIC => -fno-pic -fpic -fno-pic + -fno-pie -fPIC => -fno-pic -fpic -fno-pie + -fPIC => -fno-pie -fpic -fno-pie + -fpic -fPIC => -fno-pie -fpic -fno-pie + -fPIC -fPIC => -fno-pie -fpic -fno-pie + -fpie -fPIC => -fno-pie -fpic -fno-pie + -fPIE -fPIC => -fno-pie -fpic -fno-pie + -fno-pic -fPIC => -fno-pie -fpic -fno-pie + -fno-pie -fPIC => -fno-pie -fpic + -fpie => -fpie -fpic + -fpic -fpie => -fpie -fpic + -fPIC -fpie => -fpie -fpic + -fpie -fpie => -fpie -fpic + -fPIE -fpie => -fpie -fpic + -fno-pic -fpie => -fpie -fpic + -fno-pie -fpie => -fpie -fpic -fpic + -fpie => -fpie -fpic -fpic + -fpic -fpie => -fpie -fpic -fpic + -fPIC -fpie => -fpie -fpic -fpic + -fpie -fpie => -fpie -fpic -fpic + -fPIE -fpie => -fpie -fpic -fpic + -fno-pic -fpie => -fpie -fpic -fpic + -fno-pie -fpie => -fpie -fpic -fPIC + -fpie => -fpie -fpic -fPIC + -fpic -fpie => -fpie -fpic -fPIC + -fPIC -fpie => -fpie -fpic -fPIC + -fpie -fpie => -fpie -fpic -fPIC + -fPIE -fpie => -fpie -fpic -fPIC + -fno-pic -fpie => -fpie -fpic -fPIC + -fno-pie -fpie => -fpie -fpic -fpie + -fpie => -fpie -fpic -fpie + -fpic -fpie => -fpie -fpic -fpie + -fPIC -fpie => -fpie -fpic -fpie + -fpie -fpie => -fpie -fpic -fpie + -fPIE -fpie => -fpie -fpic -fpie + -fno-pic -fpie => -fpie -fpic -fpie + -fno-pie -fpie => -fpie -fpic -fPIE + -fpie => -fpie -fpic -fPIE + -fpic -fpie => -fpie -fpic -fPIE + -fPIC -fpie => -fpie -fpic -fPIE + -fpie -fpie => -fpie -fpic -fPIE + -fPIE -fpie => -fpie -fpic -fPIE + -fno-pic -fpie => -fpie -fpic -fPIE + -fno-pie -fpie => -fpie -fpic -fno-pic + -fpie => -fno-pic -fpic -fno-pic + -fpic -fpie => -fno-pic -fpic -fno-pic + -fPIC -fpie => -fno-pic -fpic -fno-pic + -fpie -fpie => -fno-pic -fpic -fno-pic + -fPIE -fpie => -fno-pic -fpic -fno-pic + -fno-pic -fpie => -fno-pic -fpic -fno-pic + -fno-pie -fpie => -fno-pic -fpic -fno-pie + -fpie => -fno-pie -fpic -fno-pie + -fpic -fpie => -fno-pie -fpic -fno-pie + -fPIC -fpie => -fno-pie -fpic -fno-pie + -fpie -fpie => -fno-pie -fpic -fno-pie + -fPIE -fpie => -fno-pie -fpic -fno-pie + -fno-pic -fpie => -fno-pie -fpic -fno-pie + -fno-pie -fpie => -fno-pie -fpic + -fPIE => -fpie -fpic + -fpic -fPIE => -fpie -fpic + -fPIC -fPIE => -fpie -fpic + -fpie -fPIE => -fpie -fpic + -fPIE -fPIE => -fpie -fpic + -fno-pic -fPIE => -fpie -fpic + -fno-pie -fPIE => -fpie -fpic -fpic + -fPIE => -fpie -fpic -fpic + -fpic -fPIE => -fpie -fpic -fpic + -fPIC -fPIE => -fpie -fpic -fpic + -fpie -fPIE => -fpie -fpic -fpic + -fPIE -fPIE => -fpie -fpic -fpic + -fno-pic -fPIE => -fpie -fpic -fpic + -fno-pie -fPIE => -fpie -fpic -fPIC + -fPIE => -fPIE -fpic -fPIC + -fpic -fPIE => -fPIE -fpic -fPIC + -fPIC -fPIE => -fPIE -fpic -fPIC + -fpie -fPIE => -fPIE -fpic -fPIC + -fPIE -fPIE => -fPIE -fpic -fPIC + -fno-pic -fPIE => -fPIE -fpic -fPIC + -fno-pie -fPIE => -fPIE -fpic -fpie + -fPIE => -fpie -fpic -fpie + -fpic -fPIE => -fpie -fpic -fpie + -fPIC -fPIE => -fpie -fpic -fpie + -fpie -fPIE => -fpie -fpic -fpie + -fPIE -fPIE => -fpie -fpic -fpie + -fno-pic -fPIE => -fpie -fpic -fpie + -fno-pie -fPIE => -fpie -fpic -fPIE + -fPIE => -fPIE -fpic -fPIE + -fpic -fPIE => -fPIE -fpic -fPIE + -fPIC -fPIE => -fPIE -fpic -fPIE + -fpie -fPIE => -fPIE -fpic -fPIE + -fPIE -fPIE => -fPIE -fpic -fPIE + -fno-pic -fPIE => -fPIE -fpic -fPIE + -fno-pie -fPIE => -fPIE -fpic -fno-pic + -fPIE => -fno-pic -fpic -fno-pic + -fpic -fPIE => -fno-pic -fpic -fno-pic + -fPIC -fPIE => -fno-pic -fpic -fno-pic + -fpie -fPIE => -fno-pic -fpic -fno-pic + -fPIE -fPIE => -fno-pic -fpic -fno-pic + -fno-pic -fPIE => -fno-pic -fpic -fno-pic + -fno-pie -fPIE => -fno-pic -fpic -fno-pie + -fPIE => -fno-pie -fpic -fno-pie + -fpic -fPIE => -fno-pie -fpic -fno-pie + -fPIC -fPIE => -fno-pie -fpic -fno-pie + -fpie -fPIE => -fno-pie -fpic -fno-pie + -fPIE -fPIE => -fno-pie -fpic -fno-pie + -fno-pic -fPIE => -fno-pie -fpic -fno-pie + -fno-pie -fPIE => -fno-pie -fpic + -fno-pic => -fno-pic -fpic + -fpic -fno-pic => -fno-pic -fpic + -fPIC -fno-pic => -fno-pic -fpic + -fpie -fno-pic => -fno-pic -fpic + -fPIE -fno-pic => -fno-pic -fpic + -fno-pic -fno-pic => -fno-pic -fpic + -fno-pie -fno-pic => -fno-pic -fpic -fpic + -fno-pic => -fno-pic -fpic -fpic + -fpic -fno-pic => -fno-pic -fpic -fpic + -fPIC -fno-pic => -fno-pic -fpic -fpic + -fpie -fno-pic => -fno-pic -fpic -fpic + -fPIE -fno-pic => -fno-pic -fpic -fpic + -fno-pic -fno-pic => -fno-pic -fpic -fpic + -fno-pie -fno-pic => -fno-pic -fpic -fPIC + -fno-pic => -fno-pic -fpic -fPIC + -fpic -fno-pic => -fno-pic -fpic -fPIC + -fPIC -fno-pic => -fno-pic -fpic -fPIC + -fpie -fno-pic => -fno-pic -fpic -fPIC + -fPIE -fno-pic => -fno-pic -fpic -fPIC + -fno-pic -fno-pic => -fno-pic -fpic -fPIC + -fno-pie -fno-pic => -fno-pic -fpic -fpie + -fno-pic => -fno-pie -fpic -fpie + -fpic -fno-pic => -fno-pie -fpic -fpie + -fPIC -fno-pic => -fno-pie -fpic -fpie + -fpie -fno-pic => -fno-pie -fpic -fpie + -fPIE -fno-pic => -fno-pie -fpic -fpie + -fno-pic -fno-pic => -fno-pie -fpic -fpie + -fno-pie -fno-pic => -fno-pie -fpic -fPIE + -fno-pic => -fno-pie -fpic -fPIE + -fpic -fno-pic => -fno-pie -fpic -fPIE + -fPIC -fno-pic => -fno-pie -fpic -fPIE + -fpie -fno-pic => -fno-pie -fpic -fPIE + -fPIE -fno-pic => -fno-pie -fpic -fPIE + -fno-pic -fno-pic => -fno-pie -fpic -fPIE + -fno-pie -fno-pic => -fno-pie -fpic -fno-pic + -fno-pic => -fno-pic -fpic -fno-pic + -fpic -fno-pic => -fno-pic -fpic -fno-pic + -fPIC -fno-pic => -fno-pic -fpic -fno-pic + -fpie -fno-pic => -fno-pic -fpic -fno-pic + -fPIE -fno-pic => -fno-pic -fpic -fno-pic + -fno-pic -fno-pic => -fno-pic -fpic -fno-pic + -fno-pie -fno-pic => -fno-pic -fpic -fno-pie + -fno-pic => -fno-pie -fpic -fno-pie + -fpic -fno-pic => -fno-pie -fpic -fno-pie + -fPIC -fno-pic => -fno-pie -fpic -fno-pie + -fpie -fno-pic => -fno-pie -fpic -fno-pie + -fPIE -fno-pic => -fno-pie -fpic -fno-pie + -fno-pic -fno-pic => -fno-pie -fpic -fno-pie + -fno-pie -fno-pic => -fno-pie -fpic + -fno-pie => -fno-pie -fpic + -fpic -fno-pie => -fno-pie -fpic + -fPIC -fno-pie => -fno-pie -fpic + -fpie -fno-pie => -fno-pie -fpic + -fPIE -fno-pie => -fno-pie -fpic + -fno-pic -fno-pie => -fno-pie -fpic + -fno-pie -fno-pie => -fno-pie -fpic -fpic + -fno-pie => -fno-pie -fpic -fpic + -fpic -fno-pie => -fno-pie -fpic -fpic + -fPIC -fno-pie => -fno-pie -fpic -fpic + -fpie -fno-pie => -fno-pie -fpic -fpic + -fPIE -fno-pie => -fno-pie -fpic -fpic + -fno-pic -fno-pie => -fno-pie -fpic -fpic + -fno-pie -fno-pie => -fno-pie -fpic -fPIC + -fno-pie => -fno-pie -fpic -fPIC + -fpic -fno-pie => -fno-pie -fpic -fPIC + -fPIC -fno-pie => -fno-pie -fpic -fPIC + -fpie -fno-pie => -fno-pie -fpic -fPIC + -fPIE -fno-pie => -fno-pie -fpic -fPIC + -fno-pic -fno-pie => -fno-pie -fpic -fPIC + -fno-pie -fno-pie => -fno-pie -fpic -fpie + -fno-pie => Index: lto-opts.c =================================================================== --- lto-opts.c (revision 263356) +++ lto-opts.c (working copy) @@ -78,6 +78,22 @@ lto_write_options (void) && !global_options.x_flag_openacc) append_to_collect_gcc_options (&temporary_obstack, &first_p, "-fno-openacc"); + /* Append PIC/PIE mode because its default depends on target and it is + subject of merging in lto-wrapper. */ + if ((!global_options_set.x_flag_pic || global_options.x_flag_pic == 0) + && !global_options_set.x_flag_pie) + { + append_to_collect_gcc_options (&temporary_obstack, &first_p, + global_options.x_flag_pic == 2 + ? "-fPIC" + : global_options.x_flag_pic == 1 + ? "-fpic" + : global_options.x_flag_pie == 2 + ? "-fPIE" + : global_options.x_flag_pie == 1 + ? "-fpie" + : "-fno-pie"); + } /* Append options from target hook and store them to offload_lto section. */ if (lto_stream_offload_p) Index: lto-wrapper.c =================================================================== --- lto-wrapper.c (revision 263356) +++ lto-wrapper.c (working copy) @@ -408,6 +408,11 @@ merge_and_complain (struct cl_decoded_op It is a common mistake to mix few -fPIC compiled objects into otherwise non-PIC code. We do not want to build everything with PIC then. + Similarly we merge PIE options, however in addition we keep + -fPIC + -fPIE = -fPIE + -fpic + -fPIE = -fpie + -fPIC/-fpic + -fpie = -fpie + It would be good to warn on mismatches, but it is bit hard to do as we do not know what nothing translates to. */ @@ -415,11 +420,38 @@ merge_and_complain (struct cl_decoded_op if ((*decoded_options)[j].opt_index == OPT_fPIC || (*decoded_options)[j].opt_index == OPT_fpic) { - if (!pic_option - || (pic_option->value > 0) != ((*decoded_options)[j].value > 0)) - remove_option (decoded_options, j, decoded_options_count); - else if (pic_option->opt_index == OPT_fPIC - && (*decoded_options)[j].opt_index == OPT_fpic) + /* -fno-pic in one unit implies -fno-pic everywhere. */ + if ((*decoded_options)[j].value == 0) + j++; + /* If we have no pic option or merge in -fno-pic, we still may turn + existing pic/PIC mode into pie/PIE if -fpie/-fPIE is present. */ + else if ((pic_option && pic_option->value == 0) + || !pic_option) + { + if (pie_option) + { + bool big = (*decoded_options)[j].opt_index == OPT_fPIC + && pie_option->opt_index == OPT_fPIE; + (*decoded_options)[j].opt_index = big ? OPT_fPIE : OPT_fpie; + if (pie_option->value) + (*decoded_options)[j].canonical_option[0] = big ? "-fPIE" : "-fpie"; + else + (*decoded_options)[j].canonical_option[0] = big ? "-fno-pie" : "-fno-pie"; + (*decoded_options)[j].value = pie_option->value; + j++; + } + else if (pic_option) + { + (*decoded_options)[j] = *pic_option; + j++; + } + /* We do not know if target defaults to pic or not, so just remove + option if it is missing in one unit but enabled in other. */ + else + remove_option (decoded_options, j, decoded_options_count); + } + else if (pic_option->opt_index == OPT_fpic + && (*decoded_options)[j].opt_index == OPT_fPIC) { (*decoded_options)[j] = *pic_option; j++; @@ -430,11 +462,42 @@ merge_and_complain (struct cl_decoded_op else if ((*decoded_options)[j].opt_index == OPT_fPIE || (*decoded_options)[j].opt_index == OPT_fpie) { - if (!pie_option - || pie_option->value != (*decoded_options)[j].value) - remove_option (decoded_options, j, decoded_options_count); - else if (pie_option->opt_index == OPT_fPIE - && (*decoded_options)[j].opt_index == OPT_fpie) + /* -fno-pie in one unit implies -fno-pie everywhere. */ + if ((*decoded_options)[j].value == 0) + j++; + /* If we have no pie option or merge in -fno-pie, we still preserve + PIE/pie if pic/PIC is present. */ + else if ((pie_option && pie_option->value == 0) + || !pie_option) + { + /* If -fPIC/-fpic is given, merge it with -fPIE/-fpie. */ + if (pic_option) + { + if (pic_option->opt_index == OPT_fpic + && (*decoded_options)[j].opt_index == OPT_fPIE) + { + (*decoded_options)[j].opt_index = OPT_fpie; + (*decoded_options)[j].canonical_option[0] + = pic_option->value ? "-fpie" : "-fno-pie"; + } + else if (!pic_option->value) + (*decoded_options)[j].canonical_option[0] = "-fno-pie"; + (*decoded_options)[j].value = pic_option->value; + j++; + } + else if (pie_option) + { + (*decoded_options)[j] = *pie_option; + j++; + } + /* Because we always append pic/PIE options this code path should + not happen unless the LTO object was built by old lto1 which + did not contain that logic yet. */ + else + remove_option (decoded_options, j, decoded_options_count); + } + else if (pie_option->opt_index == OPT_fpie + && (*decoded_options)[j].opt_index == OPT_fPIE) { (*decoded_options)[j] = *pie_option; j++;