Skip to content

Commit

Permalink
Set callconv in unicodedata callback and update doc
Browse files Browse the repository at this point in the history
  • Loading branch information
am11 committed Jun 23, 2024
1 parent 0262a63 commit f6e192a
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,15 @@ This should be done automatically by dependency-flow, so in theory there shouldn
- System.Globalization.Tests.csproj
- System.Globalization.Nls.Tests.csproj
- System.Text.Encodings.Web.Tests.csproj
4. If the new Unicode data contains casing changes/updates, then we will also need to update `src/native/minipal/UnicodeDataGenerator/unicodedata.c` file. This file is used by most of the reflection stack whenever you specify the `BindingFlags.IgnoreCase`. In order to regenerate the contents of the `unicdedata.c` file, you need to run the Program located at `src/native/minipal/UnicodeDataGenerator/unicodedata.cs` and give a full path to the new UnicodeData.txt as a parameter.
4. If the new Unicode data contains casing changes/updates, then we will also need to update `src/native/minipal/unicodedata.c` file. This file is used by most of the reflection stack whenever you specify the `BindingFlags.IgnoreCase`. In order to regenerate the contents of the `unicdedata.c` file, you need to run the Program located at `src/native/minipal/UnicodeDataGenerator/unicodedata.cs` and give a full path to the new UnicodeData.txt as a parameter. e.g. in Unix shell:
```sh
# download UnicodeData.txt
$ curl -sSLo /tmp/UnicodeData.txt https://www.unicode.org/Public/14.0.0/ucd/UnicodeData.txt

# update unicodedata.c
$ cd runtime
$ ./dotnet.sh run --project src/native/minipal/UnicodeDataGenerator /tmp/UnicodeData.txt > src/native/minipal/unicodedata.c
```
5. Update the Regex casing equivalence table using the UnicodeData.txt file from the new Unicode version. You can find the instructions on how to do this [here](../../../System.Text.RegularExpressions/tools/Readme.md).
6. Finally, last step is to update the license for the Unicode data into our [Third party notices](../../../../../THIRD-PARTY-NOTICES.TXT) by copying the contents located in `https://www.unicode.org/license.html` to the section that has the Unicode license in our notices.
7. That's it, now commit all of the changed files, and send a PR into dotnet/runtime with the updates. If there were any special things you had to do that are not noted on this document, PLEASE UPDATE THESE INSTRUCTIONS to facilitate future updates.
8 changes: 4 additions & 4 deletions src/native/minipal/UnicodeDataGenerator/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,17 @@
using System.IO;
using System.Linq;

Console.WriteLine(@"
// Licensed to the .NET Foundation under one or more agreements.
Console.WriteLine(@"// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
//
// THIS FILE IS GENERATED. DO NOT HAND EDIT.
// IF YOU NEED TO UPDATE UNICODE VERSION FOLLOW THE GUIDE AT src/libraries/System.Private.CoreLib/Tools/GenUnicodeProp/Updating-Unicode-Versions.md
//
#include <minipal/strings.h>
#include <inttypes.h>
#include <minipal/utils.h>
#include <minipal/strings.h>
typedef struct
{
Expand Down Expand Up @@ -71,7 +71,7 @@ typedef struct
#define UNICODE_DATA_SIZE {numberOfCases}");

Console.WriteLine(@"
static int UnicodeDataComp(const void *opposingCode, const void *elem)
static int CALLBACK_CALLCONV UnicodeDataComp(const void *opposingCode, const void *elem)
{
CHAR16_T code = ((UnicodeDataRec*)elem)->code;
Expand Down
6 changes: 3 additions & 3 deletions src/native/minipal/unicodedata.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

Expand All @@ -7,8 +6,9 @@
// IF YOU NEED TO UPDATE UNICODE VERSION FOLLOW THE GUIDE AT src/libraries/System.Private.CoreLib/Tools/GenUnicodeProp/Updating-Unicode-Versions.md
//

#include <minipal/strings.h>
#include <inttypes.h>
#include <minipal/utils.h>
#include <minipal/strings.h>

typedef struct
{
Expand Down Expand Up @@ -2385,7 +2385,7 @@ static const UnicodeDataRec UnicodeData[] =

#define UNICODE_DATA_SIZE 2359

static int UnicodeDataComp(const void *opposingCode, const void *elem)
static int CALLBACK_CALLCONV UnicodeDataComp(const void *opposingCode, const void *elem)
{
CHAR16_T code = ((UnicodeDataRec*)elem)->code;

Expand Down
14 changes: 10 additions & 4 deletions src/native/minipal/utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,19 @@
# define DISABLE_ASAN
#endif

#if defined(_MSC_VER)
#define CALLBACK_CALLCONV _cdecl
#else
#define CALLBACK_CALLCONV
#endif

#if defined(_MSC_VER)
# ifdef SANITIZER_SHARED_RUNTIME
# define SANITIZER_CALLBACK_CALLCONV __declspec(dllexport no_sanitize_address) __cdecl
# define SANITIZER_INTERFACE_CALLCONV __declspec(dllimport) __cdecl
# define SANITIZER_CALLBACK_CALLCONV __declspec(dllexport no_sanitize_address) CALLBACK_CALLCONV
# define SANITIZER_INTERFACE_CALLCONV __declspec(dllimport) CALLBACK_CALLCONV
# else
# define SANITIZER_CALLBACK_CALLCONV __declspec(no_sanitize_address) __cdecl
# define SANITIZER_INTERFACE_CALLCONV __cdecl
# define SANITIZER_CALLBACK_CALLCONV __declspec(no_sanitize_address) CALLBACK_CALLCONV
# define SANITIZER_INTERFACE_CALLCONV CALLBACK_CALLCONV
# endif
#else
# ifdef SANITIZER_SHARED_RUNTIME
Expand Down

0 comments on commit f6e192a

Please sign in to comment.