Sorry. I made a typo. Of course It's a runtime error.
Requirements:
* uClibc-ng with disabled option "Enable SuSv2 LEGACY functions"
(UCLIBC_SUSV2_LEGACY symbol).
Test progam:
$ cat test_valloc.c
#include <stdlib.h>
int main(int argc, char *argv[])
{
void *p;
p = valloc(1);
if (p == NULL)
return EXIT_FAILURE;
free(p);
return EXIT_SUCCESS;
}
The program above compiles without problems because of declaration in
"stdio.h", but it segfaults in runtime:
$ ./test_valloc
Segmentation fault
Definition of valloc also depends from UCLIBC_SUSV2_LEGACY
(libc/stdlib/Makefile.in):
CSRC-$(UCLIBC_SUSV2_LEGACY) += valloc.c
The patch transforms the issue to compile time error.
On Mon, Jul 24, 2017 at 11:29 PM, Waldemar Brodkorb <wbx(a)uclibc-ng.org>
wrote:
Hi Eugene,
Eugene Yudin wrote,
Hi,
Current uClibc-ng have issue with several different valloc declarations.
malloc.h:
#ifdef __UCLIBC_SUSV2_LEGACY__
/* Allocate SIZE bytes on a page boundary. */
extern __malloc_ptr_t valloc __MALLOC_P ((size_t __size))
__attribute_malloc__;
#endif
stdlib.h:
#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
/* Allocate SIZE bytes on a page boundary. The storage cannot be
freed. */
extern void *valloc (size_t __size) __THROW
__attribute_malloc__ __wur;
#endif
The second declaration doesn't use the define __UCLIBC_SUSV2_LEGACY__.
That leads to compile time problems.
Can you explain in which situations this leads to compile time
problems?
best regards
Waldemar
--
С уважением,
Евгений Юдин