aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/CodeGen/CodeGenModule.cpp
diff options
context:
space:
mode:
authorSharonXSharon <xiaoranxu.nju@gmail.com>2025-06-05 10:24:54 -0700
committerGitHub <noreply@github.com>2025-06-05 10:24:54 -0700
commit40933fd410dd32870a325a9b6d3c741441d5e213 (patch)
tree177b506cc48cd4a3d35e26f101655f3393ede964 /clang/lib/CodeGen/CodeGenModule.cpp
parent59906243836b871a42407c6a6279d35978abe2e2 (diff)
downloadllvm-40933fd410dd32870a325a9b6d3c741441d5e213.zip
llvm-40933fd410dd32870a325a9b6d3c741441d5e213.tar.gz
llvm-40933fd410dd32870a325a9b6d3c741441d5e213.tar.bz2
[lld][macho] Support order cstrings with -order_file (#140307)
Expand the `-order_file` also accept cstrings to order. The purpose is to order hot cstrings for performance (implemented in this diff), and then later on we can also order cold cstrings for compression size win. Due to the speciality of cstrings, there's no way to pass in symbol names in the order file as the existing -order_file, so we expect `<hash of cstring literal content>` to represent/identify each cstring. ``` // An order file has one entry per line, in the following format: // // <cpu>:<object file>:[<symbol name> | CStringEntryPrefix <cstring hash>] // // <cpu> and <object file> are optional. // If not specified, then that entry tries to match either, // // 1) any symbol of the <symbol name>; // Parsing this format is not quite straightforward because the symbol name // itself can contain colons, so when encountering a colon, we consider the // preceding characters to decide if it can be a valid CPU type or file path. // If a symbol is matched by multiple entries, then it takes the // lowest-ordered entry (the one nearest to the front of the list.) // // or 2) any cstring literal with the given hash, if the entry has the // CStringEntryPrefix prefix defined below in the file. <cstring hash> is the // hash of cstring literal content. // // Cstring literals are not symbolized, we can't identify them by name // However, cstrings are deduplicated, hence unique, so we use the hash of // the content of cstring literals to identify them and assign priority to it. // We use the same hash as used in StringPiece, i.e. 31 bit: // xxh3_64bits(string) & 0x7fffffff // ``` The ordering of cstring has to happen during/before the finalizing of the cstring section content in the `finalizeContents()` function, which happens before the writer is run --------- Co-authored-by: Sharon Xu <sharonxu@fb.com>
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.cpp')
0 files changed, 0 insertions, 0 deletions