delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2019/08/16/05:28:33

X-Recipient: archive-cygwin AT delorie DOT com
DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id
:list-unsubscribe:list-subscribe:list-archive:list-post
:list-help:sender:subject:to:references:from:message-id:date
:mime-version:in-reply-to:content-type
:content-transfer-encoding; q=dns; s=default; b=QyQDJns+gek84q05
pvMWU2U1mbkgD9L9mDhT+y8w01Y/WmTr9zXJ2NZ7bOj4stisKKYvjSIUm2scogNK
CxIsge5mzDF7gw9Q2YuH7+brQ/JmGhPOKPA9X/z0zPzA7EMr0lxkRik6jneZtWxO
cY2ME4Le7TMMIaRu024JMNz7L+8=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id
:list-unsubscribe:list-subscribe:list-archive:list-post
:list-help:sender:subject:to:references:from:message-id:date
:mime-version:in-reply-to:content-type
:content-transfer-encoding; s=default; bh=AaOCNhWQ/aiCmojQyk5PfW
3sh/Y=; b=KkKdfV6Bc68y+tlvvFAhweXpADjeVNDLeIbEoLXvc5n/rDrmZZYu8W
NQIAC/LI+eimPH/Mjy5hSPi9uL18lP8coYVHgNM/tsB2V7f3SapM0z+dozynE6bp
TVEo1UFenuivMR34o2fiZrqCVIHStIBiFpjkY+m9dAZOFyUIUag5Q=
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Id: <cygwin.cygwin.com>
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com
Delivered-To: corinna-cygwin AT cygwin DOT com
Authentication-Results: sourceware.org; auth=none
X-Spam-SWARE-Status: No, score=-1.3 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_PASS autolearn=unavailable version=3.3.1 spammy=
X-HELO: gateway36.websitewelcome.com
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=agner.org; s=default; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:MIME-Version :Date:Message-ID:From:References:To:Subject:Sender:Reply-To:Cc:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=SXjMgO8d41obtRgo/6RwAeyhZJmc3UpwgK9rsnj28UQ=; b=EYUSkIlx49IY4lyP36xv9VZ7ec 3JrU0kaM2brkPmkEBTCS41w3NnNSRvZxTPCxHLMl6VEf5CAH+OpUyutfvIX2oDVRyaLJ/7WiPLDKf 8oYsskxDL4RPJC2cONfs+77PlCENUBP0I7hQIfZbcggorpjNDD1Kynu6ObJFIbepyCAuaNBTLEnrf oBpz+3SM/GGkmw9NQzNH6CvqoYessxCgEsfisPILJPcDeQj+O5SWpblnnBZ0V03dsQd4bCnOL7aAP /B5S41R0hCRlx+9uagRVAUIcE/hoV0kZ2txZw3vjXI4G+fceiJPL5X1iYWSxFh0E3hQABV/KO8MY7 COXNOwYw==;
Subject: Re: Clang is using the wrong memory model
To: Corinna Vinschen <corinna-cygwin AT cygwin DOT com>,
"cygwin AT cygwin DOT com" <cygwin AT cygwin DOT com>
References: <732305300 DOT 268416262 DOT 1565603129541 DOT JavaMail DOT root AT zimbra54-e10 DOT priv DOT proxad DOT net> <024ce5b5-6024-b371-e382-5eef5d1d4a90 AT agner DOT org> <075477ca-e031-39ea-3dfe-bc8bc2fc8fa6 AT agner DOT org> <20190816082603 DOT GR11632 AT calimero DOT vinschen DOT de>
From: Agner Fog <agner AT agner DOT org>
Message-ID: <8d594f4d-17e0-447a-8b18-1ed620815e0f@agner.org>
Date: Fri, 16 Aug 2019 11:27:17 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190816082603.GR11632@calimero.vinschen.de>
X-IsSubscribed: yes

Thanks for your replies.

A Cygwin application with -mcmodel=small appears to work fine.

As I explained, -mcmodel=small does something else when the target is 
Windows. It does not require addresses to be below 2GB, it only requires 
the distance between a code section and it's data section to be below 2GB.

Your concern would be right if -mcmodel=small was doing the same thing 
as it does in Linux, but this is not the case.

It does not matter where the application and the Cygwin DLL are placed 
because Windows allows EXEs and DLLs to be placed at any address. There 
is no static linking between an application and the Cygwin DLL, so the 
distance between application and DLL does not matter.

I don't see any problem with fork() either, because there is no static 
link between parent and child process. The OS puts everything in place 
using virtual addresses.

Agner


On 16/08/2019 10.26, Corinna Vinschen wrote:
> On Aug 16 08:06, Agner Fog wrote:
>> Cygwin Clang is using -mcmodel=medium as default for Win64, according to my
>> tests, while the right model is -mcmodel=small
> -mcmodel=small is *only* the right model if the target is native
> Windows.  If the target is a Cygwin application it *must* at least
> be compiled with -mcmodel=medium.  The reason is the standarized
> memory layout of Cygwin application and DLLs.
>
>> Linux Clang with --target=x86_64-pc-cygwin gives the small memory model.
> Which is wrong.
>
>> I took this to the LLVM Bugzilla as you asked me to:
>> https://bugs.llvm.org/show_bug.cgi?id=42983
>>
>> This gave the following conclusion:
>>
>> -mcmodel=small does something different when the target is Windows. This
>> difference appears to be undocumented. The small memory model with a Linux
>> target puts everything below the 2GB limit so that 32-bit absolute addresses
>> can be used. The small memory model with a Windows target is using 32-bit
>> relative addresses instead, which is the correct thing to do in Windows.
> Yes, but not for Cygwin applications and DLLs.  The reason is that Cygwin
> apps and DLLs reside in the memory beyond the first 2 Gigs in a standarized
> way so as not to collide with Windows code and datastructures.  And that
> in turn was necessary to make fork() more reliable on 64 bit.
>
> Here's the memory layout:
>
> 0000:00000000	Windows
> 0000:80000000	Thread stacks
> 0001:00400000	Executable
> 0001:80000000	*The* Cygwin DLL
> 0002:00000000	Rebased Cygwin DLLs
> 0004:00000000	Unrebased Cygwin DLLs(*)
>
> 0006:00000000	Heap (up to Cygwin 3.0)
> 0008:00000000	Heap (starting with Cygwin 3.1)
>
> 0700:00000000	Top-down start address for mmaps up to Windows 8
> 		or up to Cygwin 3.0
> 7000:00000000	Top-down start address for mmaps starting with Windows 8.1
> 		and Cygwin 3.1
>
> So there's a difference between non-Cygwin (-mcmodel=small as default)
> and Cygwin (at least -mcmodel=medium).
>
>
> Corinna
>

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019