// RUN: %clang_scudo %s -o %t// RUN: %run %t 2>&1// Verifies that calling malloc in a preinit_array function succeeds, and that// the resulting pointer can be freed at program termination.// On some Android versions, calling mmap() from a preinit function segfaults.// It looks like __mmap2.S ends up calling a NULL function pointer.// UNSUPPORTED: android#include <assert.h>#include <stdlib.h>#include <string.h>staticvoid*global_p=NULL;void__init(void){global_p=malloc(1);if(!global_p)exit(1);}void__fini(void){if(global_p)free(global_p);}intmain(intargc,char**argv){void*p=malloc(1);assert(p);free(p);return0;}__attribute__((section(".preinit_array"),used))void(*__local_preinit)(void)=__init;__attribute__((section(".fini_array"),used))void(*__local_fini)(void)=__fini;