Imported Upstream version 6.10.0.49

Former-commit-id: 1d6753294b2993e1fbf92de9366bb9544db4189b
This commit is contained in:
Xamarin Public Jenkins (auto-signing)
2020-01-16 16:38:04 +00:00
parent d94e79959b
commit 468663ddbb
48518 changed files with 2789335 additions and 61176 deletions

4
external/bdwgc/tools/callprocs.sh vendored Executable file
View File

@@ -0,0 +1,4 @@
#!/bin/sh
GC_DEBUG=1
export GC_DEBUG
$* 2>&1 | awk '{print "0x3e=c\""$0"\""};/^\t##PC##=/ {if ($2 != 0) {print $2"?i"}}' | adb $1 | sed "s/^ >/>/"

32
external/bdwgc/tools/if_mach.c vendored Normal file
View File

@@ -0,0 +1,32 @@
/* Conditionally execute a command based on machine and OS from gcconfig.h */
# include "private/gc_priv.h"
# include <stdio.h>
# include <string.h>
# include <unistd.h>
#ifdef __cplusplus
# define EXECV_ARGV_T char**
#else
/* The 2nd argument of execvp() prototype may be either char**, or */
/* char* const*, or const char* const*. */
# define EXECV_ARGV_T void*
#endif
int main(int argc, char **argv)
{
if (argc < 4) goto Usage;
if (strcmp(MACH_TYPE, argv[1]) != 0) return(0);
if (strlen(OS_TYPE) > 0 && strlen(argv[2]) > 0
&& strcmp(OS_TYPE, argv[2]) != 0) return(0);
fprintf(stderr, "^^^^Starting command^^^^\n");
fflush(stdout);
execvp(TRUSTED_STRING(argv[3]), (EXECV_ARGV_T)(argv + 3));
perror("Couldn't execute");
Usage:
fprintf(stderr, "Usage: %s mach_type os_type command\n", argv[0]);
fprintf(stderr, "Currently mach_type = %s, os_type = %s\n",
MACH_TYPE, OS_TYPE);
return(1);
}

58
external/bdwgc/tools/if_not_there.c vendored Normal file
View File

@@ -0,0 +1,58 @@
/* Conditionally execute the command argv[2] based if the file argv[1] */
/* does not exist. If the command is omitted (and the file does not */
/* exist) then just exit with a non-zero code. */
# include "private/gc_priv.h"
# include <stdio.h>
# include <stdlib.h>
# include <unistd.h>
#ifdef __DJGPP__
#include <dirent.h>
#endif /* __DJGPP__ */
#ifdef __cplusplus
# define EXECV_ARGV_T char**
#else
# define EXECV_ARGV_T void* /* see the comment in if_mach.c */
#endif
int main(int argc, char **argv)
{
FILE * f;
#ifdef __DJGPP__
DIR * d;
#endif /* __DJGPP__ */
char *fname;
if (argc < 2 || argc > 3)
goto Usage;
fname = TRUSTED_STRING(argv[1]);
f = fopen(fname, "rb");
if (f != NULL) {
fclose(f);
return(0);
}
f = fopen(fname, "r");
if (f != NULL) {
fclose(f);
return(0);
}
#ifdef __DJGPP__
if ((d = opendir(fname)) != 0) {
closedir(d);
return(0);
}
#endif
printf("^^^^Starting command^^^^\n");
fflush(stdout);
if (argc == 2)
return(2); /* the file does not exist but no command is given */
execvp(TRUSTED_STRING(argv[2]), (EXECV_ARGV_T)(argv + 2));
exit(1);
Usage:
fprintf(stderr, "Usage: %s file_name [command]\n", argv[0]);
return(1);
}

158
external/bdwgc/tools/setjmp_t.c vendored Normal file
View File

@@ -0,0 +1,158 @@
/*
* Copyright (c) 1991-1994 by Xerox Corporation. All rights reserved.
*
* THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
* OR IMPLIED. ANY USE IS AT YOUR OWN RISK.
*
* Permission is hereby granted to use or copy this program
* for any purpose, provided the above notices are retained on all copies.
* Permission to modify the code and to distribute modified code is granted,
* provided the above notices are retained, and a notice that the code was
* modified is included with the above copyright notice.
*/
/* Check whether setjmp actually saves registers in jmp_buf. */
/* If it doesn't, the generic mark_regs code won't work. */
/* Compilers vary as to whether they will put x in a */
/* (callee-save) register without -O. The code is */
/* contrived such that any decent compiler should put x in */
/* a callee-save register with -O. Thus it is */
/* recommended that this be run optimized. (If the machine */
/* has no callee-save registers, then the generic code is */
/* safe, but this will not be noticed by this piece of */
/* code.) This test appears to be far from perfect. */
#include <stdio.h>
#include <setjmp.h>
#include <string.h>
#include "private/gc_priv.h"
#ifdef OS2
/* GETPAGESIZE() is set to getpagesize() by default, but that */
/* doesn't really exist, and the collector doesn't need it. */
#define INCL_DOSFILEMGR
#define INCL_DOSMISC
#define INCL_DOSERRORS
#include <os2.h>
int getpagesize(void)
{
ULONG result[1];
if (DosQuerySysInfo(QSV_PAGE_SIZE, QSV_PAGE_SIZE,
(void *)result, sizeof(ULONG)) != NO_ERROR) {
fprintf(stderr, "DosQuerySysInfo failed\n");
result[0] = 4096;
}
return((int)(result[0]));
}
#elif defined(MSWIN32) || defined(MSWINCE) || defined(CYGWIN32)
# include <windows.h>
int getpagesize(void)
{
SYSTEM_INFO sysinfo;
GetSystemInfo(&sysinfo);
return sysinfo.dwPageSize;
}
#endif
struct a_s {
char a_a;
char * a_b;
} a;
word nested_sp(void)
{
# if GC_GNUC_PREREQ(4, 0)
return (word)__builtin_frame_address(0);
# else
volatile word sp;
sp = (word)(&sp);
return sp;
# endif
}
/* To prevent nested_sp inlining. */
word (*volatile nested_sp_fn)(void) = nested_sp;
int g(int x);
int main(void)
{
volatile word sp;
unsigned ps = GETPAGESIZE();
JMP_BUF b;
register int x = (int)strlen("a"); /* 1, slightly disguised */
static volatile int y = 0;
sp = (word)(&sp);
printf("This appears to be a %s running %s\n", MACH_TYPE, OS_TYPE);
# if defined(CPPCHECK)
(void)nested_sp(); /* to workaround a bug in cppcheck */
# endif
if (nested_sp_fn() < sp) {
printf("Stack appears to grow down, which is the default.\n");
printf("A good guess for STACKBOTTOM on this machine is 0x%lx.\n",
((unsigned long)sp + ps) & ~(ps-1));
} else {
printf("Stack appears to grow up.\n");
printf("Define STACK_GROWS_UP in gc_private.h\n");
printf("A good guess for STACKBOTTOM on this machine is 0x%lx.\n",
((unsigned long)sp + ps) & ~(ps-1));
}
printf("Note that this may vary between machines of ostensibly\n");
printf("the same architecture (e.g. Sun 3/50s and 3/80s).\n");
printf("On many machines the value is not fixed.\n");
printf("A good guess for ALIGNMENT on this machine is %lu.\n",
(unsigned long)((word)(&(a.a_b)) - (word)(&a)));
printf("The following is a very dubious test of one root marking"
" strategy.\n");
printf("Results may not be accurate/useful:\n");
/* Encourage the compiler to keep x in a callee-save register */
x = 2*x-1;
printf("\n");
x = 2*x-1;
(void)SETJMP(b);
if (y == 1) {
if (x == 2) {
printf("Setjmp-based generic mark_regs code probably won't work.\n");
printf("But we rarely try that anymore. If you have getcontect()\n");
printf("this probably doesn't matter.\n");
} else if (x == 1) {
printf("Setjmp-based register marking code may work.\n");
} else {
printf("Very strange setjmp implementation.\n");
}
}
y++;
x = 2;
if (y == 1) LONGJMP(b, 1);
printf("Some GC internal configuration stuff: \n");
printf("\tWORDSZ = %lu, ALIGNMENT = %d, GC_GRANULE_BYTES = %d\n",
(unsigned long)WORDSZ, ALIGNMENT, GC_GRANULE_BYTES);
printf("\tUsing one mark ");
# if defined(USE_MARK_BYTES)
printf("byte");
# else
printf("bit");
# endif
printf(" per ");
# if defined(MARK_BIT_PER_OBJ)
printf("object.\n");
# elif defined(MARK_BIT_PER_GRANULE)
printf("granule.\n");
# endif
# ifdef THREAD_LOCAL_ALLOC
printf("Thread local allocation enabled.\n");
# endif
# ifdef PARALLEL_MARK
printf("Parallel marking enabled.\n");
# endif
(void)g(x);
return(0);
}
int g(int x)
{
return(x);
}

82
external/bdwgc/tools/threadlibs.c vendored Normal file
View File

@@ -0,0 +1,82 @@
/*
* Copyright (c) 1994 by Xerox Corporation. All rights reserved.
* Copyright (c) 1996 by Silicon Graphics. All rights reserved.
* Copyright (c) 1998 by Fergus Henderson. All rights reserved.
* Copyright (c) 2000-2010 by Hewlett-Packard Development Company.
* All rights reserved.
*
* THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
* OR IMPLIED. ANY USE IS AT YOUR OWN RISK.
*
* Permission is hereby granted to use or copy this program
* for any purpose, provided the above notices are retained on all copies.
* Permission to modify the code and to distribute modified code is granted,
* provided the above notices are retained, and a notice that the code was
* modified is included with the above copyright notice.
*/
# include "private/gc_priv.h"
# include <stdio.h>
int main(void)
{
# if defined(GC_USE_LD_WRAP)
printf("-Wl,--wrap -Wl,dlopen "
"-Wl,--wrap -Wl,pthread_create -Wl,--wrap -Wl,pthread_join "
"-Wl,--wrap -Wl,pthread_detach -Wl,--wrap -Wl,pthread_sigmask "
"-Wl,--wrap -Wl,pthread_exit -Wl,--wrap -Wl,pthread_cancel\n");
# endif
# if (defined(GC_LINUX_THREADS) && !defined(HOST_ANDROID)) \
|| defined(GC_IRIX_THREADS) || defined(GC_DARWIN_THREADS) \
|| defined(GC_AIX_THREADS) || (defined(HURD) && defined(GC_THREADS))
# ifdef GC_USE_DLOPEN_WRAP
printf("-ldl ");
# endif
printf("-lpthread\n");
# endif
# if defined(GC_OPENBSD_THREADS)
printf("-pthread\n");
# endif
# if defined(GC_FREEBSD_THREADS)
# ifdef GC_USE_DLOPEN_WRAP
printf("-ldl ");
# endif
# if (__FREEBSD_version < 500000)
printf("-pthread\n");
# else /* __FREEBSD__ || __DragonFly__ */
printf("-lpthread\n");
# endif
# endif
# if defined(GC_NETBSD_THREADS)
printf("-lpthread -lrt\n");
# endif
# if defined(GC_HPUX_THREADS) || defined(GC_OSF1_THREADS)
printf("-lpthread -lrt\n");
# endif
# if defined(GC_SOLARIS_THREADS)
printf("-lthread -lposix4\n");
/* Is this right for recent versions? */
# endif
# if defined(GC_WIN32_THREADS) && defined(CYGWIN32)
printf("-lpthread\n");
# endif
# if defined(GC_WIN32_PTHREADS)
# ifdef PTW32_STATIC_LIB
/* assume suffix s for static version of the win32 pthread library */
printf("-lpthreadGC2s -lws2_32\n");
# else
printf("-lpthreadGC2\n");
# endif
# endif
# if defined(GC_OSF1_THREADS)
printf("-pthread -lrt\n"); /* DOB: must be -pthread, not -lpthread */
# endif
/* You need GCC 3.0.3 to build this one! */
/* DG/UX native gcc doesn't know what "-pthread" is */
# if defined(GC_DGUX386_THREADS)
printf("-ldl -pthread\n");
# endif
return 0;
}