From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1274 invoked by alias); 26 Mar 2011 20:04:25 -0000 Received: (qmail 1259 invoked by uid 22791); 26 Mar 2011 20:04:23 -0000 X-SWARE-Spam-Status: No, hits=-2.3 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,TW_BJ,TW_CX,TW_DC,TW_GX,TW_RG,T_TO_NO_BRKTS_FREEMAIL X-Spam-Check-By: sourceware.org Received: from mail-bw0-f47.google.com (HELO mail-bw0-f47.google.com) (209.85.214.47) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sat, 26 Mar 2011 20:04:18 +0000 Received: by bwz5 with SMTP id 5so1182537bwz.20 for ; Sat, 26 Mar 2011 13:04:17 -0700 (PDT) Received: by 10.204.84.137 with SMTP id j9mr2065501bkl.120.1301169857262; Sat, 26 Mar 2011 13:04:17 -0700 (PDT) MIME-Version: 1.0 Received: by 10.204.63.211 with HTTP; Sat, 26 Mar 2011 13:03:57 -0700 (PDT) From: Nathan Boley Date: Sat, 26 Mar 2011 20:28:00 -0000 Message-ID: Subject: Possible Bug To: gcc@gcc.gnu.org Content-Type: multipart/mixed; boundary=0016e6dd98552276d6049f68372d Mailing-List: contact gcc-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-owner@gcc.gnu.org X-SW-Source: 2011-03/txt/msg00425.txt.bz2 --0016e6dd98552276d6049f68372d Content-Type: text/plain; charset=ISO-8859-1 Content-length: 1749 Hi All, In a much larger application, I was getting a weird segfault that an assignment to a temporary variable fixed. I distilled the example into the attached "test_case.c". When I run test_case.c under valgrind I get a memory read error, and it segfaults with electric fence, but I'm not actually able to get a true segfault. However, I am pretty sure that the same issue was causing the segfault in my application. >From my really limited assembly knowledge, it looks that on 64 bit machines gcc is trying to do a full 8 byte read into the register followed by a 2 byte shift ( instead of 4 then 2 byte read ). If the two extra bytes are out of bounds it will segfault. This explains why I get the sporadic segfaults in my bigger application ( where I can actually be at the page boundary ), but not in the test case. This only occurs on 64 bit machines, and my gcc version info is: nboley@ingvas:~/Desktop$ gcc -v Using built-in specs. Target: x86_64-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.4.4-14ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.4 --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu Thread model: posix gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5) Best, Nathan Boley --0016e6dd98552276d6049f68372d Content-Type: text/x-csrc; charset=US-ASCII; name="test_case.c" Content-Disposition: attachment; filename="test_case.c" Content-Transfer-Encoding: base64 X-Attachment-Id: f_glqyx7o50 Content-length: 1391 I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCi8qIERv ZXMgTk9UIGNhdXNlIG1lbW9yeSBlcnJvciAqLwp0eXBlZGVmIHN0cnVjdCBf X2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSkKewogICB1bnNpZ25lZCBzaG9y dCBjaHI7CiAgIHVuc2lnbmVkIGludCBsb2M7Cn0gR0VOT01FX0xPQ19UWVBF XzI7CgovKiBDYXVzZXMgbWVtb3J5IGVycm9yICovCnR5cGVkZWYgc3RydWN0 IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKQp7CiAgIHVuc2lnbmVkIGNo ciAgICAgICAgICAgIDoxNjsKICAgdW5zaWduZWQgbG9jICAgICAgICAgICAg OjMyOwp9IEdFTk9NRV9MT0NfVFlQRTsKCnZvaWQKcHJpbnRfbWFwcGVkX2xv Y2F0aW9uKCBHRU5PTUVfTE9DX1RZUEUgbG9jICkKewogICBwcmludGYoICIl aVxuIiwgbG9jLmxvYyApOwp9CgppbnQgbWFpbiggaW50IGFyZ2MsIGNoYXIq IGFyZ3YgKQp7CiAgIGNoYXIqIGRhdGE7CiAgIGRhdGEgPSBtYWxsb2MoMTIq c2l6ZW9mKGNoYXIpKTsKCiAgIEdFTk9NRV9MT0NfVFlQRSogZ2VuX2FycmF5 CiAgICAgICA9IChHRU5PTUVfTE9DX1RZUEUqKSBkYXRhOwogICBnZW5fYXJy YXlbMF0ubG9jID0gMDsKICAgZ2VuX2FycmF5WzFdLmxvYyA9IDE7CgogICAv KiBNYWtlIHN1cmUgdGhlIHN0cnVjdHVyZSBpcyBhY3R1YWxseSA2IGJ5dGVz ICovCiAgIHByaW50ZigiR2VuIExvYyBUeXBlIFNpemU6ICV6dVxuIiwgc2l6 ZW9mKEdFTk9NRV9MT0NfVFlQRSkgKTsKCiAgIC8qIFdvcmtzIGZpbmUuICov CiAgIHByaW50ZiggIiVpXG4iLCBnZW5fYXJyYXlbMV0ubG9jICk7CgogICAv KiBXb3JrcyBmaW5lICovCiAgIEdFTk9NRV9MT0NfVFlQRSBsb2MgPSBnZW5f YXJyYXlbMV07CiAgIHByaW50X21hcHBlZF9sb2NhdGlvbiggbG9jICk7Cgog ICAvKiBDYXVzZXMgdmFsZ3JpbmQgZXJyb3IgKi8KICAgLyogQ2F1c2UgLWxl ZmVuY2Ugc2VnZmF1bHQgKi8KICAgcHJpbnRfbWFwcGVkX2xvY2F0aW9uKCBn ZW5fYXJyYXlbMV0gKTsKCiAgIGZyZWUoIGRhdGEgKTsKfQo= --0016e6dd98552276d6049f68372d--