Skip to content

Conversation

ellishg
Copy link
Contributor

@ellishg ellishg commented Sep 11, 2025

Clang emits ObjC properties in the __TEXT__objc_methname section.

https://github.com/llvm/llvm-project/blob/d5e7c27d53887e6ae490d8e26193a54987728458/clang/lib/CodeGen/CGObjCMac.cpp#L4056-L4072

This change was made in llvm/llvm-project@75af694 to allow property names to be deduplicated with their method names.

This could also improve page faults during startup due to better grouping of types of strings to their specific sections. Basically, it moves method names out of the __cstring section so strings are more compact and thus more efficient with respect to memory pages.

@ellishg ellishg requested a review from rjmccall as a code owner September 11, 2025 19:26
Copy link
Contributor

@rjmccall rjmccall left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@ellishg
Copy link
Contributor Author

ellishg commented Sep 12, 2025

Thanks for the accept @rjmccall. Could you land for me? I don't have access.

@rjmccall
Copy link
Contributor

@swift-ci Please test

@rjmccall rjmccall merged commit c987ea9 into swiftlang:main Sep 13, 2025
5 checks passed
ellishg added a commit to llvm/llvm-project that referenced this pull request Sep 22, 2025
Add the `--{no-}separate-cstring-literal-sections` option to emit
cstring literals into sections defined by their section name. This
allows for changes like swiftlang/swift#84300
and swiftlang/swift#84236 to actually have an
affect. The default behavior has not changed.

The reason this is useful is because strings in different sections might
have different access patterns at runtime. By splitting these strings
into separate sections, we may reduce the number of page faults during
startup. For example, the ObjC runtime accesses all strings in
`__objc_classname` before main.
llvm-sync bot pushed a commit to arm/arm-toolchain that referenced this pull request Sep 22, 2025
…8720)

Add the `--{no-}separate-cstring-literal-sections` option to emit
cstring literals into sections defined by their section name. This
allows for changes like swiftlang/swift#84300
and swiftlang/swift#84236 to actually have an
affect. The default behavior has not changed.

The reason this is useful is because strings in different sections might
have different access patterns at runtime. By splitting these strings
into separate sections, we may reduce the number of page faults during
startup. For example, the ObjC runtime accesses all strings in
`__objc_classname` before main.
SeongjaeP pushed a commit to SeongjaeP/llvm-project that referenced this pull request Sep 23, 2025
Add the `--{no-}separate-cstring-literal-sections` option to emit
cstring literals into sections defined by their section name. This
allows for changes like swiftlang/swift#84300
and swiftlang/swift#84236 to actually have an
affect. The default behavior has not changed.

The reason this is useful is because strings in different sections might
have different access patterns at runtime. By splitting these strings
into separate sections, we may reduce the number of page faults during
startup. For example, the ObjC runtime accesses all strings in
`__objc_classname` before main.
YixingZhang007 pushed a commit to YixingZhang007/llvm-project that referenced this pull request Sep 27, 2025
Add the `--{no-}separate-cstring-literal-sections` option to emit
cstring literals into sections defined by their section name. This
allows for changes like swiftlang/swift#84300
and swiftlang/swift#84236 to actually have an
affect. The default behavior has not changed.

The reason this is useful is because strings in different sections might
have different access patterns at runtime. By splitting these strings
into separate sections, we may reduce the number of page faults during
startup. For example, the ObjC runtime accesses all strings in
`__objc_classname` before main.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants