From patchwork Fri Dec 18 15:31:46 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nathan Sidwell X-Patchwork-Id: 1418454 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; helo=sourceware.org; envelope-from=gcc-patches-bounces@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=acm.org Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=ECX774US; dkim-atps=neutral Received: from sourceware.org (unknown [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4CyCXC30hLz9sWK for ; Sat, 19 Dec 2020 02:31:53 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id AE46A3858023; Fri, 18 Dec 2020 15:31:51 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-qk1-x733.google.com (mail-qk1-x733.google.com [IPv6:2607:f8b0:4864:20::733]) by sourceware.org (Postfix) with ESMTPS id 23E8A385800F for ; Fri, 18 Dec 2020 15:31:49 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 23E8A385800F Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=acm.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=nathanmsidwell@gmail.com Received: by mail-qk1-x733.google.com with SMTP id f26so667904qka.0 for ; Fri, 18 Dec 2020 07:31:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:to:from:subject:message-id:date:user-agent:mime-version :content-language; bh=duXcwT+DEKfi69kt8CdArMD1xsw7jmLP5Tbq30vXV9o=; b=ECX774US2cjboCkt4EqyiIT3Z9F/q0fkmyHYJv3efvxd3dC7GAI0WQJvHk0BMvdakH QZv3Fzr7ZeC9NLkMxO0V+LOTz6fm6ULbzt3i+2wpBMMjAo3EO+saecJK/mThGYzVWxkd rd5v8laxNj0jIp21G9maB7QvuJlbZsp4hj8Rocqwca7vZMkoF2q4kTVseV6bNNzKFNoO 7dIiLKJELGIFhYnchuoFXIWIpxIWwrGcathJzMSsWr8Y+VgIq3QVvLp5aNC3QIsHFnJ5 m+S24BFY8x6nZKKZPxSClQT/9gOXDme1e7K3aBLsoqTfPh8g37GDD0rJJN/2GdpSFdOD kZpQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:to:from:subject:message-id:date :user-agent:mime-version:content-language; bh=duXcwT+DEKfi69kt8CdArMD1xsw7jmLP5Tbq30vXV9o=; b=b3/4P+ikge1yH6EFhXtrcAhnss/ktC95cOSl2aKFj8tYMuClroDJLsjcagPjRJdttG lEx9GjV1GZztzBIBqkzpGNM9nL/q8k9sFARfG70gFaFYtmlR98RalO7i6+V0RnyAaerz UVK2gUvYZqH2edNhg8wcNI1ZBH/bJAvCoV0431Ff8sRS6ztXpmO9LzK7gsPZx4Zg6NlF uMX2tzG9KoBUE3DZy53N3qzM0gmyQyhZHeT8/VmNguV+SkpCwmIDnsQrj5MB2ROYX3PS ZrHZmd5nY2KFXuykLwT3l01PuDNvbZr84v5uSomloCR4BLMZi4S00rJ8ZMXX4jsg+YQH Z5Tw== X-Gm-Message-State: AOAM5310Cp/t8XfvfLGT7XxAa7AmijrgKdy7HbRBz/A7DYyPAFgdwugm p4bnk/9jxNs9shMfAtJallM= X-Google-Smtp-Source: ABdhPJy5XBtE5yM9li8cWuHicsCkPcbemQaotfgPjOYBom6qbzm31KY9wyrdhrYwAcMXv6BorbASBQ== X-Received: by 2002:a37:8dc7:: with SMTP id p190mr5246158qkd.308.1608305508294; Fri, 18 Dec 2020 07:31:48 -0800 (PST) Received: from ?IPv6:2620:10d:c0a8:1102:d15:dfa7:c896:1578? ([2620:10d:c091:480::1:4aff]) by smtp.googlemail.com with ESMTPSA id r128sm5991292qke.94.2020.12.18.07.31.47 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 18 Dec 2020 07:31:47 -0800 (PST) To: GCC Patches From: Nathan Sidwell Subject: c++: Fix windows binary files [PR 98362] Message-ID: Date: Fri, 18 Dec 2020 10:31:46 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.5.0 MIME-Version: 1.0 Content-Language: en-US X-Spam-Status: No, score=-11.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_EF, FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces@gcc.gnu.org Sender: "Gcc-patches" Windows has unique and special needs for open(2). gcc/cp/ * module.cc (O_CLOEXEC, O_BINARY): Add window's support. (elf_in::defrost, module_state::do_import) (finish_module_processing): Use O_BINARY. diff --git i/gcc/cp/module.cc w/gcc/cp/module.cc index b2b81900fc3..fc918d296a2 100644 --- i/gcc/cp/module.cc +++ w/gcc/cp/module.cc @@ -252,9 +252,23 @@ Classes used: #endif #endif -#if !HOST_HAS_O_CLOEXEC +/* Some open(2) flag differences, what a colourful world it is! */ +#if defined (O_CLOEXEC) +// OK +#elif defined (_O_NOINHERIT) +/* Windows' _O_NOINHERIT matches O_CLOEXEC flag */ +#define O_CLOEXEC _O_NOINHERIT +#else #define O_CLOEXEC 0 #endif +#if defined (O_BINARY) +// Ok? +#elif defined (_O_BINARY) +/* Windows' open(2) call defaults to text! */ +#define O_BINARY _O_BINARY +#else +#define O_BINARY 0 +#endif static inline cpp_hashnode *cpp_node (tree id) { @@ -1596,7 +1610,7 @@ elf_in::defrost (const char *name) gcc_checking_assert (is_frozen ()); struct stat stat; - fd = open (name, O_RDONLY | O_CLOEXEC); + fd = open (name, O_RDONLY | O_CLOEXEC | O_BINARY); if (fd < 0 || fstat (fd, &stat) < 0) set_error (errno); else @@ -18568,7 +18582,7 @@ module_state::do_import (cpp_reader *reader, bool outermost) { const char *file = maybe_add_cmi_prefix (filename); dump () && dump ("CMI is %s", file); - fd = open (file, O_RDONLY | O_CLOEXEC); + fd = open (file, O_RDONLY | O_CLOEXEC | O_BINARY); e = errno; } @@ -19704,7 +19718,8 @@ finish_module_processing (cpp_reader *reader) if (!errorcount) for (unsigned again = 2; ; again--) { - fd = open (tmp_name, O_RDWR | O_CREAT | O_TRUNC | O_CLOEXEC, + fd = open (tmp_name, + O_RDWR | O_CREAT | O_TRUNC | O_CLOEXEC | O_BINARY, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH); e = errno; if (fd >= 0 || !again || e != ENOENT)