Replace C2C.atom_is_extern by more robust criterion C2C.atom_is_external#538
Merged
xavierleroy merged 3 commits intomasterfrom Nov 22, 2024
Merged
Replace C2C.atom_is_extern by more robust criterion C2C.atom_is_external#538xavierleroy merged 3 commits intomasterfrom
C2C.atom_is_extern by more robust criterion C2C.atom_is_external#538xavierleroy merged 3 commits intomasterfrom
Conversation
…ternal` This predicate is used in macOS and Cygwin ports to determine when a global symbol may be defined in a shared library, and therefore must be referenced through the GOT. The previous criterion was just "is it declared `extern`"? However, this misses some cases, e.g. "common" declaration. The new criterion is "it is not declared `static` and not defined in the current compilation unit", which should be a lot more robust. Fixes: #537
In `-fno-common` mode, a global variable declaration such as `int x;`, with default storage class, acts like a definition: `x` cannot be defined in a DLL.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Some ports produce different code to reference a global symbol depending on whether the symbol may be defined in a shared library or is guaranteed to be defined in the same statically-linked unit.
The current
C2C.atom_is_externpredicate just checks whether the symbol was declaredextern. But this misses some cases, see #537.This PR introduces and uses a new predicate
C2C.atom_is_externalthat also takes into account whether the symbol is defined in the current compilation unit. This should be more robust.Fixes: #537