Skip to content

Commit ac56815

Browse files
Fix duplicate symbols static-linking failure by renaming symbols
_swift_stdlib_XX symbols defined in _CUnicode module are also defined in runtime library as hidden visibility. It works in linking as a shared library, but it doesn't when statically linking with lld, which resolves lib_StringProcessing.a's _swift_stdlib_getScript and loads UnicodeScalarProps.c.o, then loads libswiftCore.a's UnicodeScalarProps.cpp.o for other _swift_stdlib_XX symbols that are not defined in UnicodeScalarProps.c.o.
1 parent 6e65ecb commit ac56815

File tree

4 files changed

+27
-27
lines changed

4 files changed

+27
-27
lines changed

Sources/_CUnicode/UnicodeData.c

+7-7
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,10 @@ static uint32_t hash(uint32_t scalar, uint32_t level, uint32_t seed) {
4646

4747
// This implementation is based on the minimal perfect hashing strategy found
4848
// here: https://arxiv.org/pdf/1702.03154.pdf
49-
intptr_t _swift_stdlib_getMphIdx(uint32_t scalar, intptr_t levels,
50-
const uint64_t * const *keys,
51-
const uint16_t * const *ranks,
52-
const uint16_t * const sizes) {
49+
intptr_t _swift_string_processing_getMphIdx(uint32_t scalar, intptr_t levels,
50+
const uint64_t * const *keys,
51+
const uint16_t * const *ranks,
52+
const uint16_t * const sizes) {
5353
intptr_t resultIdx = 0;
5454

5555
// Here, levels represent the numbers of bit arrays used for this hash table.
@@ -100,9 +100,9 @@ intptr_t _swift_stdlib_getMphIdx(uint32_t scalar, intptr_t levels,
100100
return resultIdx;
101101
}
102102

103-
intptr_t _swift_stdlib_getScalarBitArrayIdx(uint32_t scalar,
104-
const uint64_t *bitArrays,
105-
const uint16_t *ranks) {
103+
intptr_t _swift_string_processing_getScalarBitArrayIdx(uint32_t scalar,
104+
const uint64_t *bitArrays,
105+
const uint16_t *ranks) {
106106
uint64_t chunkSize = 0x110000 / 64 / 64;
107107
uint64_t base = scalar / chunkSize;
108108
uint64_t idx = base / 64;

Sources/_CUnicode/UnicodeScalarProps.c

+4-4
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
#include "include/UnicodeData.h"
1515

1616
SWIFT_CC
17-
uint8_t _swift_stdlib_getScript(uint32_t scalar) {
17+
uint8_t _swift_string_processing_getScript(uint32_t scalar) {
1818
int lowerBoundIndex = 0;
1919
int endIndex = SCRIPTS_COUNT;
2020
int upperBoundIndex = endIndex - 1;
@@ -68,9 +68,9 @@ uint8_t _swift_stdlib_getScript(uint32_t scalar) {
6868
}
6969

7070
SWIFT_CC
71-
const uint8_t *_swift_stdlib_getScriptExtensions(uint32_t scalar,
72-
uint8_t *count) {
73-
intptr_t dataIdx = _swift_stdlib_getScalarBitArrayIdx(scalar,
71+
const uint8_t *_swift_string_processing_getScriptExtensions(uint32_t scalar,
72+
uint8_t *count) {
73+
intptr_t dataIdx = _swift_string_processing_getScalarBitArrayIdx(scalar,
7474
_swift_stdlib_script_extensions,
7575
_swift_stdlib_script_extensions_ranks);
7676

Sources/_CUnicode/include/UnicodeData.h

+10-10
Original file line numberDiff line numberDiff line change
@@ -23,24 +23,24 @@
2323
// Utilities
2424
//===----------------------------------------------------------------------===//
2525

26-
intptr_t _swift_stdlib_getMphIdx(uint32_t scalar, intptr_t levels,
27-
const uint64_t * const *keys,
28-
const uint16_t * const *ranks,
29-
const uint16_t * const sizes);
26+
intptr_t _swift_string_processing_getMphIdx(uint32_t scalar, intptr_t levels,
27+
const uint64_t * const *keys,
28+
const uint16_t * const *ranks,
29+
const uint16_t * const sizes);
3030

31-
intptr_t _swift_stdlib_getScalarBitArrayIdx(uint32_t scalar,
32-
const uint64_t *bitArrays,
33-
const uint16_t *ranks);
31+
intptr_t _swift_string_processing_getScalarBitArrayIdx(uint32_t scalar,
32+
const uint64_t *bitArrays,
33+
const uint16_t *ranks);
3434

3535
//===----------------------------------------------------------------------===//
3636
// Scalar Props
3737
//===----------------------------------------------------------------------===//
3838

3939
SWIFT_CC
40-
uint8_t _swift_stdlib_getScript(uint32_t scalar);
40+
uint8_t _swift_string_processing_getScript(uint32_t scalar);
4141

4242
SWIFT_CC
43-
const uint8_t *_swift_stdlib_getScriptExtensions(uint32_t scalar,
44-
uint8_t *count);
43+
const uint8_t *_swift_string_processing_getScriptExtensions(uint32_t scalar,
44+
uint8_t *count);
4545

4646
#endif // SWIFT_STDLIB_SHIMS_UNICODEDATA_H

Sources/_StringProcessing/Unicode/ScalarProps.swift

+6-6
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,18 @@
99
//
1010
//===----------------------------------------------------------------------===//
1111

12-
@_silgen_name("_swift_stdlib_getScript")
13-
func _swift_stdlib_getScript(_: UInt32) -> UInt8
12+
@_silgen_name("_swift_string_processing_getScript")
13+
func _swift_string_processing_getScript(_: UInt32) -> UInt8
1414

15-
@_silgen_name("_swift_stdlib_getScriptExtensions")
16-
func _swift_stdlib_getScriptExtensions(
15+
@_silgen_name("_swift_string_processing_getScriptExtensions")
16+
func _swift_string_processing_getScriptExtensions(
1717
_: UInt32,
1818
_: UnsafeMutablePointer<UInt8>
1919
) -> UnsafePointer<UInt8>?
2020

2121
extension Unicode.Script {
2222
init(_ scalar: Unicode.Scalar) {
23-
let rawValue = _swift_stdlib_getScript(scalar.value)
23+
let rawValue = _swift_string_processing_getScript(scalar.value)
2424

2525
_internalInvariant(rawValue != .max, "Unknown script rawValue: \(rawValue)")
2626

@@ -29,7 +29,7 @@ extension Unicode.Script {
2929

3030
static func extensions(for scalar: Unicode.Scalar) -> [Unicode.Script] {
3131
var count: UInt8 = 0
32-
let pointer = _swift_stdlib_getScriptExtensions(scalar.value, &count)
32+
let pointer = _swift_string_processing_getScriptExtensions(scalar.value, &count)
3333

3434
guard let pointer = pointer else {
3535
return [Unicode.Script(scalar)]

0 commit comments

Comments
 (0)