diff --git a/.dotnet.metadata b/.dotnet.metadata
index 114ca75..3dec58c 100644
--- a/.dotnet.metadata
+++ b/.dotnet.metadata
@@ -1 +1 @@
-1f0ad270531d7847e9ef604316c7fc52635c2838 SOURCES/dotnet-v2.1.515-SDK.tar.gz
+4b1cef0d4502e0c244f993f3a69093072e6512a1 SOURCES/dotnet-v2.1.521-SDK.tar.gz
diff --git a/.gitignore b/.gitignore
index bca90e7..f2b4794 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1 @@
-SOURCES/dotnet-v2.1.515-SDK.tar.gz
+SOURCES/dotnet-v2.1.521-SDK.tar.gz
diff --git a/SOURCES/build-coreclr-clang10.patch b/SOURCES/build-coreclr-clang10.patch
deleted file mode 100644
index 96d0a46..0000000
--- a/SOURCES/build-coreclr-clang10.patch
+++ /dev/null
@@ -1,448 +0,0 @@
-commit e73f34074a381891ee92711e496134dce758a969
-Author: Omair Majid <omajid@redhat.com>
-Date:   Tue Jun 2 12:16:31 2020 -0400
-
-    Fix build with clang 10
-    
-    This contains a grab bag of fixes to fix the build with clang 10.
-    
-    - https://github.com/dotnet/coreclr/pull/23075
-    
-      Fix missing includes in coreclr/src/debug/createdump/
-    
-    - https://github.com/dotnet/runtime/pull/33096
-    
-      SList::Init: add missing constructor
-    
-    - A subset of https://github.com/dotnet/coreclr/pull/22129
-    
-      Just the parts that introduce the THROW_DECL macro in pal.h
-    
-    - https://github.com/dotnet/runtime/pull/32837
-    
-      This fixes THROW_DECL introduce in the previous PR to work with clang, which
-      is required in clang 10.
-    
-    - One new change:
-    
-      In a significant divergance, this commits adds more THROW_DECL macros
-      to all the math functions to address a ton of errors pointed out when
-      building SOS:
-    
-        In file included from /home/omajid/devel/dotnet/coreclr/src/ToolBox/SOS/Strike/strike.cpp:116:
-        In file included from /home/omajid/devel/dotnet/coreclr/src/vm/hillclimbing.h:19:
-        In file included from /home/omajid/devel/dotnet/coreclr/src/inc/complex.h:16:
-        In file included from /usr/bin/../lib/gcc/x86_64-redhat-linux/10/../../../../include/c++/10/math.h:36:
-        In file included from /usr/bin/../lib/gcc/x86_64-redhat-linux/10/../../../../include/c++/10/cmath:45:
-        In file included from /usr/include/math.h:290:
-        /usr/include/bits/mathcalls.h:53:13: error: exception specification in declaration does not match previous declaration
-        __MATHCALL (acos,, (_Mdouble_ __x));
-                    ^
-        /home/omajid/devel/dotnet/coreclr/src/pal/inc/pal.h:4395:26: note: previous declaration is here
-        PALIMPORT double __cdecl acos(double);
-                                 ^
-    
-      Then, to make sure the declarations and implementations match, it adds
-      THROW_DECL to the definitions in src/pal/src/cruntime/math.cpp
-    
-    Co-authored-by: Mike McLaughlin <mikem@microsoft.com>
-    Co-authored-by: Sinan Kaya <sinan.kaya@microsoft.com>
-    Co-authored-by: Tom Deseyn <tom.deseyn@gmail.com>
-
-diff --git a/src/debug/createdump/createdump.h b/src/debug/createdump/createdump.h
-index 4892e5464b..3f71b627e6 100644
---- a/src/debug/createdump/createdump.h
-+++ b/src/debug/createdump/createdump.h
-@@ -54,6 +54,8 @@ typedef int T_CONTEXT;
- #include <map>
- #include <set>
- #include <vector>
-+#include <string>
-+#include <array>
- #include "datatarget.h"
- #include "threadinfo.h"
- #include "memoryregion.h"
-diff --git a/src/inc/slist.h b/src/inc/slist.h
-index 2b81f9ba90..8ea6f9098e 100644
---- a/src/inc/slist.h
-+++ b/src/inc/slist.h
-@@ -160,13 +160,13 @@ public:
-     void Init()
-     {
-         LIMITED_METHOD_CONTRACT;
--        m_pHead = &m_link;
-+        m_pHead = PTR_SLink(&m_link);
-         // NOTE :: fHead variable is template argument 
-         // the following code is a compiled in, only if the fHead flag
-         // is set to false,
-         if (!fHead)
-         {
--            m_pTail = &m_link;
-+            m_pTail = PTR_SLink(&m_link);
-         }
-     }
- 
-@@ -274,7 +274,7 @@ public:
-         SLink   *ret = SLink::FindAndRemove(m_pHead, GetLink(pObj), &prior);
-         
-         if (ret == m_pTail)
--            m_pTail = prior;
-+            m_pTail = PTR_SLink(prior);
-         
-         return GetObject(ret);
-     }
-diff --git a/src/pal/inc/mbusafecrt.h b/src/pal/inc/mbusafecrt.h
-index f030b7ded2..7021439af2 100644
---- a/src/pal/inc/mbusafecrt.h
-+++ b/src/pal/inc/mbusafecrt.h
-@@ -31,6 +31,12 @@ typedef int errno_t;
- // define the return value for success 
- #define SAFECRT_SUCCESS 0
- 
-+#if defined(_MSC_VER)
-+#define THROW_DECL
-+#else
-+#define THROW_DECL throw()
-+#endif
-+
- #ifdef __cplusplus
-     extern "C" {
- #endif
-@@ -98,7 +104,7 @@ extern int swscanf_s( const WCHAR *string, const WCHAR *format, ... );
- extern int _snscanf_s( const char *string, size_t count, const char *format, ... );
- extern int _snwscanf_s( const WCHAR *string, size_t count, const WCHAR *format, ... );
- 
--extern errno_t memcpy_s( void * dst, size_t sizeInBytes, const void * src, size_t count );
-+extern errno_t memcpy_s( void * dst, size_t sizeInBytes, const void * src, size_t count ) THROW_DECL;
- extern errno_t memmove_s( void * dst, size_t sizeInBytes, const void * src, size_t count );
- 
- #ifdef __cplusplus
-diff --git a/src/pal/inc/pal.h b/src/pal/inc/pal.h
-index 5106c01421..de20524faf 100644
---- a/src/pal/inc/pal.h
-+++ b/src/pal/inc/pal.h
-@@ -137,6 +137,11 @@ extern "C" {
- #define LANG_THAI                        0x1e
- 
- /******************* Compiler-specific glue *******************************/
-+#if defined(_MSC_VER) || !defined(__cplusplus)
-+#define THROW_DECL
-+#else
-+#define THROW_DECL throw()
-+#endif
- 
- #ifndef _MSC_VER
- #if defined(CORECLR)
-@@ -4207,7 +4212,7 @@ EXTERN_C
- PALIMPORT
- void *PAL_memcpy (void *dest, const void *src, size_t count);
- 
--PALIMPORT void * __cdecl memcpy(void *, const void *, size_t);
-+PALIMPORT void * __cdecl memcpy(void *, const void *, size_t) THROW_DECL;
- 
- #define memcpy PAL_memcpy
- #define IS_PAL_memcpy 1
-@@ -4220,7 +4225,7 @@ PALIMPORT int    __cdecl memcmp(const void *, const void *, size_t);
- PALIMPORT void * __cdecl memset(void *, int, size_t);
- PALIMPORT void * __cdecl memmove(void *, const void *, size_t);
- PALIMPORT void * __cdecl memchr(const void *, int, size_t);
--PALIMPORT long long int __cdecl atoll(const char *);
-+PALIMPORT long long int __cdecl atoll(const char *) THROW_DECL;
- PALIMPORT size_t __cdecl strlen(const char *);
- PALIMPORT int __cdecl strcmp(const char*, const char *);
- PALIMPORT int __cdecl strncmp(const char*, const char *, size_t);
-@@ -4259,7 +4264,7 @@ PALIMPORT int __cdecl toupper(int);
- #define _TRUNCATE ((size_t)-1)
- #endif
- 
--PALIMPORT errno_t __cdecl memcpy_s(void *, size_t, const void *, size_t);
-+PALIMPORT errno_t __cdecl memcpy_s(void *, size_t, const void *, size_t) THROW_DECL;
- PALIMPORT errno_t __cdecl memmove_s(void *, size_t, const void *, size_t);
- PALIMPORT char * __cdecl _strlwr(char *);
- PALIMPORT int __cdecl _stricmp(const char *, const char *);
-@@ -4387,58 +4392,58 @@ PALIMPORT long long __cdecl llabs(long long);
- PALIMPORT int __cdecl _finite(double);
- PALIMPORT int __cdecl _isnan(double);
- PALIMPORT double __cdecl _copysign(double, double);
--PALIMPORT double __cdecl acos(double);
--PALIMPORT double __cdecl acosh(double);
--PALIMPORT double __cdecl asin(double);
--PALIMPORT double __cdecl asinh(double);
--PALIMPORT double __cdecl atan(double);
--PALIMPORT double __cdecl atanh(double);
--PALIMPORT double __cdecl atan2(double, double);
--PALIMPORT double __cdecl cbrt(double);
--PALIMPORT double __cdecl ceil(double);
--PALIMPORT double __cdecl cos(double);
--PALIMPORT double __cdecl cosh(double);
--PALIMPORT double __cdecl exp(double);
--PALIMPORT double __cdecl fabs(double);
--PALIMPORT double __cdecl floor(double);
--PALIMPORT double __cdecl fmod(double, double); 
--PALIMPORT double __cdecl log(double);
--PALIMPORT double __cdecl log10(double);
--PALIMPORT double __cdecl modf(double, double*);
--PALIMPORT double __cdecl pow(double, double);
--PALIMPORT double __cdecl sin(double);
--PALIMPORT double __cdecl sinh(double);
--PALIMPORT double __cdecl sqrt(double);
--PALIMPORT double __cdecl tan(double);
--PALIMPORT double __cdecl tanh(double);
-+PALIMPORT double __cdecl acos(double) THROW_DECL;
-+PALIMPORT double __cdecl acosh(double) THROW_DECL;
-+PALIMPORT double __cdecl asin(double) THROW_DECL;
-+PALIMPORT double __cdecl asinh(double) THROW_DECL;
-+PALIMPORT double __cdecl atan(double) THROW_DECL;
-+PALIMPORT double __cdecl atanh(double) THROW_DECL;
-+PALIMPORT double __cdecl atan2(double, double) THROW_DECL;
-+PALIMPORT double __cdecl cbrt(double) THROW_DECL;
-+PALIMPORT double __cdecl ceil(double) THROW_DECL;
-+PALIMPORT double __cdecl cos(double) THROW_DECL;
-+PALIMPORT double __cdecl cosh(double) THROW_DECL;
-+PALIMPORT double __cdecl exp(double) THROW_DECL;
-+PALIMPORT double __cdecl fabs(double) THROW_DECL;
-+PALIMPORT double __cdecl floor(double) THROW_DECL;
-+PALIMPORT double __cdecl fmod(double, double) THROW_DECL;
-+PALIMPORT double __cdecl log(double) THROW_DECL;
-+PALIMPORT double __cdecl log10(double) THROW_DECL;
-+PALIMPORT double __cdecl modf(double, double*) THROW_DECL;
-+PALIMPORT double __cdecl pow(double, double) THROW_DECL;
-+PALIMPORT double __cdecl sin(double) THROW_DECL;
-+PALIMPORT double __cdecl sinh(double) THROW_DECL;
-+PALIMPORT double __cdecl sqrt(double) THROW_DECL;
-+PALIMPORT double __cdecl tan(double) THROW_DECL;
-+PALIMPORT double __cdecl tanh(double) THROW_DECL;
- 
- PALIMPORT int __cdecl _finitef(float);
- PALIMPORT int __cdecl _isnanf(float);
- PALIMPORT float __cdecl _copysignf(float, float);
--PALIMPORT float __cdecl acosf(float);
--PALIMPORT float __cdecl acoshf(float);
--PALIMPORT float __cdecl asinf(float);
--PALIMPORT float __cdecl asinhf(float);
--PALIMPORT float __cdecl atanf(float);
--PALIMPORT float __cdecl atanhf(float);
--PALIMPORT float __cdecl atan2f(float, float);
--PALIMPORT float __cdecl cbrtf(float);
--PALIMPORT float __cdecl ceilf(float);
--PALIMPORT float __cdecl cosf(float);
--PALIMPORT float __cdecl coshf(float);
--PALIMPORT float __cdecl expf(float);
--PALIMPORT float __cdecl fabsf(float);
--PALIMPORT float __cdecl floorf(float);
--PALIMPORT float __cdecl fmodf(float, float); 
--PALIMPORT float __cdecl logf(float);
--PALIMPORT float __cdecl log10f(float);
--PALIMPORT float __cdecl modff(float, float*);
--PALIMPORT float __cdecl powf(float, float);
--PALIMPORT float __cdecl sinf(float);
--PALIMPORT float __cdecl sinhf(float);
--PALIMPORT float __cdecl sqrtf(float);
--PALIMPORT float __cdecl tanf(float);
--PALIMPORT float __cdecl tanhf(float);
-+PALIMPORT float __cdecl acosf(float) THROW_DECL;
-+PALIMPORT float __cdecl acoshf(float) THROW_DECL;
-+PALIMPORT float __cdecl asinf(float) THROW_DECL;
-+PALIMPORT float __cdecl asinhf(float) THROW_DECL;
-+PALIMPORT float __cdecl atanf(float) THROW_DECL;
-+PALIMPORT float __cdecl atanhf(float) THROW_DECL;
-+PALIMPORT float __cdecl atan2f(float, float) THROW_DECL;
-+PALIMPORT float __cdecl cbrtf(float) THROW_DECL;
-+PALIMPORT float __cdecl ceilf(float) THROW_DECL;
-+PALIMPORT float __cdecl cosf(float) THROW_DECL;
-+PALIMPORT float __cdecl coshf(float) THROW_DECL;
-+PALIMPORT float __cdecl expf(float) THROW_DECL;
-+PALIMPORT float __cdecl fabsf(float) THROW_DECL;
-+PALIMPORT float __cdecl floorf(float) THROW_DECL;
-+PALIMPORT float __cdecl fmodf(float, float) THROW_DECL;
-+PALIMPORT float __cdecl logf(float) THROW_DECL;
-+PALIMPORT float __cdecl log10f(float) THROW_DECL;
-+PALIMPORT float __cdecl modff(float, float*) THROW_DECL;
-+PALIMPORT float __cdecl powf(float, float) THROW_DECL;
-+PALIMPORT float __cdecl sinf(float) THROW_DECL;
-+PALIMPORT float __cdecl sinhf(float) THROW_DECL;
-+PALIMPORT float __cdecl sqrtf(float) THROW_DECL;
-+PALIMPORT float __cdecl tanf(float) THROW_DECL;
-+PALIMPORT float __cdecl tanhf(float) THROW_DECL;
- 
- #ifndef PAL_STDCPP_COMPAT
- 
-diff --git a/src/pal/src/cruntime/math.cpp b/src/pal/src/cruntime/math.cpp
-index a36ac9aa93..81345ea14b 100644
---- a/src/pal/src/cruntime/math.cpp
-+++ b/src/pal/src/cruntime/math.cpp
-@@ -117,7 +117,7 @@ Function:
- 
- See MSDN.
- --*/
--PALIMPORT double __cdecl PAL_acos(double x)
-+PALIMPORT double __cdecl PAL_acos(double x) THROW_DECL
- {
-     double ret;
-     PERF_ENTRY(acos);
-@@ -147,7 +147,7 @@ Function:
- 
- See MSDN.
- --*/
--PALIMPORT double __cdecl PAL_acosh(double x)
-+PALIMPORT double __cdecl PAL_acosh(double x) THROW_DECL
- {
-     double ret;
-     PERF_ENTRY(acosh);
-@@ -166,7 +166,7 @@ Function:
- 
- See MSDN.
- --*/
--PALIMPORT double __cdecl PAL_asin(double x)
-+PALIMPORT double __cdecl PAL_asin(double x) THROW_DECL
- {
-     double ret;
-     PERF_ENTRY(asin);
-@@ -196,7 +196,7 @@ Function:
- 
- See MSDN.
- --*/
--PALIMPORT double __cdecl PAL_asinh(double x)
-+PALIMPORT double __cdecl PAL_asinh(double x) THROW_DECL
- {
-     double ret;
-     PERF_ENTRY(asinh);
-@@ -215,7 +215,7 @@ Function:
- 
- See MSDN.
- --*/
--PALIMPORT double __cdecl PAL_atan2(double y, double x)
-+PALIMPORT double __cdecl PAL_atan2(double y, double x) THROW_DECL
- {
-     double ret;
-     PERF_ENTRY(atan2);
-@@ -255,7 +255,7 @@ Function:
- 
- See MSDN.
- --*/
--PALIMPORT double __cdecl PAL_exp(double x)
-+PALIMPORT double __cdecl PAL_exp(double x) THROW_DECL
- {
-     double ret;
-     PERF_ENTRY(exp);
-@@ -306,7 +306,7 @@ Function:
- 
- See MSDN.
- --*/
--PALIMPORT double __cdecl PAL_log(double x)
-+PALIMPORT double __cdecl PAL_log(double x) THROW_DECL
- {
-     double ret;
-     PERF_ENTRY(log);
-@@ -336,7 +336,7 @@ Function:
- 
- See MSDN.
- --*/
--PALIMPORT double __cdecl PAL_log10(double x)
-+PALIMPORT double __cdecl PAL_log10(double x) THROW_DECL
- {
-     double ret;
-     PERF_ENTRY(log10);
-@@ -366,7 +366,7 @@ Function:
- 
- See MSDN.
- --*/
--PALIMPORT double __cdecl PAL_pow(double x, double y)
-+PALIMPORT double __cdecl PAL_pow(double x, double y) THROW_DECL
- {
-     double ret;
-     PERF_ENTRY(pow);
-@@ -527,7 +527,7 @@ Function:
- 
- See MSDN.
- --*/
--PALIMPORT float __cdecl PAL_acosf(float x)
-+PALIMPORT float __cdecl PAL_acosf(float x) THROW_DECL
- {
-     float ret;
-     PERF_ENTRY(acosf);
-@@ -557,7 +557,7 @@ Function:
- 
- See MSDN.
- --*/
--PALIMPORT float __cdecl PAL_acoshf(float x)
-+PALIMPORT float __cdecl PAL_acoshf(float x) THROW_DECL
- {
-     float ret;
-     PERF_ENTRY(acoshf);
-@@ -576,7 +576,7 @@ Function:
- 
- See MSDN.
- --*/
--PALIMPORT float __cdecl PAL_asinf(float x)
-+PALIMPORT float __cdecl PAL_asinf(float x) THROW_DECL
- {
-     float ret;
-     PERF_ENTRY(asinf);
-@@ -606,7 +606,7 @@ Function:
- 
- See MSDN.
- --*/
--PALIMPORT float __cdecl PAL_asinhf(float x)
-+PALIMPORT float __cdecl PAL_asinhf(float x) THROW_DECL
- {
-     float ret;
-     PERF_ENTRY(asinhf);
-@@ -626,7 +626,7 @@ Function:
- 
- See MSDN.
- --*/
--PALIMPORT float __cdecl PAL_atan2f(float y, float x)
-+PALIMPORT float __cdecl PAL_atan2f(float y, float x) THROW_DECL
- {
-     float ret;
-     PERF_ENTRY(atan2f);
-@@ -666,7 +666,7 @@ Function:
- 
- See MSDN.
- --*/
--PALIMPORT float __cdecl PAL_expf(float x)
-+PALIMPORT float __cdecl PAL_expf(float x) THROW_DECL
- {
-     float ret;
-     PERF_ENTRY(expf);
-@@ -698,7 +698,7 @@ Function:
- 
- See MSDN.
- --*/
--PALIMPORT float __cdecl PAL_logf(float x)
-+PALIMPORT float __cdecl PAL_logf(float x) THROW_DECL
- {
-     float ret;
-     PERF_ENTRY(logf);
-@@ -728,7 +728,7 @@ Function:
- 
- See MSDN.
- --*/
--PALIMPORT float __cdecl PAL_log10f(float x)
-+PALIMPORT float __cdecl PAL_log10f(float x) THROW_DECL
- {
-     float ret;
-     PERF_ENTRY(log10f);
-@@ -758,7 +758,7 @@ Function:
- 
- See MSDN.
- --*/
--PALIMPORT float __cdecl PAL_powf(float x, float y)
-+PALIMPORT float __cdecl PAL_powf(float x, float y) THROW_DECL
- {
-     float ret;
-     PERF_ENTRY(powf);
-diff --git a/src/pal/src/safecrt/memcpy_s.cpp b/src/pal/src/safecrt/memcpy_s.cpp
-index 27aeb79665..a75ec41861 100644
---- a/src/pal/src/safecrt/memcpy_s.cpp
-+++ b/src/pal/src/safecrt/memcpy_s.cpp
-@@ -54,7 +54,7 @@ errno_t __cdecl memcpy_s(
-     size_t sizeInBytes,
-     const void * src,
-     size_t count
--)
-+) THROW_DECL
- {
-     if (count == 0)
-     {
diff --git a/SOURCES/build-coreclr-mscorlib.patch b/SOURCES/build-coreclr-mscorlib.patch
deleted file mode 100644
index ca59e77..0000000
--- a/SOURCES/build-coreclr-mscorlib.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From 5164e76ce01fc36833a7f5e6fb7b1ec2f55c2262 Mon Sep 17 00:00:00 2001
-From: Omair Majid <omajid@redhat.com>
-Date: Wed, 1 Aug 2018 12:02:53 -0400
-Subject: [PATCH] Use the identified python when building
- System.Private.CoreLib (#19043)
-
-build.sh and build.cmd contain logic to identify a working version of
-python to use. System.Private.CoreLib ignores that and directly invokes
-'python', which may not work, or even execute a different program.
----
- build.sh                                                 | 2 ++
- src/System.Private.CoreLib/System.Private.CoreLib.csproj | 2 +-
- 2 files changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/build.sh b/build.sh
-index 091d6227caf..4002f2744c2 100755
---- a/build.sh
-+++ b/build.sh
-@@ -22,6 +22,8 @@ then
-    exit 1
- fi
- 
-+export PYTHON
-+
- usage()
- {
-     echo "Usage: $0 [BuildArch] [BuildType] [-verbose] [-coverage] [-cross] [-clangx.y] [-ninja] [-configureonly] [-skipconfigure] [-skipnative] [-skipmscorlib] [-skiptests] [-stripsymbols] [-ignorewarnings] [-cmakeargs] [-bindir]"
-diff --git a/src/mscorlib/System.Private.CoreLib.csproj b/src/mscorlib/System.Private.CoreLib.csproj
-index 9a2fc681703..0a02d3cffdf 100644
---- a/src/mscorlib/System.Private.CoreLib.csproj
-+++ b/src/mscorlib/System.Private.CoreLib.csproj
-@@ -543,7 +543,7 @@
-     <PropertyGroup>
-       <CMakeDefinitionSaveFile>$(IntermediateOutputPath)..\cmake.definitions</CMakeDefinitionSaveFile>
-     </PropertyGroup>
--    <Exec Command="python $(MSBuildThisFileDirectory)..\scripts\check-definitions.py &quot;$(CMakeDefinitionSaveFile)&quot; &quot;$(DefineConstants)&quot; &quot;$(IgnoreDefineConstants)&quot; " />
-+    <Exec Command="&quot;$(PYTHON)&quot; $(MSBuildThisFileDirectory)..\scripts\check-definitions.py &quot;$(CMakeDefinitionSaveFile)&quot; &quot;$(DefineConstants)&quot; &quot;$(IgnoreDefineConstants)&quot; " />
-   </Target>
-   <PropertyGroup Condition="'$(BuildOS)' == 'Windows_NT'">
-     <EnableDotnetAnalyzers Condition="'$(EnableDotnetAnalyzers)'==''">true</EnableDotnetAnalyzers>
diff --git a/SOURCES/coreclr-build-python3.patch b/SOURCES/coreclr-build-python3.patch
deleted file mode 100644
index 1090a12..0000000
--- a/SOURCES/coreclr-build-python3.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From 7e0608fee5cacbf5bf7d0c3886e2fcb1a9d10754 Mon Sep 17 00:00:00 2001
-From: Omair Majid <omajid@redhat.com>
-Date: Wed, 9 Jan 2019 12:28:48 -0500
-Subject: [PATCH] Support building with python3 on unix (#19356)
-
-The windows build scripts try finding python in order of python3,
-python2 and then python. The unix build scripts dont. They just try
-python2 variants and then fail. This change makes brings them closer
-together by letting users build using only python3.
----
- build.sh | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/build.sh b/build.sh
-index a0b1742effb..14452ad5ac5 100755
---- a/build.sh
-+++ b/build.sh
-@@ -7,9 +7,9 @@ export ghprbCommentBody=
- 
- # resolve python-version to use
- if [ "$PYTHON" == "" ] ; then
--    if ! PYTHON=$(command -v python2.7 || command -v python2 || command -v python)
-+    if ! PYTHON=$(command -v python3 || command -v python2 || command -v python)
-     then
--       echo "Unable to locate build-dependency python2.x!" 1>&2
-+       echo "Unable to locate build-dependency python!" 1>&2
-        exit 1
-     fi
- fi
-@@ -17,7 +17,7 @@ fi
- # useful in case of explicitly set option.
- if ! command -v $PYTHON > /dev/null
- then
--   echo "Unable to locate build-dependency python2.x ($PYTHON)!" 1>&2
-+   echo "Unable to locate build-dependency python ($PYTHON)!" 1>&2
-    exit 1
- fi
- 
diff --git a/SOURCES/coreclr-cmake-python3.patch b/SOURCES/coreclr-cmake-python3.patch
deleted file mode 100644
index 285cdc4..0000000
--- a/SOURCES/coreclr-cmake-python3.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From e7c6f87f54be723724a4c996d815d59b515b01a6 Mon Sep 17 00:00:00 2001
-From: Omair Majid <omajid@redhat.com>
-Date: Thu, 31 Jan 2019 16:09:35 -0500
-Subject: [PATCH] Update python lookup in CMakeLists.txt to match
- build.(sh|cmd) (#22145)
-
-Use the same logic that's used in build.sh/build.cmd to lookup python:
-first search for `python3`, then fall back to `python2` and finally to
-`python`.
----
- CMakeLists.txt | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 82c19a9cbaa..31b814f118d 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -37,7 +37,7 @@ OPTION(CLR_CMAKE_ENABLE_CODE_COVERAGE "Enable code coverage" OFF)
- OPTION(CLR_CMAKE_WARNINGS_ARE_ERRORS "Warnings are errors" ON)
- 
- # Ensure that python is present
--find_program(PYTHON NAMES python2.7 python2 python)
-+find_program(PYTHON NAMES python3 python2 python)
- if (PYTHON STREQUAL "PYTHON-NOTFOUND")
-     message(FATAL_ERROR "PYTHON not found: Please install Python 2.7.9 or later from https://www.python.org/downloads/")
- endif()
diff --git a/SOURCES/coreclr-libunwind-fno-common.patch b/SOURCES/coreclr-libunwind-fno-common.patch
new file mode 100644
index 0000000..5a1d407
--- /dev/null
+++ b/SOURCES/coreclr-libunwind-fno-common.patch
@@ -0,0 +1,402 @@
+From 29e17d8d2ccbca07c423e3089a6d5ae8a1c9cb6e Mon Sep 17 00:00:00 2001
+From: Yichao Yu <yyc1992@gmail.com>
+Date: Tue, 31 Mar 2020 00:43:32 -0400
+Subject: [PATCH] Fix compilation with -fno-common.
+
+Making all other archs consistent with IA64 which should not have this problem.
+Also move the FIXME to the correct place.
+
+Also add some minimum comments about this...
+---
+ src/aarch64/Ginit.c                        | 15 +++++++--------
+ src/arm/Ginit.c                            | 15 +++++++--------
+ src/coredump/_UPT_get_dyn_info_list_addr.c |  5 +++++
+ src/hppa/Ginit.c                           | 15 +++++++--------
+ src/ia64/Ginit.c                           |  1 +
+ src/mi/Gfind_dynamic_proc_info.c           |  1 +
+ src/mips/Ginit.c                           | 15 +++++++--------
+ src/ppc32/Ginit.c                          | 11 +++++++----
+ src/ppc64/Ginit.c                          | 11 +++++++----
+ src/ptrace/_UPT_get_dyn_info_list_addr.c   |  5 +++++
+ src/s390x/Ginit.c                          | 15 +++++++--------
+ src/sh/Ginit.c                             | 15 +++++++--------
+ src/tilegx/Ginit.c                         | 15 +++++++--------
+ src/x86/Ginit.c                            | 15 +++++++--------
+ src/x86_64/Ginit.c                         | 15 +++++++--------
+ 15 files changed, 89 insertions(+), 80 deletions(-)
+
+diff --git a/src/pal/src/libunwind/src/aarch64/Ginit.c b/src/pal/src/libunwind/src/aarch64/Ginit.c
+index dec235c82..35389762f 100644
+--- a/src/pal/src/libunwind/src/aarch64/Ginit.c
++++ b/src/pal/src/libunwind/src/aarch64/Ginit.c
+@@ -61,13 +61,6 @@ tdep_uc_addr (unw_tdep_context_t *uc, int reg)
+ 
+ # endif /* UNW_LOCAL_ONLY */
+ 
+-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
+-
+-/* XXX fix me: there is currently no way to locate the dyn-info list
+-       by a remote unwinder.  On ia64, this is done via a special
+-       unwind-table entry.  Perhaps something similar can be done with
+-       DWARF2 unwind info.  */
+-
+ static void
+ put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
+ {
+@@ -78,7 +71,13 @@ static int
+ get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
+                         void *arg)
+ {
+-  *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
++#ifndef UNW_LOCAL_ONLY
++# pragma weak _U_dyn_info_list_addr
++  if (!_U_dyn_info_list_addr)
++    return -UNW_ENOINFO;
++#endif
++  // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
++  *dyn_info_list_addr = _U_dyn_info_list_addr ();
+   return 0;
+ }
+ 
+diff --git a/src/pal/src/libunwind/src/arm/Ginit.c b/ssrc/pal/src/libunwind/src/arm/Ginit.c
+index 2720d063a..0bac0d72d 100644
+--- a/src/pal/src/libunwind/src/arm/Ginit.c
++++ b/src/pal/src/libunwind/src/arm/Ginit.c
+@@ -57,18 +57,17 @@ tdep_uc_addr (unw_tdep_context_t *uc, int reg)
+ 
+ # endif /* UNW_LOCAL_ONLY */
+ 
+-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
+-
+-/* XXX fix me: there is currently no way to locate the dyn-info list
+-       by a remote unwinder.  On ia64, this is done via a special
+-       unwind-table entry.  Perhaps something similar can be done with
+-       DWARF2 unwind info.  */
+-
+ static int
+ get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
+                         void *arg)
+ {
+-  *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
++#ifndef UNW_LOCAL_ONLY
++# pragma weak _U_dyn_info_list_addr
++  if (!_U_dyn_info_list_addr)
++    return -UNW_ENOINFO;
++#endif
++  // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
++  *dyn_info_list_addr = _U_dyn_info_list_addr ();
+   return 0;
+ }
+ 
+diff --git a/src/pal/src/libunwind/src/coredump/_UPT_get_dyn_info_list_addr.c b/src/pal/src/libunwind/src/coredump/_UPT_get_dyn_info_list_addr.c
+index 0d1190556..739ed0569 100644
+--- a/src/pal/src/libunwind/src/coredump/_UPT_get_dyn_info_list_addr.c
++++ b/src/pal/src/libunwind/src/coredump/_UPT_get_dyn_info_list_addr.c
+@@ -74,6 +74,11 @@ get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg,
+ 
+ #else
+ 
++/* XXX fix me: there is currently no way to locate the dyn-info list
++       by a remote unwinder.  On ia64, this is done via a special
++       unwind-table entry.  Perhaps something similar can be done with
++       DWARF2 unwind info.  */
++
+ static inline int
+ get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg,
+                int *countp)
+diff --git a/src/pal/src/libunwind/src/hppa/Ginit.c b/src/pal/src/libunwind/src/hppa/Ginit.c
+index 461e4b93d..265455a68 100644
+--- a/src/pal/src/libunwind/src/hppa/Ginit.c
++++ b/src/pal/src/libunwind/src/hppa/Ginit.c
+@@ -64,13 +64,6 @@ _Uhppa_uc_addr (ucontext_t *uc, int reg)
+ 
+ # endif /* UNW_LOCAL_ONLY */
+ 
+-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
+-
+-/* XXX fix me: there is currently no way to locate the dyn-info list
+-       by a remote unwinder.  On ia64, this is done via a special
+-       unwind-table entry.  Perhaps something similar can be done with
+-       DWARF2 unwind info.  */
+-
+ static void
+ put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
+ {
+@@ -81,7 +74,13 @@ static int
+ get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
+                         void *arg)
+ {
+-  *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
++#ifndef UNW_LOCAL_ONLY
++# pragma weak _U_dyn_info_list_addr
++  if (!_U_dyn_info_list_addr)
++    return -UNW_ENOINFO;
++#endif
++  // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
++  *dyn_info_list_addr = _U_dyn_info_list_addr ();
+   return 0;
+ }
+ 
+diff --git a/src/pal/src/libunwind/src/ia64/Ginit.c b/src/pal/src/libunwind/src/ia64/Ginit.c
+index b09a2ad57..8601bb3ca 100644
+--- a/src/pal/src/libunwind/src/ia64/Ginit.c
++++ b/src/pal/src/libunwind/src/ia64/Ginit.c
+@@ -68,6 +68,7 @@ get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
+   if (!_U_dyn_info_list_addr)
+     return -UNW_ENOINFO;
+ #endif
++  // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
+   *dyn_info_list_addr = _U_dyn_info_list_addr ();
+   return 0;
+ }
+diff --git a/src/pal/src/libunwind/src/mi/Gfind_dynamic_proc_info.c b/src/pal/src/libunwind/src/mi/Gfind_dynamic_proc_info.c
+index 98d350128..2e7c62e5e 100644
+--- a/src/pal/src/libunwind/src/mi/Gfind_dynamic_proc_info.c
++++ b/src/pal/src/libunwind/src/mi/Gfind_dynamic_proc_info.c
+@@ -49,6 +49,7 @@ local_find_proc_info (unw_addr_space_t as, unw_word_t ip, unw_proc_info_t *pi,
+     return -UNW_ENOINFO;
+ #endif
+ 
++  // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
+   list = (unw_dyn_info_list_t *) (uintptr_t) _U_dyn_info_list_addr ();
+   for (di = list->first; di; di = di->next)
+     if (ip >= di->start_ip && ip < di->end_ip)
+diff --git a/src/pal/src/libunwind/src/mips/Ginit.c b/src/pal/src/libunwind/src/mips/Ginit.c
+index 3df170c75..bf7a8f5a8 100644
+--- a/src/pal/src/libunwind/src/mips/Ginit.c
++++ b/src/pal/src/libunwind/src/mips/Ginit.c
+@@ -69,13 +69,6 @@ tdep_uc_addr (ucontext_t *uc, int reg)
+ 
+ # endif /* UNW_LOCAL_ONLY */
+ 
+-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
+-
+-/* XXX fix me: there is currently no way to locate the dyn-info list
+-       by a remote unwinder.  On ia64, this is done via a special
+-       unwind-table entry.  Perhaps something similar can be done with
+-       DWARF2 unwind info.  */
+-
+ static void
+ put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
+ {
+@@ -86,7 +79,13 @@ static int
+ get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
+                         void *arg)
+ {
+-  *dyn_info_list_addr = (unw_word_t) (intptr_t) &_U_dyn_info_list;
++#ifndef UNW_LOCAL_ONLY
++# pragma weak _U_dyn_info_list_addr
++  if (!_U_dyn_info_list_addr)
++    return -UNW_ENOINFO;
++#endif
++  // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
++  *dyn_info_list_addr = _U_dyn_info_list_addr ();
+   return 0;
+ }
+ 
+diff --git a/src/pal/src/libunwind/src/ppc32/Ginit.c b/src/pal/src/libunwind/src/ppc32/Ginit.c
+index ba302448a..7b4545580 100644
+--- a/src/pal/src/libunwind/src/ppc32/Ginit.c
++++ b/src/pal/src/libunwind/src/ppc32/Ginit.c
+@@ -91,9 +91,6 @@ tdep_uc_addr (ucontext_t *uc, int reg)
+ 
+ # endif /* UNW_LOCAL_ONLY */
+ 
+-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
+-
+-
+ static void
+ put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
+ {
+@@ -104,7 +101,13 @@ static int
+ get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
+                         void *arg)
+ {
+-  *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
++#ifndef UNW_LOCAL_ONLY
++# pragma weak _U_dyn_info_list_addr
++  if (!_U_dyn_info_list_addr)
++    return -UNW_ENOINFO;
++#endif
++  // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
++  *dyn_info_list_addr = _U_dyn_info_list_addr ();
+   return 0;
+ }
+ 
+diff --git a/src/pal/src/libunwind/src/ppc64/Ginit.c b/src/pal/src/libunwind/src/ppc64/Ginit.c
+index 4c88cd6e7..7bfb395a7 100644
+--- a/src/pal/src/libunwind/src/ppc64/Ginit.c
++++ b/src/pal/src/libunwind/src/ppc64/Ginit.c
+@@ -95,9 +95,6 @@ tdep_uc_addr (ucontext_t *uc, int reg)
+ 
+ # endif /* UNW_LOCAL_ONLY */
+ 
+-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
+-
+-
+ static void
+ put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
+ {
+@@ -108,7 +105,13 @@ static int
+ get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
+                         void *arg)
+ {
+-  *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
++#ifndef UNW_LOCAL_ONLY
++# pragma weak _U_dyn_info_list_addr
++  if (!_U_dyn_info_list_addr)
++    return -UNW_ENOINFO;
++#endif
++  // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
++  *dyn_info_list_addr = _U_dyn_info_list_addr ();
+   return 0;
+ }
+ 
+diff --git a/src/pal/src/libunwind/src/ptrace/_UPT_get_dyn_info_list_addr.c b/src/pal/src/libunwind/src/ptrace/_UPT_get_dyn_info_list_addr.c
+index cc5ed0441..16671d453 100644
+--- a/src/pal/src/libunwind/src/ptrace/_UPT_get_dyn_info_list_addr.c
++++ b/src/pal/src/libunwind/src/ptrace/_UPT_get_dyn_info_list_addr.c
+@@ -71,6 +71,11 @@ get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg,
+ 
+ #else
+ 
++/* XXX fix me: there is currently no way to locate the dyn-info list
++       by a remote unwinder.  On ia64, this is done via a special
++       unwind-table entry.  Perhaps something similar can be done with
++       DWARF2 unwind info.  */
++
+ static inline int
+ get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg,
+                int *countp)
+diff --git a/src/pal/src/libunwind/src/sh/Ginit.c b/src/pal/src/libunwind/src/sh/Ginit.c
+index 52988a721..9fe96d2bd 100644
+--- a/src/pal/src/libunwind/src/sh/Ginit.c
++++ b/src/pal/src/libunwind/src/sh/Ginit.c
+@@ -58,13 +58,6 @@ tdep_uc_addr (ucontext_t *uc, int reg)
+ 
+ # endif /* UNW_LOCAL_ONLY */
+ 
+-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
+-
+-/* XXX fix me: there is currently no way to locate the dyn-info list
+-       by a remote unwinder.  On ia64, this is done via a special
+-       unwind-table entry.  Perhaps something similar can be done with
+-       DWARF2 unwind info.  */
+-
+ static void
+ put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
+ {
+@@ -75,7 +68,13 @@ static int
+ get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
+                         void *arg)
+ {
+-  *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
++#ifndef UNW_LOCAL_ONLY
++# pragma weak _U_dyn_info_list_addr
++  if (!_U_dyn_info_list_addr)
++    return -UNW_ENOINFO;
++#endif
++  // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
++  *dyn_info_list_addr = _U_dyn_info_list_addr ();
+   return 0;
+ }
+ 
+diff --git a/src/pal/src/libunwind/src/tilegx/Ginit.c b/src/pal/src/libunwind/src/tilegx/Ginit.c
+index 7564a558b..925e64132 100644
+--- a/src/pal/src/libunwind/src/tilegx/Ginit.c
++++ b/src/pal/src/libunwind/src/tilegx/Ginit.c
+@@ -64,13 +64,6 @@ tdep_uc_addr (ucontext_t *uc, int reg)
+ 
+ # endif /* UNW_LOCAL_ONLY */
+ 
+-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
+-
+-/* XXX fix me: there is currently no way to locate the dyn-info list
+-       by a remote unwinder.  On ia64, this is done via a special
+-       unwind-table entry.  Perhaps something similar can be done with
+-       DWARF2 unwind info.  */
+-
+ static void
+ put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
+ {
+@@ -81,7 +74,13 @@ static int
+ get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
+                         void *arg)
+ {
+-  *dyn_info_list_addr = (unw_word_t) (intptr_t) &_U_dyn_info_list;
++#ifndef UNW_LOCAL_ONLY
++# pragma weak _U_dyn_info_list_addr
++  if (!_U_dyn_info_list_addr)
++    return -UNW_ENOINFO;
++#endif
++  // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
++  *dyn_info_list_addr = _U_dyn_info_list_addr ();
+   return 0;
+ }
+ 
+diff --git a/src/pal/src/libunwind/src/x86/Ginit.c b/src/pal/src/libunwind/src/x86/Ginit.c
+index f6b8dc27d..3cec74a21 100644
+--- a/src/pal/src/libunwind/src/x86/Ginit.c
++++ b/src/pal/src/libunwind/src/x86/Ginit.c
+@@ -54,13 +54,6 @@ tdep_uc_addr (ucontext_t *uc, int reg)
+ 
+ # endif /* UNW_LOCAL_ONLY */
+ 
+-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
+-
+-/* XXX fix me: there is currently no way to locate the dyn-info list
+-       by a remote unwinder.  On ia64, this is done via a special
+-       unwind-table entry.  Perhaps something similar can be done with
+-       DWARF2 unwind info.  */
+-
+ static void
+ put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
+ {
+@@ -71,7 +64,13 @@ static int
+ get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
+                         void *arg)
+ {
+-  *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
++#ifndef UNW_LOCAL_ONLY
++# pragma weak _U_dyn_info_list_addr
++  if (!_U_dyn_info_list_addr)
++    return -UNW_ENOINFO;
++#endif
++  // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
++  *dyn_info_list_addr = _U_dyn_info_list_addr ();
+   return 0;
+ }
+ 
+diff --git a/src/pal/src/libunwind/src/x86_64/Ginit.c b/src/pal/src/libunwind/src/x86_64/Ginit.c
+index a865d3385..fd8d418b1 100644
+--- a/src/pal/src/libunwind/src/x86_64/Ginit.c
++++ b/src/pal/src/libunwind/src/x86_64/Ginit.c
+@@ -49,13 +49,6 @@ static struct unw_addr_space local_addr_space;
+ 
+ unw_addr_space_t unw_local_addr_space = &local_addr_space;
+ 
+-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
+-
+-/* XXX fix me: there is currently no way to locate the dyn-info list
+-       by a remote unwinder.  On ia64, this is done via a special
+-       unwind-table entry.  Perhaps something similar can be done with
+-       DWARF2 unwind info.  */
+-
+ static void
+ put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
+ {
+@@ -66,7 +59,13 @@ static int
+ get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
+                         void *arg)
+ {
+-  *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
++#ifndef UNW_LOCAL_ONLY
++# pragma weak _U_dyn_info_list_addr
++  if (!_U_dyn_info_list_addr)
++    return -UNW_ENOINFO;
++#endif
++  // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
++  *dyn_info_list_addr = _U_dyn_info_list_addr ();
+   return 0;
+ }
+ 
diff --git a/SPECS/dotnet.spec b/SPECS/dotnet.spec
index 30f8052..0c348df 100644
--- a/SPECS/dotnet.spec
+++ b/SPECS/dotnet.spec
@@ -28,9 +28,9 @@
 
 %global simple_name dotnet
 
-%global host_version 2.1.19
-%global runtime_version 2.1.19
-%global sdk_version 2.1.515
+%global host_version 2.1.25
+%global runtime_version 2.1.25
+%global sdk_version 2.1.521
 
 Name:           dotnet
 Version:        %{sdk_version}
@@ -51,13 +51,8 @@ Patch11:        corefx-32956-alpn.patch
 # This patch is generally applied at tarball-build time, except when we dont build the tarball
 Patch12:        build-corefx-disable-werror.patch
 
-Patch100:       coreclr-build-python3.patch
-Patch101:       coreclr-cmake-python3.patch
-Patch102:       coreclr-pie.patch
-# This patch is generally applied at tarball-build time, except when we dont build the tarball
-Patch103:       build-coreclr-mscorlib.patch
-# This patch is generally applied at tarball-build time, except when we dont build the tarball
-Patch104:       build-coreclr-clang10.patch
+Patch100:       coreclr-pie.patch
+Patch101:       coreclr-libunwind-fno-common.patch
 
 Patch300:       core-setup-4510-commit-id.patch
 Patch301:       core-setup-pie.patch
@@ -208,9 +203,6 @@ popd
 pushd src/coreclr
 %patch100 -p1
 %patch101 -p1
-%patch102 -p1
-%patch103 -p1
-%patch104 -p1
 popd
 
 pushd src/core-setup
@@ -325,6 +317,36 @@ rm %{buildroot}%{_libdir}/%{simple_name}/dotnet
 %{_libdir}/%{simple_name}/sdk/%{sdk_version}
 
 %changelog
+* Wed Feb 10 2021 Omair Majid <omajid@redhat.com> - 2.1.521-2
+- Update to .NET Core SDK 2.1.521 and Runtime 2.1.25
+- Resolves: RHBZ#1921939
+
+* Tue Jan 12 14:41:40 EST 2021 Omair Majid <omajid@redhat.com> - 2.1.520-1
+- Update to .NET Core SDK 2.1.520 and Runtime 2.1.24
+- Resolves: RHBZ#1905575
+
+* Tue Oct 06 2020 Omair Majid <omajid@redhat.com> - 2.1.519-2
+- Bump release
+- Resolves: RHBZ#1884080
+
+* Thu Oct 01 2020 Omair Majid <omajid@redhat.com> - 2.1.519-1
+- Update to .NET Core SDK 2.1.519 and Runtime 2.1.23
+- Drop patches merged upstream
+- Resolves: RHBZ#1884080
+
+* Fri Sep 04 2020 Omair Majid <omajid@redhat.com> - 2.1.518-1
+- Update to .NET Core SDK 2.1.518 and Runtime 2.1.22
+- Resolves: RHBZ#1874064
+
+* Mon Aug 17 2020 Omair Majid <omajid@redhat.com> - 2.1.517-1
+- Update to .NET Core SDK 2.1.517 and Runtime 2.1.21
+- Resolves: RHBZ#1866119
+
+* Fri Jul 17 2020 Omair Majid <omajid@redhat.com> - 2.1.516-1
+- Update to .NET Core SDK 2.1.516 and Runtime 2.1.20
+- Resolves: RHBZ#1851971
+- Resolves: RHBZ#1856937
+
 * Thu Jun 11 2020 Omair Majid <omajid@redhat.com> - 2.1.515-2
 - Update to .NET Core SDK 2.1.515 and Runtime 2.1.19
 - Resolves: RHBZ#1843672