From owner-freebsd-hackers@FreeBSD.ORG Wed Feb 13 17:14:05 2013 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 2A6DAF18 for ; Wed, 13 Feb 2013 17:14:05 +0000 (UTC) (envelope-from rysto32@gmail.com) Received: from mail-ob0-f172.google.com (mail-ob0-f172.google.com [209.85.214.172]) by mx1.freebsd.org (Postfix) with ESMTP id EE29E20C for ; Wed, 13 Feb 2013 17:14:04 +0000 (UTC) Received: by mail-ob0-f172.google.com with SMTP id tb18so1486198obb.17 for ; Wed, 13 Feb 2013 09:13:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:x-received:in-reply-to:references:date:message-id :subject:from:to:cc:content-type; bh=gBR3aMciBtCDFd9WLHJT5gMAw8Bg/qrhzUuWFXukMc4=; b=H2fSNd7mGCbRZq/SBDk202Flvqputdt/V52yjalqf6wnHdGiwO0XPEpE0Mzgypx4cK ttuVvOLZCeY5mPHOWVPhDfZlyuaKupXaP6iEEJIWHP6+N01BJsW4xwkP6FwhrXtvHnVb HWPn6Pb4NejSLv8NDfaKjwEVaCpD503p3/jYQL5VxzUJhK4LlED1NK4LS2UPaMwPofLk afcHOV+2nw46T5XRxWc/ucfcCK571L8aJDIIBDus+mLnuj4jcw7LBa6SMALitM5ahQeN YoMAqdVMFt83NlmC7DMUA2FIUwlOzEMvjaUEnME1d3fYUCLF9yyNpxJotY0MO99HRkLq O2rw== MIME-Version: 1.0 X-Received: by 10.182.112.34 with SMTP id in2mr17236097obb.80.1360775638255; Wed, 13 Feb 2013 09:13:58 -0800 (PST) Received: by 10.76.109.236 with HTTP; Wed, 13 Feb 2013 09:13:58 -0800 (PST) In-Reply-To: <20130213171825.76D3A9DC@centrum.cz> References: <20130213171825.76D3A9DC@centrum.cz> Date: Wed, 13 Feb 2013 12:13:58 -0500 Message-ID: Subject: Re: SIGSEGV/SIGBUS when accessing after end of mmapped file; why it differs with GCC? From: Ryan Stone To: natris@centrum.cz Content-Type: text/plain; charset=ISO-8859-1 X-Content-Filtered-By: Mailman/MimeDel 2.1.14 Cc: "freebsd-hackers@freebsd.org" X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 Feb 2013 17:14:05 -0000 On Wed, Feb 13, 2013 at 11:18 AM, wrote: > Hello, > I am porting an application which maps files into the memory and works > directly with the memory. When doing this, it can happen that when someone > resizes the file so that part of the previously mapped region is no longer > backed by the file, synchronous signal is sent to the process which needs > to be handled. > > On all other platforms than FreeBSD I have tested (Solaris, Linux, Darwin, > HP-UX) the signal in question is SIGBUS. However on FreeBSD, depending on > the >>compiler<< used, it is either SIGBUS or SIGSEGV. When I compile the > binary with "gcc version 4.2.1 20070831 patched [FreeBSD], amd64", the > signal is SIGBUS, when i use "gcc version 4.7.3 20121103 (prerelease) > (FreeBSD Ports Collection)", the signal is SIGSEGV. Please note that one of > the versions of gcc between 4.2 and 4.7 also caused SIGSEFV to be sent but > this did not matter for me as I did not need to use that version; I however > need gcc 4.7 to work because of c++11 stuff that my project has recently > started to use. > > Unfortunately registering signal handler on SIGSEGV is very inconvenient > for me; I would prefer to somehow switch the behavior to be sane. > > Please anyone has an idea whether or how this could be achieved? I have > tried to find out why, on single machine, just because of different gcc > version, kernel sends different signal but I have never worked with fbsd > kernel before and so my search did not succeed so far. > > Machine in question runs amd64 FreeBSD 9.1-RC2, but this has also happened > to me with older version of FreeBSD. > > > gcc 4.2 (same happens also with libstdc++ and co. from gcc 4.2): > Program received signal SIGBUS, Bus error. > (gdb) i shared > From To Syms Read Shared Object Library > 0x0000000800f2ef70 0x0000000800f3ee68 Yes (*) /libexec/ld-elf.so.1 > 0x000000080114d710 0x0000000801159748 Yes (*) /lib/libthr.so.3 > 0x00000008013c2d30 0x000000080142c656 Yes > /usr/local/lib/gcc47/libstdc++.so.6 > 0x00000008016737c0 0x00000008016891b8 Yes (*) /lib/libm.so.5 > 0x0000000801893930 0x00000008018a3088 Yes > /usr/local/lib/gcc47/libgcc_s.so.1 > 0x0000000801ad71d0 0x0000000801ba9358 Yes (*) /lib/libc.so.7 > > gcc 4.7: > Program received signal SIGSEGV, Segmentation fault. > (gdb) i shared > From To Syms Read Shared Object Library > 0x0000000800f5ef70 0x0000000800f6ee68 Yes (*) /libexec/ld-elf.so.1 > 0x000000080117d710 0x0000000801189748 Yes (*) /lib/libthr.so.3 > 0x00000008013f2d30 0x000000080145c656 Yes > /usr/local/lib/gcc47/libstdc++.so.6 > 0x00000008016a37c0 0x00000008016b91b8 Yes (*) /lib/libm.so.5 > 0x00000008018c3930 0x00000008018d3088 Yes > /usr/local/lib/gcc47/libgcc_s.so.1 > 0x0000000801b071d0 0x0000000801bd9358 Yes (*) /lib/libc.so.7 > > > I would be glad for any hint or information. > Kind Regards, > Ondrej Kolacek > _______________________________________________ > freebsd-hackers@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-hackers > To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org" I think that setting sysctl machdep.prot_fault_translation=1 would do what you want.