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.
The attached patch fixes this diffrence.
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
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@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