Commit Graph

132 Commits

Author SHA1 Message Date
swift-ci
f22cb818d1 Merge remote-tracking branch 'origin/main' into rebranch 2025-09-02 03:16:50 -07:00
Alastair Houghton
b2e2bd2f9d [Reflection] Fix task reflection to strip signed pointers.
The task resume context may be signed, so we should strip the pointer
before trying to read through it.

rdar://158728756
2025-09-01 17:04:05 +01:00
Adrian Prantl
98370c30ae Use std::map::insert to avoid a call to std::piecewise_construct (NFC) 2025-08-29 15:12:34 -07:00
Adrian Prantl
75bee892be Add LLDB and swift-reflection-dump support for WebAssembly
This patch adds parsing and extracting of the Swift reflection
metadata data segments from within the WebAssembly DATA section and
tests it using swift-reflection-dump. This is needed to allow LLDB to
acces Swift reflection metadata when attached to WebAssembly
processes.

rdar://159217213
2025-08-27 17:14:17 -07:00
Saleem Abdulrasool
cea749498b RemoteInspection: remove llvm/Config/abi-breaking.h reference
This removes the aforementioned header, assuming that the user will
manually define `LLVM_ENABLE_ABI_BREAKING_CHECKS` if they are interested
in the ABI breaking tests.
2025-08-13 08:48:46 -07:00
Adrian Prantl
eabcf41a54 Implement reflection support for Symbolic Extended Existential types.
This patch adds a new SymbolicExtendedExistentialTypeRef kind, and
wires it up in TypeDecoder, TypeRefBuilder, TypeLowering, and
ASTDemangler.

This is tested indirectly via the matching LLDB commit.
2025-08-04 08:36:37 -07:00
Dave Lee
eeda39aea2 RemoteInspection: Add AsyncTaskInfo.IsSuspended based on HasTaskDependency (#82965)
Adds an `IsSuspended` field to `AsyncTaskInfo`, which is the same value
as `HasTaskDependency`, but uses the `Is<State>` naming to match
`IsEnqueued`, `IsRunning`, and `IsComplete`.

Based on the docs in Task.h:

```cpp
/// A task can have the following states:
///   * suspended: In this state, a task is considered not runnable
///   * enqueued: In this state, a task is considered runnable
///   * running on a thread
///   * completed
```

rdar://148663671
2025-07-30 08:27:49 -07:00
Augusto Noronha
3d19b9ca70 [NFC][RemoteInspection] Subtracting remote addresses should return int 2025-07-14 10:22:16 -07:00
Augusto Noronha
d9d7db99dc Merge pull request #82995 from augusto2112/sort-addresses
[RemoteAddress] Handle comparison of addresses in different spaces
2025-07-11 15:34:38 -07:00
Augusto Noronha
c97dfd6b05 [RemoteAddress] Handle comparison of addresses in different spaces
Sometimes it makes sense to compares addresses from different address
spaces.

rdar://148361743
2025-07-11 10:05:16 -07:00
Augusto Noronha
16918e7597 [RemoteMirrors] Restore stripping signed pointer when iterating the
conformance cache

58df5534d2 accidentally removed stripping
this signed pointer.
2025-07-10 15:07:08 -07:00
Augusto Noronha
58df5534d2 [NFC][RemoteInspection] Add an opaque AddressSpace field to RemoteAddress
Add an extra opaque field to AddressSpace, which can be used by clients
of RemoteInspection to distinguish between different address spaces.

LLDB employs an optimization where it reads memory from files instead of
the running process whenever it can to speed up memory reads (these can
be slow when debugging something over a network). To do this, it needs
to keep track whether an address originated from a process or a file. It
currently distinguishes addresses by setting an unused high bit on the
address, but because of pointer authentication this is not a reliable
solution. In order to keep this optimization working, this patch adds an
extra opaque AddressSpace field to RemoteAddress, which LLDB can use on
its own implementation of MemoryReader to distinguish between addresses.

This patch is NFC for the other RemoteInspection clients, as it adds
extra information to RemoteAddress, which is entirely optional and if
unused should not change the behavior of the library.

Although this patch is quite big the changes are largely mechanical,
replacing threading StoredPointer with RemoteAddress.

rdar://148361743
2025-07-09 14:52:42 -07:00
Evan Wilde
14d2088c75 FreeBSD: Skip unused ELF section headers
ELF section headers are allowed to be left uninitialized when the
section is empty and unused. LLD is a tad more aggressive about this.
The ELF reader in the Swift runtime was a bit aggressive about
converting the section headers to names and would not skip over these
unused sections headers resulting in crashes due to operating on
uninitialized memory in the `sh_name` field.

This patch teaches the ELF reader to skip over unused section header
table entries.
2025-07-01 14:25:52 -07:00
Adrian Prantl
267d063599 Merge pull request #82325 from adrian-prantl/153687085
[RemoteInspection] Change RemoteAbsolutePointer (NFC)
2025-06-20 08:18:47 -07:00
Adrian Prantl
9381a54c67 [RemoteInspection] Change RemoteAbsolutePointer (NFC)
This patch changes RemoteAbsolutePointer to store both the symbol and
the resolved address. This allows us to retire some ugly workarounds
to deal with non-symbolic addresses and it fixes code paths that would
need these workarounds, but haven't implemented them yet (i.e., the
pack shape handling in the symbolicReferenceResolver in MetadatyaReader.

Addresses parts of rdar://146273066.
rdar://153687085
2025-06-18 10:25:15 -07:00
Adrian Prantl
868c9912aa [Reflection] Add lightweight error handling to ReflectionContext
Reflection metadata lookup failures are notoriously difficult to debug
because there is no error handling in TypeLowering outside of
compile-time #ifdef'd fprintf(stderr) calls. The nicest thing to do
would be to adopt llvm::Expected<> but TypeLowering is also included
in the standard library, which only has access to a tiny subset of the
LLVM Support library. This patch adds a place to store a pointer to
the first encountered error, which can then be converted to an
llvm::Error at the API level.
2025-06-17 09:47:11 -07:00
Mike Ash
81b0c9bf1e [RemoteMirror] Strip protocol descriptor pointers when reading the conformance cache.
Protocol descriptor pointers may be signed. Mark this as a StoredSignedPointer and strip it before handing it back to clients.
2025-05-30 16:28:22 -04:00
Slava Pestov
70b413dc56 RemoteInspection: Support for parameter packs 2025-05-09 14:49:37 -04:00
Slava Pestov
c205c802f6 RemoteInspection: Remove 'DidSubstitute' form of TypeRef::subst() 2025-05-05 14:59:45 -04:00
Mike Ash
027cc09c2d [RemoteMirror] Only look through Task wait adapters when there's a dependency record.
When the RunJob pointer is set to adapters, we try to get the "real" run pointer from the context. However, there are cases where the context can be a dangling pointer, when the task has finished with it but hasn't reset the pointer to anything else. For cases where that can happen, the context is legitimate only when there's a dependency record. Check for a dependency record before trying to read the context in those cases.

In most uses this will fail gracefully or return a garbage run pointer, but swift-reflection-test uses an in-process memory reader which can crash when trying to chase this pointer, resulting in test failures.

rdar://149252404
2025-04-24 12:54:35 -04:00
Mike Ash
e3057031da [RemoteMirror] Fix AsyncTask child iteration.
Iterating child tasks depends on knowing the size of AsyncTask, and changing the size of the task broke it. Instead of relying on mirroring the full structure in our out-of-process definitions, add a debug variable to libswift_Concurrency that contains the size of AsyncTask.

While we're there, add some more validation to child task enumeration. Check each child task's metadata pointer to make sure that it actually points to the AsyncTask metadata, and have the inner loop also increment and check ChildTaskLoopCount to stop runaway iteration in that loop.
2025-04-08 13:09:29 -04:00
Dave Lee
c51e10a827 RemoteInspection: Update DefaultActorImpl layout (#80278)
The definition of `DefautlActorImpl` changed in https://github.com/swiftlang/swift/pull/73998. This change reflects those changes on to RemoteInspection's platform independent definition.
2025-03-25 15:42:46 -07:00
Hamish Knight
f8ab391737 Introduce type sugar for InlineArray (#80087)
* [CS] Decline to handle InlineArray in shrink

Previously we would try the contextual type `(<int>, <element>)`,
which is wrong. Given we want to eliminate shrink, let's just bail.

* [Sema] Sink `ValueMatchVisitor` into `applyUnboundGenericArguments`

Make sure it's called for sugar code paths too. Also let's just always
run it since it should be a pretty cheap check.

* [Sema] Diagnose passing integer to non-integer type parameter

This was previously missed, though would have been diagnosed later
as a requirement failure.

* [Parse] Split up `canParseType` 

While here, address the FIXME in `canParseTypeSimpleOrComposition`
and only check to see if we can parse a type-simple, including
`each`, `some`, and `any` for better recovery.

* Introduce type sugar for InlineArray

Parse e.g `[3 x Int]` as type sugar for InlineArray. Gated behind
an experimental feature flag for now.
2025-03-23 15:31:37 -07:00
Dave Lee
967249430b RemoteInspection: Add IsComplete flag to AsyncTaskInfo (#80183)
This will be used by lldb. I'd like to add it to swift-inspect too, but that will require figuring out how to evolve the swift runtime's ABI.

rdar://147448235
2025-03-21 13:19:40 -07:00
Konrad `ktoso` Malawski
92ead521b8 [Concurrency] Fix swift-inspect and remote mirror build (#79715) 2025-03-04 07:04:42 +09:00
Adrian Prantl
58c01bef79 [reflection] Generalize the implementation of getInstanceTypeInfo()
This is being indirectly tested by the LLDB testsuite.
2025-02-28 12:35:59 -08:00
Adrian Prantl
30defa2569 Add an accessor for LLDB (NFC) 2025-01-31 14:51:23 -08:00
Saleem Abdulrasool
d4c2e1cedb Basic: fix a small corner case for ODR violations
When building the runtime we define `SWIFT_RUNTIME`. `swiftCore_EXPORTS`
is only defined when building swiftCore as a shared library. This would
thus allow the ODR violations to appear in a static library form of the
standard library. This was uncovered with the new runtime build system.
2025-01-17 10:41:07 -08:00
Dave Lee
3e05e0bbf4 RemoteInspection: Append ResumeAsyncContext field to AsyncTaskInfo (#78645)
Expose a `Task`'s resume context via the `AsyncTaskInfo` struct.

This will be used by lldb, but since this data is not specific to lldb it seems reasonable to include it generally.
2025-01-15 11:41:41 -08:00
Alejandro Alonso
cedea94b4c Test fixes and review feedback 2025-01-09 15:54:54 -08:00
Alejandro Alonso
c62e851e38 Implement RemoteInspection support for Builtin.FixedArray 2025-01-08 10:37:17 -08:00
Kuba Mracek
9c77074cac [Mangling] Establish a new mangling prefix for Embedded Swift: $e 2024-12-02 15:01:24 -08:00
Alejandro Alonso
82743d7427 Add TypeDecoding for Builtin.FixedArray 2024-10-28 17:29:03 -07:00
Ben Troller
5c032d91d0 Merge pull request #75993 from btroller/btroller-134364958-optimize-brute-force-search-in-readTypeRef
[RemoteMirror] Optmize brute-force search in TypeRefBuilder::ReflectionTypeDescriptorFinder::readTypeRef().
2024-10-11 11:08:51 -07:00
Dave Lee
b8f1876d0d RemoteInspection: Handle ObjC typerefs in computeUnalignedFieldStartOffset (#76678)
This change is part of a fix for a regression that wasn't noticed because lldb has a 
fallback to using ASTContexts when type metadata resolution fails.

For any Swift class that directly or indirectly inherits from an ObjC class (such as 
`NSObject`, `NSView`, etc), the function `computeUnalignedFieldStartOffset` will fail 
to compute the start offset. To compute the start offset, it traverses the parent 
classes and uses their sizes. Once the traversal reaches an ObjC class, the 
RemoteInspection does not know the size. The fix here is to get the size from the 
`TypeInfo` returned by the external `TypeInfoProvider` (which in LLDB is 
`LLDBTypeInforProvider`).

Depended on by https://github.com/swiftlang/llvm-project/pull/9320
2024-09-27 11:12:06 -07:00
Alejandro Alonso
c1dd957c75 Use intptr_t more consistently 2024-09-04 15:13:50 -07:00
Alejandro Alonso
71f1bb3760 Fix compile error in TypeRefBuilder 2024-09-04 15:13:28 -07:00
Alejandro Alonso
7c85261a77 Add runtime support 2024-09-04 15:13:27 -07:00
Alejandro Alonso
75c2cbf593 Implement value generics
Some requirement machine work

Rename requirement to Value

Rename more things to Value

Fix integer checking for requirement

some docs and parser changes

Minor fixes
2024-09-04 15:13:25 -07:00
Ben Troller
666178fb0f [RemoteMirror] Optimize brute-force search in getCaptureDescriptor() 2024-08-20 17:54:28 -07:00
Ben Troller
6b23b07f56 [RemoteMirror] Optmiize brute-force search in readTypeRef() 2024-08-20 14:19:23 -07:00
Tim Kientzle
9e1dcd6c9f [RemoteMirror] Handle UnsafeContinuation
UnsafeContinuations can be stored in variables or properties,
so it's important for RemoteMirror to be able to at least minimally
recognize them.

This just treats an UnsafeContinuation as a refcounted pointer.
Which might be "good enough" for now.

Working towards rdar://110351406
2024-07-31 18:15:27 -07:00
Tim Kientzle
9a34c68746 Merge pull request #74716 from tbkka/tbkka-mpe-descriptor-deorbit
Do not require overriding this method
2024-07-10 14:22:29 -07:00
Erik Eckstein
7fe2befd31 Demangler: handle errors in demangleType
Makes sure that invalid runtime type strings result in errors and not fail silently.
In worst case this could lead to wrong reconstructed metatypes which can result in all kind of memory corruption.

relates to rdar://129861211
2024-07-05 11:37:15 +02:00
Tim Kientzle
da5d639eb2 Do not require overriding this method
I'm working to fully remove this method, but because it's
used and/or implemented in a few places, I'm backing it out
incrementally. This just changes the abstract method so I can
delete the implementors in a subsequent PR without breaking
anything.
2024-06-25 15:21:24 -07:00
Tim Kientzle
05c74e0d90 Revert "Merge pull request #74394 from tbkka/tbkka-remotemirror-no-more-mpe-metadata-partial"
This reverts commit a1708ef8b1, reversing
changes made to b5930625be.
2024-06-14 15:32:39 -07:00
Tim Kientzle
c20ef6de2a Remove RemoteInspection code to fetch no-longer-used reflection metadata
without relying on spare bit information in the reflection metadata
(which was added in #40906).  As a result, we can remove the
code from #40906.

This is the first step in such removal.  It removes the RemoteMirror
code for looking up such metadata.  It leaves behind:

* Sufficient stubs for LLDB to continue to build.  Once LLDB is updated, these stubs can be removed as well.

* The compiler code to emit such metadata.  This allows new binaries to still reflect MPEs on older runtimes.  This will need to be kept for a transitional period.
2024-06-13 09:34:43 -07:00
Tim Kientzle
40eb3c084d Expand the work from #73491 to support more MPE layouts. This also switches the
MPE layout code to exclusively use the new code.  The key observation: existing
reflection metadata seems to already provide enough information in all cases, so
we can abandon an earlier effort to add spare bitmask data.

Resolves rdar://129281368
2024-06-05 10:15:58 -07:00
Augusto Noronha
dd39730d74 Merge pull request #73723 from augusto2112/default-actor-ti-main
[RemoteInspection] Hardcode DefaultActorStorage's type info
2024-05-22 11:14:47 -07:00
Michael Gottesman
d759ec97ea Merge pull request #73696 from gottesmm/rdar128216574
[sending] Add support for 'sending'
2024-05-18 05:42:41 -04:00