mirror of
https://github.com/apple/swift.git
synced 2025-12-25 12:15:36 +01:00
This replaces a number of `#include`-s like this:
```
#include "../../../stdlib/public/SwiftShims/Visibility.h"
```
with this:
```
#include "swift/shims/Visibility.h"
```
This is needed to allow SwiftCompilerSources to use C++ headers which include SwiftShims headers. Currently trying to do that results in errors:
```
swift/swift/include/swift/Demangling/../../../stdlib/public/SwiftShims/module.modulemap:1:8: error: redefinition of module 'SwiftShims'
module SwiftShims {
^
Builds.noindex/swift/swift/bootstrapping0/lib/swift/shims/module.modulemap:1:8: note: previously defined here
module SwiftShims {
^
```
This happens because the headers in both the source dir and the build dir refer to SwiftShims headers by relative path, and both the source root and the build root contain SwiftShims headers (which are equivalent, but since they are located in different dirs, Clang treats them as different modules).
102 lines
3.3 KiB
C++
102 lines
3.3 KiB
C++
//===--- SwiftRT-COFF.cpp -------------------------------------------------===//
|
|
//
|
|
// This source file is part of the Swift.org open source project
|
|
//
|
|
// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
|
|
// Licensed under Apache License v2.0 with Runtime Library Exception
|
|
//
|
|
// See https://swift.org/LICENSE.txt for license information
|
|
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "ImageInspectionCommon.h"
|
|
#include "swift/shims/MetadataSections.h"
|
|
|
|
#include <cstdint>
|
|
#include <new>
|
|
|
|
extern "C" const char __ImageBase[];
|
|
|
|
#define PASTE_EXPANDED(a,b) a##b
|
|
#define PASTE(a,b) PASTE_EXPANDED(a,b)
|
|
|
|
#define STRING_EXPANDED(string) #string
|
|
#define STRING(string) STRING_EXPANDED(string)
|
|
|
|
#define C_LABEL(name) PASTE(__USER_LABEL_PREFIX__,name)
|
|
|
|
#define PRAGMA(pragma) _Pragma(#pragma)
|
|
|
|
#define DECLARE_SWIFT_SECTION(name) \
|
|
PRAGMA(section("." #name "$A", long, read)) \
|
|
__declspec(allocate("." #name "$A")) \
|
|
__declspec(align(1)) \
|
|
static uintptr_t __start_##name = 0; \
|
|
\
|
|
PRAGMA(section("." #name "$C", long, read)) \
|
|
__declspec(allocate("." #name "$C")) \
|
|
__declspec(align(1)) \
|
|
static uintptr_t __stop_##name = 0;
|
|
|
|
extern "C" {
|
|
DECLARE_SWIFT_SECTION(sw5prt)
|
|
DECLARE_SWIFT_SECTION(sw5prtc)
|
|
DECLARE_SWIFT_SECTION(sw5tymd)
|
|
|
|
DECLARE_SWIFT_SECTION(sw5tyrf)
|
|
DECLARE_SWIFT_SECTION(sw5rfst)
|
|
DECLARE_SWIFT_SECTION(sw5flmd)
|
|
DECLARE_SWIFT_SECTION(sw5asty)
|
|
DECLARE_SWIFT_SECTION(sw5repl)
|
|
DECLARE_SWIFT_SECTION(sw5reps)
|
|
DECLARE_SWIFT_SECTION(sw5bltn)
|
|
DECLARE_SWIFT_SECTION(sw5cptr)
|
|
DECLARE_SWIFT_SECTION(sw5mpen)
|
|
DECLARE_SWIFT_SECTION(sw5acfn)
|
|
}
|
|
|
|
namespace {
|
|
static swift::MetadataSections sections{};
|
|
}
|
|
|
|
static void swift_image_constructor() {
|
|
#define SWIFT_SECTION_RANGE(name) \
|
|
{ reinterpret_cast<uintptr_t>(&__start_##name) + sizeof(__start_##name), \
|
|
reinterpret_cast<uintptr_t>(&__stop_##name) - reinterpret_cast<uintptr_t>(&__start_##name) - sizeof(__start_##name) }
|
|
|
|
::new (§ions) swift::MetadataSections {
|
|
swift::CurrentSectionMetadataVersion,
|
|
{ __ImageBase },
|
|
|
|
nullptr,
|
|
nullptr,
|
|
|
|
SWIFT_SECTION_RANGE(sw5prt),
|
|
SWIFT_SECTION_RANGE(sw5prtc),
|
|
SWIFT_SECTION_RANGE(sw5tymd),
|
|
|
|
SWIFT_SECTION_RANGE(sw5tyrf),
|
|
SWIFT_SECTION_RANGE(sw5rfst),
|
|
SWIFT_SECTION_RANGE(sw5flmd),
|
|
SWIFT_SECTION_RANGE(sw5asty),
|
|
SWIFT_SECTION_RANGE(sw5repl),
|
|
SWIFT_SECTION_RANGE(sw5reps),
|
|
SWIFT_SECTION_RANGE(sw5bltn),
|
|
SWIFT_SECTION_RANGE(sw5cptr),
|
|
SWIFT_SECTION_RANGE(sw5mpen),
|
|
SWIFT_SECTION_RANGE(sw5acfn),
|
|
};
|
|
|
|
#undef SWIFT_SECTION_RANGE
|
|
|
|
swift_addNewDSOImage(§ions);
|
|
}
|
|
|
|
#pragma section(".CRT$XCIS", long, read)
|
|
|
|
__declspec(allocate(".CRT$XCIS"))
|
|
extern "C" void (*pSwiftImageConstructor)(void) = &swift_image_constructor;
|
|
#pragma comment(linker, "/include:" STRING(C_LABEL(pSwiftImageConstructor)))
|
|
|