Always define gmalloc etc. in src/gmalloc.c

This is a work-around to prevent the compiler from using semantic
knowledge about malloc for optimization purposes.  E.g., gcc 5.2
with -O2 replaces most of calloc's definition by a call to calloc;
see Bug#22085.
* src/gmalloc.c [!HYBRID_MALLOC] (malloc, realloc, calloc)
(aligned_alloc, free): Do not undef.  Instead, define these as
functions (perhaps renamed to gmalloc etc.) in terms of gmalloc etc.
This commit is contained in:
Wolfgang Jenkner 2015-12-26 12:12:02 -08:00 committed by Paul Eggert
parent 0191077d6a
commit 4b1436b702

View file

@ -60,7 +60,6 @@ extern void emacs_abort (void);
which HYBRID_MACRO is defined. Any other platform that wants to
define it will have to define the macros DUMPED and
ALLOCATED_BEFORE_DUMPING, defined below for Cygwin. */
#ifdef HYBRID_MALLOC
#undef malloc
#undef realloc
#undef calloc
@ -70,7 +69,6 @@ extern void emacs_abort (void);
#define calloc gcalloc
#define aligned_alloc galigned_alloc
#define free gfree
#endif /* HYBRID_MALLOC */
#ifdef CYGWIN
extern void *bss_sbrk (ptrdiff_t size);
@ -1711,13 +1709,13 @@ valloc (size_t size)
return aligned_alloc (pagesize, size);
}
#ifdef HYBRID_MALLOC
#undef malloc
#undef realloc
#undef calloc
#undef aligned_alloc
#undef free
#ifdef HYBRID_MALLOC
/* Declare system malloc and friends. */
extern void *malloc (size_t size);
extern void *realloc (void *ptr, size_t size);
@ -1816,6 +1814,38 @@ hybrid_get_current_dir_name (void)
}
#endif
#else /* ! HYBRID_MALLOC */
void *
malloc (size_t size)
{
return gmalloc (size);
}
void *
calloc (size_t nmemb, size_t size)
{
return gcalloc (nmemb, size);
}
void
free (void *ptr)
{
gfree (ptr);
}
void *
aligned_alloc (size_t alignment, size_t size)
{
return galigned_alloc (alignment, size);
}
void *
realloc (void *ptr, size_t size)
{
return grealloc (ptr, size);
}
#endif /* HYBRID_MALLOC */
#ifdef GC_MCHECK