Skip to content
This repository was archived by the owner on Nov 1, 2020. It is now read-only.

Merge changes from TFS#3422

Merged
jkotas merged 1 commit intodotnet:nmirrorfrom
dotnet-bot:from-tfs
Apr 25, 2017
Merged

Merge changes from TFS#3422
jkotas merged 1 commit intodotnet:nmirrorfrom
dotnet-bot:from-tfs

Conversation

@dotnet-bot
Copy link
Collaborator

No description provided.

…l definition"

(For a quick intro on what I'm doing here, look at the changes in the object writer.)

The `Offset` property on `ISymbolNode` used to mean "the offset from the beginning of the `ObjectNode` that defines this `ISymbolNode`". This means that when referring to a symbol defined elsewhere, the `Offset` property was unused - it was only used when the `ISymbolNode` meant "definition".

We found out very early in our CoreRT multi module effort that the existing structure where `ISymbolNode` is both a definition and a reference is very awkward. COMDAT sections can only define a single symbol, but we would like to refer to multiple things within the object node package. We have a bunch of places where the inability of having a node that represents "symbol+delta" leads to awkward code that needs to pass the delta separately.

With this change I'm introducing a `ISymbolDefinitionNode`. The new world looks like this:

* `ISymbolDefinitionNode.Offset` means "the offset from the beginning of object data where the symbol should be defined".
* `ISymbolNode.Offset` now means "the delta from symbol with this name".

Whoever implements `ISymbolDefinitionNode` should also implement `ISymbolNode`, so that the symbol can be used as a reference. I chose to name both of the properties `Offset`, because it makes implementing the common case (Offset = 0) require less boilerplate.

As an example where this can be used (I'm not doing it now to keep the diffs as small as possible) is the `NonGCStaticsNode`: with this infrastructure in place, we can now have a separate `ISymbolNode` for the cctor context that doesn't define a new symbol, but can be used to refer to the cctor context anywhere we use `ISymbolNode`. Similar simplification is now possible around fat function pointers.

[tfs-changeset: 1655840]
@jkotas jkotas merged commit 9c76bcd into dotnet:nmirror Apr 25, 2017
@dotnet-bot dotnet-bot deleted the from-tfs branch April 25, 2017 01:24
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants