X-Recipient: archive-cygwin AT delorie DOT com X-SWARE-Spam-Status: No, hits=-2.9 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_LOW X-Spam-Check-By: sourceware.org Message-Id: <1268858171.19995.1365359851@webmail.messagingengine.com> From: "Charles Wilson" To: cygwin AT cygwin DOT com MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii" Subject: Re: MingW-related setup.exe crash w/ DEP enabled Date: Wed, 17 Mar 2010 16:36:11 -0400 Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Corinna wrote: > Even if the crash is fixed now, you should better keep the old MingW > version. I tested the latest upx 3.04, and it still disallows to > create compressed executables which have a .tls section. I tried with > a native Win32 build as well as with a Linux build of upx. I guess I was confused by Corinna's original message. I thought she was reporting a problem with upx and .tls, and another problem with dep + .tls. But my tests show that everything works fine -- on an XP box without DEP. So, is the problem is *only* dep + .tls? (My test results below, for the record...) -- Chuck I just built setup.exe from today's CVS using binutils 2.19.51-1 mingw-runtime 3.18-1 gcc-core 3.4.4-999 cygwin 1.7.1-1 upx 3.01-1 and the uncompressed binary worked fine. It does have a .tls section: $ objdump -p build/setup.exe setup.exe: file format pei-i386 Characteristics 0x107 relocations stripped executable line numbers stripped 32 bit words ... The Data Directory Entry 0 00000000 00000000 Export Directory [.edata (or where ever we found it)] Entry 1 001a8000 0000267c Import Directory [parts of .idata] Entry 2 001ab000 00009134 Resource Directory [.rsrc] Entry 3 00000000 00000000 Exception Directory [.pdata] Entry 4 00000000 00000000 Security Directory Entry 5 00000000 00000000 Base Relocation Directory [.reloc] Entry 6 00000000 00000000 Debug Directory Entry 7 00000000 00000000 Description Directory Entry 8 00000000 00000000 Special Directory Entry 9 00000000 00000000 Thread Storage Directory [.tls] Entry a 00000000 00000000 Load Configuration Directory Entry b 00000000 00000000 Bound Import Directory Entry c 00000000 00000000 Import Address Table Directory Entry d 00000000 00000000 Delay Import Directory Entry e 00000000 00000000 CLR Runtime Header Entry f 00000000 00000000 Reserved After copying the binary over to my deployment area, and manually running upx: $ ls -l build/setup.exe -rwxrwxr-x 1 15319826 2010-03-17 15:27 build/setup.exe $ ls -l deploy/setup.exe -rwxr-xr-x 1 4235538 2010-03-17 15:33 deploy/setup.exe And it worked just fine. I built using -O2 -g, but did not explicitly strip the debug symbols. Trying that.... $ cp build/setup.exe ./setup.exe $ strip ./setup.exe $ ls -l ./setup.exe -rwxrwxr-x 1 1678848 2010-03-17 16:09 setup.exe $ objdump -p ./setup.exe ./setup.exe: file format pei-i386 Characteristics 0x30f relocations stripped executable line numbers stripped symbols stripped 32 bit words debugging information removed ... Entry 9 00000000 00000000 Thread Storage Directory [.tls] ....and the the stripped, but uncompressed, version worked just fine, too. Now, stripped AND uncompressed: $ upx ./setup.exe $ ls -l ./setup.exe -rwxr-xr-x 1 655360 2010-03-17 16:10 setup.exe ....which also worked fine. -- Chuck -- 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