GNU bug report logs - #22085
25.0.50; src/gmalloc.c hit by gcc >= 5 optimization

Previous Next

Package: emacs;

Reported by: Wolfgang Jenkner <wjenkner <at> inode.at>

Date: Thu, 3 Dec 2015 17:55:02 UTC

Severity: normal

Tags: patch

Found in version 25.0.50

Done: Paul Eggert <eggert <at> cs.ucla.edu>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: help-debbugs <at> gnu.org (GNU bug Tracking System)
To: Wolfgang Jenkner <wjenkner <at> inode.at>
Subject: bug#22085: closed (Re: 25.0.50; src/gmalloc.c hit by gcc >= 5
 optimization)
Date: Sat, 26 Dec 2015 20:17:01 +0000
[Message part 1 (text/plain, inline)]
Your bug report

#22085: 25.0.50; src/gmalloc.c hit by gcc >= 5 optimization 

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to 22085 <at> debbugs.gnu.org.

-- 
22085: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=22085
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
From: Paul Eggert <eggert <at> cs.ucla.edu>
To: Wolfgang Jenkner <wjenkner <at> inode.at>
Cc: 22085-done <at> debbugs.gnu.org
Subject: Re: 25.0.50; src/gmalloc.c hit by gcc >= 5 optimization
Date: Sat, 26 Dec 2015 12:15:54 -0800
Thanks for the fix; I have applied this patch to the emacs-25 branch and am 
closing Bug#22085. The companion Bug#22086 will require more thinking, and I 
plan to follow up there.

[Message part 3 (message/rfc822, inline)]
From: Wolfgang Jenkner <wjenkner <at> inode.at>
To: bug-gnu-emacs <at> gnu.org
Subject: 25.0.50; src/gmalloc.c hit by gcc >= 5 optimization 
Date: Thu, 03 Dec 2015 18:53:25 +0100
[Message part 4 (text/plain, inline)]
On systems which use src/gmalloc.c but don't define HYBRID_MALLOC that
file defines global replacements for malloc and other memory management
functions.

Strictly speaking, this results in undefined behaviour according to ISO
C11 (wg14 n1570 draft) 7.1.3 and 7.22.3.

But it used to work.  However, with recent gcc versions and the default
optimization level (-O2), most of the definition of calloc is replaced
with a call to calloc (which the linker resolves to a call to that same
calloc).  Chances are temacs crashes because some library calls calloc.

This happens with the gcc 5.2.0 release and also with the 6.0.0 20151108
snapshot.

Please find below a self-contained test program which shows the problem
(try gcc5 -Wall -g -O2 callocopt.c -o callocopt && ./callocopt 666, and
then with -O instead of -O2, or even with -O2 -fno-optimize-strlen).

For comparison purposes, I note that, meanwhile, the issue has also
surfaced here

http://permalink.gmane.org/gmane.os.freebsd.devel.cvs.src/210733

Back to the problem with gmalloc.c, I'd suggest the simple
toolchain-independent work-around given in the patch below.

A real fix is to use hybrid malloc.

[callocopt.c (text/x-csrc, attachment)]
[0001-src-gmalloc.c-Always-define-gmalloc-and-friends.patch (text/x-diff, attachment)]

This bug report was last modified 9 years and 146 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.