diff options
author | V3n3RiX <venerix@koprulu.sector> | 2023-12-28 07:37:55 +0000 |
---|---|---|
committer | V3n3RiX <venerix@koprulu.sector> | 2023-12-28 07:37:55 +0000 |
commit | d46d1d3a5897cade51811b3848c7bf27969da625 (patch) | |
tree | 0dabb04db53e3fe66abe43df0a3cdff5d3b664db /sys-devel/mold | |
parent | e67d5b4ba05349b3bf4229d0cf7d069809c4420e (diff) |
gentoo auto-resync : 28:12:2023 - 07:37:55
Diffstat (limited to 'sys-devel/mold')
-rw-r--r-- | sys-devel/mold/Manifest | 6 | ||||
-rw-r--r-- | sys-devel/mold/files/mold-2.3.2-mimalloc-visibility-interposition.patch | 495 | ||||
-rw-r--r-- | sys-devel/mold/mold-2.3.2-r1.ebuild | 96 | ||||
-rw-r--r-- | sys-devel/mold/mold-2.3.2.ebuild | 95 | ||||
-rw-r--r-- | sys-devel/mold/mold-2.3.3.ebuild | 95 |
5 files changed, 0 insertions, 787 deletions
diff --git a/sys-devel/mold/Manifest b/sys-devel/mold/Manifest index 3c424d3a1318..4720df0cc13c 100644 --- a/sys-devel/mold/Manifest +++ b/sys-devel/mold/Manifest @@ -1,13 +1,7 @@ AUX mold-2.3.0-no-pch.patch 457 BLAKE2B ac313a6409a2e43b6d26833231cb26c36d3d34f25b25d4217d50fbd1f39eda9d5b42a1939ca8ee48f6dfb73d3c27d7c6111da9beb67a43c72d3c2beb070303b0 SHA512 c79b3e998cbc23ca7069eed95a7d7871371da9c21b6970fe2a1d8dcd1009466e262f63febbc267d364e552b2eb4bebd5d74bc6dc8084d48d4c0e9e02e1d868bc -AUX mold-2.3.2-mimalloc-visibility-interposition.patch 18190 BLAKE2B dfcc0287bf6dfbcdd91fcb9ebf9b56b3d48ef0e6c83566ce832e1279e6ef83acefaac84822b75978596613802a99318765a08eb9c60ace591b5914c1e194263c SHA512 5596bd7cc81e8f5797960aa3cc24d9f5cff3b464839df9b2ff22bf76d3c22041381415464639d0a2079710ad30acd8b9f593e3cd342aedebd398b3d1196aba67 DIST mold-2.1.0.tar.gz 9278811 BLAKE2B b31e13f92177553adf5069cf35c8c75c7bc28f0af4d1726cdc0c6abc1c9d3baaa5be512c3a8fb9bc3c3110096a79e1c6751c701171769595a2234fc1fa8c441a SHA512 f1c98d349b35b4042109d71f7db6eb8d7d089dc3241735bbd7b5402d513dcc85ca17904828779e5fc8234650fa9fb97f47c3a2f3e89cc2fb3cb9e9110439e5a2 -DIST mold-2.3.2.tar.gz 9970530 BLAKE2B db943ad6fab336a8c9c7b5588895cc1232ebfac25fe9dd884a2fbd71ba8d76b9bf7543b4d98cbda9635a7898e980ec5dc2866ef1d02e7a80e7fb9d7f0cbca443 SHA512 dd98acb351757f99399b7d52589c339648478624323fd45c9e986eaf7f1a60f52ace4c09a2d20246e9340109641bda676735da9de89a277989851bd5f52ea9d0 -DIST mold-2.3.3.tar.gz 9965345 BLAKE2B 391d9e38f13ae185c1cd9cff9cfd31c091952cf90276ccb4d7eff41beaf1fa0537bfbafafa9ffa08ab1d09db9c52aa4abcd0a765f8edc6d058f8832b35b726ad SHA512 cbe82568151a772097c86a25eebb0b0f8fc769d6b767169280f535d41cd3f27fc4640da9b86fb4a495e571f9d712368dda95c4431f8ebb2b42227de2b22fc80b DIST mold-2.4.0.tar.gz 9974233 BLAKE2B 0710d9ce0407b64b05a23e04db142d603b38d41cd9e5e322b650680ee2bd8684f57647e9a0b5efc23b2106eb1e38e38143be7d4b357b2d32e4fe0b6a99e41cca SHA512 e332d027f783dfb0a4f48b1fb7daf98e11e830f8de82b971b58ee8a7bae59eaa30b8155e7491b6057f0ce8e0b09ddd0ab1d364f01ea15517e1d089fdb292a4e5 EBUILD mold-2.1.0.ebuild 2169 BLAKE2B b91dec8fb9890052e06cf40124f7647833a6ea786d95d44863848bfff17c0ba335f28aaac08d6971a619dbb845b9091d1134bae47f70bd811d2fde0f9ca11066 SHA512 5d27926e5003e6bd24ee3baf8258ab043aa660b7a36918500283bbec9d991ad8ea6971add52579ba6ee10a7eeeb97a6dff3a7e065c7292ced42d2f0043e33d1e -EBUILD mold-2.3.2-r1.ebuild 2365 BLAKE2B f31e4923d314f335b061c71f0a3a23109ac782a485047c2e01776d3dd0680d5c4962ca78586c62a8442191e8438f531c2d1608263c4bf27a783f276113639ec1 SHA512 5f699a48686ceec6dd6ec06bfe744a6b8eea1c66c6caf3e1f8ccdd0de1a38c0d9afb157ed5773d884554193625e786dc9ee67b877e72676fb30e5b0e8fd93127 -EBUILD mold-2.3.2.ebuild 2299 BLAKE2B 82d0b9e69c44234e971de8740f7dffbe427581562420019fbb8fc52cdf6f4be891161a2c8c4029897ee644cd9787df61cc16e31ff14e33fcbf0c15e9682a2c3e SHA512 3fb1bb02abc0e36efad29b73eb62d48bfe874c67fb6cfdb569ced028a126ebdb027d5fa4c1dd460d16fc5dbb2f98bedcd79e4c4eed5514ad25a441d9a6633272 -EBUILD mold-2.3.3.ebuild 2306 BLAKE2B 7acad940df8ebee45296efe074191a8552a2107f10a67e974cd2f668f22011e03ae588c6e8d33a7269a6b77056bbc030b827049b9e205744b1ff946f5480e635 SHA512 53932ccf4fd75f0847fb54cd622a64bf78e61b5f1bcb29697cbc42da339e9efc345759dd343f60f02531f6724dc2f3031927dbb041e5ecf0a64226c071c09084 EBUILD mold-2.4.0.ebuild 2459 BLAKE2B 012e8034f5f9ebd72a40897e954684ee9721250c4d37735067154a2011b6344feb0da718e8106d8f7da86e0b23d16f4d952e756d92afa44781712fceae59aef3 SHA512 97c8fb81cadf290d9ccfa687cb58883288cc18241b714ba47cf54512cf36863794204d41fd49019098ff0e327541fcd4a861d8af557fbace8eb942dfebe9d6f4 EBUILD mold-9999.ebuild 2460 BLAKE2B 954021dfae76ef895a80c00c42ad563438ef4e956a7349dfdb814af27e030512be7bdcaa390882e6cc3e5710a16a25af7554cd66efeb819e4af72b16b3db0726 SHA512 b3194ab13a2bf59e165dda8ef3f966be1f31c5d7fe1f8e2b25f7599d2cc3c7babbd7fe304f3ec6fe0610ec0d5570cea34dc24d15efd1d0aea81051ed2266acd5 MISC metadata.xml 424 BLAKE2B a1c0cbdcb86c323fa1e6143c9665ec548f7713e74002a25b2fc26c51b60dae00922d3448a5aaecd5027a8cb026a681386ca7dea90657a3e10b25fb194dafc0d3 SHA512 1adc934e78ca0210743a1aa7479ebc4b5ea0b66a348c4408423460f02b404b885d3a8eca6e89ea8ac53ac9c76e85116965f1eef79e3f3e1f0451c8cf5ce0dfd6 diff --git a/sys-devel/mold/files/mold-2.3.2-mimalloc-visibility-interposition.patch b/sys-devel/mold/files/mold-2.3.2-mimalloc-visibility-interposition.patch deleted file mode 100644 index e569bfaf3013..000000000000 --- a/sys-devel/mold/files/mold-2.3.2-mimalloc-visibility-interposition.patch +++ /dev/null @@ -1,495 +0,0 @@ -https://bugs.gentoo.org/917089 -https://github.com/microsoft/mimalloc/issues/360 -https://github.com/rui314/mold/issues/1071 -https://github.com/rui314/mold/commit/da3f5dd4ecf4faaba466ba41c7c30ba4f8f73bfd - -From da3f5dd4ecf4faaba466ba41c7c30ba4f8f73bfd Mon Sep 17 00:00:00 2001 -From: Rui Ueyama <ruiu@cs.stanford.edu> -Date: Sat, 11 Nov 2023 17:59:54 +0900 -Subject: [PATCH] Fix --dynamic-list for DSOs - ---dynamic-list, --export-dynamic-symbol and --export-dynamic-symbol-list -have different semantics for executables and DSOs. If the output is an -executable, they specify a list of symbols that are to be exported. -If the output is a shared object, they specify the list of symbols that -are to be interposable. - -mold havne't implemented the latter semantics. This commit fixes that -issue. - -Fixes https://github.com/rui314/mold/issues/1071 ---- - elf/cmdline.cc | 25 +++----- - elf/linker-script.cc | 35 ++++++----- - elf/main.cc | 16 ----- - elf/mold.h | 17 +++-- - elf/output-chunks.cc | 8 ++- - elf/passes.cc | 122 +++++++++++++++++++++++++++++------- - test/elf/dynamic-list4.sh | 44 +++++++++++++ - test/elf/version-script6.sh | 4 +- - 8 files changed, 194 insertions(+), 77 deletions(-) - create mode 100755 test/elf/dynamic-list4.sh - -diff --git a/elf/cmdline.cc b/elf/cmdline.cc -index 6bc13a300..6c06b4b14 100644 ---- a/elf/cmdline.cc -+++ b/elf/cmdline.cc -@@ -1104,21 +1104,21 @@ std::vector<std::string> parse_nonpositional_args(Context<E> &ctx) { - } else if (read_flag("no-keep-memory")) { - } else if (read_arg("max-cache-size")) { - } else if (read_arg("version-script")) { -- // --version-script, --dynamic-list and --export-dynamic-symbol[-list] -- // are treated as positional arguments even though they are actually not -- // positional. This is because linker scripts (a positional argument) -- // can also specify a version script, and it's better to consolidate -- // parsing in read_input_files. In particular, version scripts can -- // modify ctx.default_version which we initialize *after* parsing -- // non-positional args, so the parsing cannot be done right here. -+ // --version-script is treated as positional arguments even though -+ // they are actually not positional. This is because linker scripts -+ // (a positional argument) can also specify a version script, and -+ // it's better to consolidate parsing in read_input_files. In -+ // particular, version scripts can modify ctx.default_version which -+ // we initialize *after* parsing non-positional args, so the parsing -+ // cannot be done right here. - remaining.push_back("--version-script=" + std::string(arg)); - } else if (read_arg("dynamic-list")) { - ctx.arg.Bsymbolic = true; -- remaining.push_back("--dynamic-list=" + std::string(arg)); -+ append(ctx.dynamic_list_patterns, parse_dynamic_list(ctx, arg)); - } else if (read_arg("export-dynamic-symbol")) { -- remaining.push_back("--export-dynamic-symbol=" + std::string(arg)); -+ ctx.dynamic_list_patterns.push_back({arg, "<command line>"}); - } else if (read_arg("export-dynamic-symbol-list")) { -- remaining.push_back("--export-dynamic-symbol-list=" + std::string(arg)); -+ append(ctx.dynamic_list_patterns, parse_dynamic_list(ctx, arg)); - } else if (read_flag("as-needed")) { - remaining.push_back("--as-needed"); - } else if (read_flag("no-as-needed")) { -@@ -1228,11 +1228,6 @@ std::vector<std::string> parse_nonpositional_args(Context<E> &ctx) { - if (char *env = getenv("MOLD_REPRO"); env && env[0]) - ctx.arg.repro = true; - -- if (ctx.arg.shared || ctx.arg.export_dynamic) -- ctx.default_version = VER_NDX_GLOBAL; -- else -- ctx.default_version = VER_NDX_LOCAL; -- - if (ctx.arg.default_symver) { - std::string ver = ctx.arg.soname.empty() ? - filepath(ctx.arg.output).filename().string() : std::string(ctx.arg.soname); -diff --git a/elf/linker-script.cc b/elf/linker-script.cc -index 4bdc19e7c..7ad500bb8 100644 ---- a/elf/linker-script.cc -+++ b/elf/linker-script.cc -@@ -312,7 +312,6 @@ read_version_script_commands(Context<E> &ctx, std::span<std::string_view> &tok, - - if (tok[0] == "*") { - ctx.default_version = (is_global ? ver_idx : (u32)VER_NDX_LOCAL); -- ctx.default_version_from_version_script = true; - } else if (is_global) { - ctx.version_patterns.push_back({unquote(tok[0]), current_file<E>->name, - ver_str, ver_idx, is_cpp}); -@@ -367,7 +366,9 @@ void parse_version_script(Context<E> &ctx, MappedFile<Context<E>> *mf) { - } - - template <typename E> --void read_dynamic_list_commands(Context<E> &ctx, std::span<std::string_view> &tok, -+void read_dynamic_list_commands(Context<E> &ctx, -+ std::vector<DynamicPattern> &result, -+ std::span<std::string_view> &tok, - bool is_cpp) { - while (!tok.empty() && tok[0] != "}") { - if (tok[0] == "extern") { -@@ -376,11 +377,11 @@ void read_dynamic_list_commands(Context<E> &ctx, std::span<std::string_view> &to - if (!tok.empty() && tok[0] == "\"C\"") { - tok = tok.subspan(1); - tok = skip(ctx, tok, "{"); -- read_dynamic_list_commands(ctx, tok, false); -+ read_dynamic_list_commands(ctx, result, tok, false); - } else { - tok = skip(ctx, tok, "\"C++\""); - tok = skip(ctx, tok, "{"); -- read_dynamic_list_commands(ctx, tok, true); -+ read_dynamic_list_commands(ctx, result, tok, true); - } - - tok = skip(ctx, tok, "}"); -@@ -388,29 +389,32 @@ void read_dynamic_list_commands(Context<E> &ctx, std::span<std::string_view> &to - continue; - } - -- if (tok[0] == "*") -- ctx.default_version = VER_NDX_GLOBAL; -- else -- ctx.version_patterns.push_back({unquote(tok[0]), current_file<E>->name, -- "global", VER_NDX_GLOBAL, is_cpp}); -- -+ result.push_back({unquote(tok[0]), "", is_cpp}); - tok = skip(ctx, tok.subspan(1), ";"); - } - } - - template <typename E> --void parse_dynamic_list(Context<E> &ctx, MappedFile<Context<E>> *mf) { -- current_file<E> = mf; -- std::vector<std::string_view> vec = tokenize(ctx, mf->get_contents()); -+std::vector<DynamicPattern> -+parse_dynamic_list(Context<E> &ctx, std::string_view path) { -+ std::string_view contents = -+ MappedFile<Context<E>>::must_open(ctx, std::string(path))->get_contents(); -+ std::vector<std::string_view> vec = tokenize(ctx, contents); - std::span<std::string_view> tok = vec; -+ std::vector<DynamicPattern> result; - - tok = skip(ctx, tok, "{"); -- read_dynamic_list_commands(ctx, tok, false); -+ read_dynamic_list_commands(ctx, result, tok, false); - tok = skip(ctx, tok, "}"); - tok = skip(ctx, tok, ";"); - - if (!tok.empty()) - SyntaxError(ctx, tok[0]) << "trailing garbage token"; -+ -+ for (DynamicPattern &p : result) -+ p.source = path; -+ -+ return result; - } - - using E = MOLD_TARGET; -@@ -418,6 +422,7 @@ using E = MOLD_TARGET; - template void parse_linker_script(Context<E> &, MappedFile<Context<E>> *); - template std::string_view get_script_output_type(Context<E> &, MappedFile<Context<E>> *); - template void parse_version_script(Context<E> &, MappedFile<Context<E>> *); --template void parse_dynamic_list(Context<E> &, MappedFile<Context<E>> *); -+template std::vector<DynamicPattern> parse_dynamic_list(Context<E> &, std::string_view); -+ - - } // namespace mold::elf -diff --git a/elf/main.cc b/elf/main.cc -index c4f3cd6ff..6df00cfe9 100644 ---- a/elf/main.cc -+++ b/elf/main.cc -@@ -299,22 +299,6 @@ static void read_input_files(Context<E> &ctx, std::span<std::string> args) { - if (!mf) - Fatal(ctx) << "--version-script: file not found: " << arg; - parse_version_script(ctx, mf); -- } else if (remove_prefix(arg, "--dynamic-list=")) { -- MappedFile<Context<E>> *mf = find_from_search_paths(ctx, std::string(arg)); -- if (!mf) -- Fatal(ctx) << "--dynamic-list: file not found: " << arg; -- parse_dynamic_list(ctx, mf); -- } else if (remove_prefix(arg, "--export-dynamic-symbol=")) { -- if (arg == "*") -- ctx.default_version = VER_NDX_GLOBAL; -- else -- ctx.version_patterns.push_back({arg, "--export-dynamic-symbol", -- "global", VER_NDX_GLOBAL, false}); -- } else if (remove_prefix(arg, "--export-dynamic-symbol-list=")) { -- MappedFile<Context<E>> *mf = find_from_search_paths(ctx, std::string(arg)); -- if (!mf) -- Fatal(ctx) << "--export-dynamic-symbol-list: file not found: " << arg; -- parse_dynamic_list(ctx, mf); - } else if (arg == "--push-state") { - state.push_back({ctx.as_needed, ctx.whole_archive, ctx.is_static, - ctx.in_lib}); -diff --git a/elf/mold.h b/elf/mold.h -index 7ff7c2e6f..d593f6840 100644 ---- a/elf/mold.h -+++ b/elf/mold.h -@@ -1281,8 +1281,15 @@ get_script_output_type(Context<E> &ctx, MappedFile<Context<E>> *mf); - template <typename E> - void parse_version_script(Context<E> &ctx, MappedFile<Context<E>> *mf); - -+struct DynamicPattern { -+ std::string_view pattern; -+ std::string_view source; -+ bool is_cpp = false; -+}; -+ - template <typename E> --void parse_dynamic_list(Context<E> &ctx, MappedFile<Context<E>> *mf); -+std::vector<DynamicPattern> -+parse_dynamic_list(Context<E> &ctx, std::string_view path); - - // - // lto.cc -@@ -1733,13 +1740,11 @@ struct Context { - } arg; - - std::vector<VersionPattern> version_patterns; -- u16 default_version = VER_NDX_GLOBAL; -+ std::vector<DynamicPattern> dynamic_list_patterns; -+ i64 default_version = -1; - i64 page_size = E::page_size; - std::optional<int> global_lock_fd; - -- // true if default_version is set by a wildcard in version script. -- bool default_version_from_version_script = false; -- - // Reader context - bool as_needed = false; - bool whole_archive = false; -@@ -2034,7 +2039,7 @@ class Symbol { - i32 sym_idx = -1; - - i32 aux_idx = -1; -- u16 ver_idx = 0; -+ i32 ver_idx = -1; - - // `flags` has NEEDS_ flags. - Atomic<u8> flags = 0; -diff --git a/elf/output-chunks.cc b/elf/output-chunks.cc -index f44d448ac..00d5538df 100644 ---- a/elf/output-chunks.cc -+++ b/elf/output-chunks.cc -@@ -2550,8 +2550,12 @@ void VerdefSection<E>::construct(Context<E> &ctx) { - for (std::string_view verstr : ctx.arg.version_definitions) - write(verstr, idx++, 0); - -- for (Symbol<E> *sym : std::span<Symbol<E> *>(ctx.dynsym->symbols).subspan(1)) -- ctx.versym->contents[sym->get_dynsym_idx(ctx)] = sym->ver_idx; -+ for (Symbol<E> *sym : std::span<Symbol<E> *>(ctx.dynsym->symbols).subspan(1)) { -+ i64 ver = sym->ver_idx; -+ if (ver == -1) -+ ver = VER_NDX_GLOBAL; -+ ctx.versym->contents[sym->get_dynsym_idx(ctx)] = ver; -+ } - } - - template <typename E> -diff --git a/elf/passes.cc b/elf/passes.cc -index c6ee0f66b..8c7d5d0f5 100644 ---- a/elf/passes.cc -+++ b/elf/passes.cc -@@ -1612,9 +1612,6 @@ template <typename E> - void apply_version_script(Context<E> &ctx) { - Timer t(ctx, "apply_version_script"); - -- // If all patterns are simple (i.e. not containing any meta- -- // characters and is not a C++ name), we can simply look up -- // symbols. - auto is_simple = [&] { - for (VersionPattern &v : ctx.version_patterns) - if (v.is_cpp || v.pattern.find_first_of("*?[") != v.pattern.npos) -@@ -1622,6 +1619,9 @@ void apply_version_script(Context<E> &ctx) { - return true; - }; - -+ // If all patterns are simple (i.e. not containing any meta- -+ // characters and is not a C++ name), we can simply look up -+ // symbols. - if (is_simple()) { - for (VersionPattern &v : ctx.version_patterns) { - Symbol<E> *sym = get_symbol(ctx, v.pattern); -@@ -1747,44 +1747,124 @@ void compute_import_export(Context<E> &ctx) { - if (!ctx.arg.shared) { - tbb::parallel_for_each(ctx.dsos, [&](SharedFile<E> *file) { - for (Symbol<E> *sym : file->symbols) { -- if (sym->file && !sym->file->is_dso && sym->visibility != STV_HIDDEN) { -- if (sym->ver_idx != VER_NDX_LOCAL || -- !ctx.default_version_from_version_script) { -- std::scoped_lock lock(sym->mu); -- sym->is_exported = true; -- } -+ if (sym->file && !sym->file->is_dso && sym->visibility != STV_HIDDEN && -+ sym->ver_idx != VER_NDX_LOCAL) { -+ std::scoped_lock lock(sym->mu); -+ sym->is_exported = true; - } - } - }); - } - -+ auto should_export = [&](Symbol<E> &sym) { -+ if (sym.visibility == STV_HIDDEN) -+ return false; -+ -+ switch (sym.ver_idx) { -+ case -1: -+ if (ctx.arg.shared) -+ return !((ObjectFile<E> *)sym.file)->exclude_libs; -+ return ctx.arg.export_dynamic; -+ case VER_NDX_LOCAL: -+ return false; -+ default: -+ return true; -+ } -+ }; -+ - // Export symbols that are not hidden or marked as local. - // We also want to mark imported symbols as such. - tbb::parallel_for_each(ctx.objs, [&](ObjectFile<E> *file) { - for (Symbol<E> *sym : file->get_global_syms()) { -- if (!sym->file || sym->visibility == STV_HIDDEN || -- sym->ver_idx == VER_NDX_LOCAL) -- continue; -- -- // If we are using a symbol in a DSO, we need to import it at runtime. -- if (sym->file != file && sym->file->is_dso && !sym->is_absolute()) { -- std::scoped_lock lock(sym->mu); -- sym->is_imported = true; -+ // If we are using a symbol in a DSO, we need to import it. -+ if (sym->file && sym->file->is_dso) { -+ if (!sym->is_absolute()) { -+ std::scoped_lock lock(sym->mu); -+ sym->is_imported = true; -+ } - continue; - } - -- // If we are creating a DSO, all global symbols are exported by default. -- if (sym->file == file) { -- std::scoped_lock lock(sym->mu); -+ // If we have a definition of a symbol, we may want to export it. -+ if (sym->file == file && should_export(*sym)) { - sym->is_exported = true; - -- if (ctx.arg.shared && sym->visibility != STV_PROTECTED && -+ // Exported symbols are marked as imported as well by default -+ // for DSOs. -+ if (ctx.arg.shared && -+ sym->visibility != STV_PROTECTED && - !ctx.arg.Bsymbolic && - !(ctx.arg.Bsymbolic_functions && sym->get_type() == STT_FUNC)) - sym->is_imported = true; - } - } - }); -+ -+ -+ // Apply --dynamic-list, --export-dynamic-symbol and -+ // --export-dynamic-symbol-list options. -+ // -+ // The semantics of these options vary depending on whether we are -+ // creating an executalbe or a shared object. -+ // -+ // For executable, matched symbols are exported. -+ // -+ // For shared objects, matched symbols are imported if it is already -+ // exported so that they are interposable. In other words, symbols -+ // that did not match will be bound locally within the output file, -+ // effectively turning them into protected symbols. -+ MultiGlob matcher; -+ MultiGlob cpp_matcher; -+ -+ auto handle_match = [&](Symbol<E> *sym) { -+ if (ctx.arg.shared) { -+ if (sym->is_exported) -+ sym->is_imported = true; -+ } else { -+ if (sym->file && !sym->file->is_dso && sym->visibility != STV_HIDDEN) -+ sym->is_exported = true; -+ } -+ }; -+ -+ for (DynamicPattern &p : ctx.dynamic_list_patterns) { -+ if (p.is_cpp) { -+ if (!cpp_matcher.add(p.pattern, 1)) -+ Fatal(ctx) << p.source << ": invalid dynamic list entry: " -+ << p.pattern; -+ continue; -+ } -+ -+ if (p.pattern.find_first_of("*?[") != p.pattern.npos) { -+ if (!matcher.add(p.pattern, 1)) -+ Fatal(ctx) << p.source << ": invalid dynamic list entry: " -+ << p.pattern; -+ continue; -+ } -+ -+ handle_match(get_symbol(ctx, p.pattern)); -+ } -+ -+ if (!matcher.empty() || !cpp_matcher.empty()) { -+ tbb::parallel_for_each(ctx.objs, [&](ObjectFile<E> *file) { -+ for (Symbol<E> *sym : file->get_global_syms()) { -+ if (sym->file != file) -+ continue; -+ if (ctx.arg.shared && !sym->is_exported) -+ continue; -+ -+ std::string_view name = sym->name(); -+ -+ if (matcher.find(name)) { -+ handle_match(sym); -+ } else if (!cpp_matcher.empty()) { -+ if (std::optional<std::string_view> s = cpp_demangle(name)) -+ name = *s; -+ if (cpp_matcher.find(name)) -+ handle_match(sym); -+ } -+ } -+ }); -+ } - } - - // Compute the "address-taken" bit for each input section. -diff --git a/test/elf/dynamic-list4.sh b/test/elf/dynamic-list4.sh -new file mode 100755 -index 000000000..83d88887e ---- /dev/null -+++ b/test/elf/dynamic-list4.sh -@@ -0,0 +1,44 @@ -+#!/bin/bash -+. $(dirname $0)/common.inc -+ -+cat <<EOF | $CC -o $t/a.o -c -xc - -fPIC -+#include <stdio.h> -+ -+void foo() { printf("foo1 "); } -+void bar() { printf("bar1 "); } -+void baz() { printf("baz1 "); } -+ -+void print() { -+ foo(); -+ bar(); -+ baz(); -+ printf("\n"); -+} -+EOF -+ -+cat <<EOF > $t/dyn -+{ foo; bar; }; -+EOF -+ -+$CC -B. -shared -o $t/b.so $t/a.o -Wl,--dynamic-list=$t/dyn -+ -+cat <<EOF | $CC -o $t/c.o -c -xc - -fPIC -+#include <stdio.h> -+void foo() { printf("foo2 "); } -+void bar() { printf("bar2 "); } -+void baz() { printf("baz2 "); } -+EOF -+ -+$CC -B. -shared -o $t/d.so $t/c.o -+ -+cat <<EOF | $CC -o $t/e.o -c -xc - -+#include <stdio.h> -+void print(); -+int main() { print(); } -+EOF -+ -+$CC -B. -o $t/exe1 $t/e.o -Wl,-push-state,-no-as-needed $t/b.so -Wl,-pop-state -+$QEMU $t/exe1 | grep -q 'foo1 bar1 baz1' -+ -+$CC -B. -o $t/exe2 $t/e.o -Wl,-push-state,-no-as-needed $t/d.so $t/b.so -Wl,-pop-state -+$QEMU $t/exe2 | grep -q 'foo2 bar2 baz1' -diff --git a/test/elf/version-script6.sh b/test/elf/version-script6.sh -index 74e2f9a89..44f809ef3 100755 ---- a/test/elf/version-script6.sh -+++ b/test/elf/version-script6.sh -@@ -9,10 +9,10 @@ EOF - cat <<EOF | $CXX -fPIC -c -o $t/b.o -xc - - int foo = 5; - int bar = 6; -+int quux = 100; - EOF - --$CC -B. -shared -Wl,--version-script=$t/a.ver \ -- -o $t/c.so $t/b.o -+$CC -B. -shared -Wl,--version-script=$t/a.ver -o $t/c.so $t/b.o - - cat <<'EOF' > $t/d.ver - VER_Y1 { local; *; }; diff --git a/sys-devel/mold/mold-2.3.2-r1.ebuild b/sys-devel/mold/mold-2.3.2-r1.ebuild deleted file mode 100644 index 01c4f52659a9..000000000000 --- a/sys-devel/mold/mold-2.3.2-r1.ebuild +++ /dev/null @@ -1,96 +0,0 @@ -# Copyright 2021-2023 Gentoo Authors -# Distributed under the terms of the GNU General Public License v2 - -EAPI=8 - -inherit cmake toolchain-funcs - -DESCRIPTION="A Modern Linker" -HOMEPAGE="https://github.com/rui314/mold" -if [[ ${PV} == 9999 ]] ; then - EGIT_REPO_URI="https://github.com/rui314/mold.git" - inherit git-r3 -else - SRC_URI="https://github.com/rui314/mold/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz" - KEYWORDS="amd64 ~arm ~arm64 ~loong ~riscv ~sparc ~x86" -fi - -# mold (MIT) -# - xxhash (BSD-2) -LICENSE="MIT BSD-2" -SLOT="0" - -RDEPEND=" - app-arch/zstd:= - >=dev-cpp/tbb-2021.7.0-r1:= - dev-libs/blake3:= - sys-libs/zlib - !kernel_Darwin? ( - >=dev-libs/mimalloc-2:= - ) -" -DEPEND="${RDEPEND}" - -PATCHES=( - "${FILESDIR}"/${PN}-2.3.0-no-pch.patch - "${FILESDIR}"/${P}-mimalloc-visibility-interposition.patch -) - -pkg_pretend() { - # Requires a c++20 compiler, see #831473 - if [[ ${MERGE_TYPE} != binary ]]; then - if tc-is-gcc && [[ $(gcc-major-version) -lt 10 ]]; then - die "${PN} needs at least gcc 10" - elif tc-is-clang && [[ $(clang-major-version) -lt 12 ]]; then - die "${PN} needs at least clang 12" - fi - fi -} - -src_prepare() { - cmake_src_prepare - - # Needs unpackaged dwarfdump - rm test/elf/{{dead,compress}-debug-sections,compressed-debug-info}.sh || die - - # Heavy tests, need qemu - rm test/elf/gdb-index-{compress-output,dwarf{2,3,4,5}}.sh || die - rm test/elf/lto-{archive,dso,gcc,llvm,version-script}.sh || die - - # Sandbox sadness - rm test/elf/run.sh || die - sed -i 's|`pwd`/mold-wrapper.so|"& ${LD_PRELOAD}"|' \ - test/elf/mold-wrapper{,2}.sh || die - - # static-pie tests require glibc built with static-pie support - if ! has_version -d 'sys-libs/glibc[static-pie(+)]'; then - rm test/elf/{,ifunc-}static-pie.sh || die - fi -} - -src_configure() { - local mycmakeargs=( - -DCMAKE_DISABLE_PRECOMPILE_HEADERS=ON - -DMOLD_ENABLE_QEMU_TESTS=OFF - -DMOLD_LTO=OFF # Should be up to the user to decide this with CXXFLAGS. - -DMOLD_USE_MIMALLOC=$(usex !kernel_Darwin) - -DMOLD_USE_SYSTEM_MIMALLOC=ON - -DMOLD_USE_SYSTEM_TBB=ON - ) - cmake_src_configure -} - -src_install() { - dobin "${BUILD_DIR}"/${PN} - - # https://bugs.gentoo.org/872773 - insinto /usr/$(get_libdir)/mold - doins "${BUILD_DIR}"/${PN}-wrapper.so - - dodoc docs/{design,execstack}.md - doman docs/${PN}.1 - - dosym ${PN} /usr/bin/ld.${PN} - dosym ${PN} /usr/bin/ld64.${PN} - dosym -r /usr/bin/${PN} /usr/libexec/${PN}/ld -} diff --git a/sys-devel/mold/mold-2.3.2.ebuild b/sys-devel/mold/mold-2.3.2.ebuild deleted file mode 100644 index 20299cb6b4cb..000000000000 --- a/sys-devel/mold/mold-2.3.2.ebuild +++ /dev/null @@ -1,95 +0,0 @@ -# Copyright 2021-2023 Gentoo Authors -# Distributed under the terms of the GNU General Public License v2 - -EAPI=8 - -inherit cmake toolchain-funcs - -DESCRIPTION="A Modern Linker" -HOMEPAGE="https://github.com/rui314/mold" -if [[ ${PV} == 9999 ]] ; then - EGIT_REPO_URI="https://github.com/rui314/mold.git" - inherit git-r3 -else - SRC_URI="https://github.com/rui314/mold/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz" - KEYWORDS="~amd64 ~arm64 ~loong ~riscv ~x86" -fi - -# mold (MIT) -# - xxhash (BSD-2) -LICENSE="MIT BSD-2" -SLOT="0" - -RDEPEND=" - app-arch/zstd:= - >=dev-cpp/tbb-2021.7.0-r1:= - dev-libs/blake3:= - sys-libs/zlib - !kernel_Darwin? ( - >=dev-libs/mimalloc-2:= - ) -" -DEPEND="${RDEPEND}" - -PATCHES=( - "${FILESDIR}"/${PN}-2.3.0-no-pch.patch -) - -pkg_pretend() { - # Requires a c++20 compiler, see #831473 - if [[ ${MERGE_TYPE} != binary ]]; then - if tc-is-gcc && [[ $(gcc-major-version) -lt 10 ]]; then - die "${PN} needs at least gcc 10" - elif tc-is-clang && [[ $(clang-major-version) -lt 12 ]]; then - die "${PN} needs at least clang 12" - fi - fi -} - -src_prepare() { - cmake_src_prepare - - # Needs unpackaged dwarfdump - rm test/elf/{{dead,compress}-debug-sections,compressed-debug-info}.sh || die - - # Heavy tests, need qemu - rm test/elf/gdb-index-{compress-output,dwarf{2,3,4,5}}.sh || die - rm test/elf/lto-{archive,dso,gcc,llvm,version-script}.sh || die - - # Sandbox sadness - rm test/elf/run.sh || die - sed -i 's|`pwd`/mold-wrapper.so|"& ${LD_PRELOAD}"|' \ - test/elf/mold-wrapper{,2}.sh || die - - # static-pie tests require glibc built with static-pie support - if ! has_version -d 'sys-libs/glibc[static-pie(+)]'; then - rm test/elf/{,ifunc-}static-pie.sh || die - fi -} - -src_configure() { - local mycmakeargs=( - -DCMAKE_DISABLE_PRECOMPILE_HEADERS=ON - -DMOLD_ENABLE_QEMU_TESTS=OFF - -DMOLD_LTO=OFF # Should be up to the user to decide this with CXXFLAGS. - -DMOLD_USE_MIMALLOC=$(usex !kernel_Darwin) - -DMOLD_USE_SYSTEM_MIMALLOC=ON - -DMOLD_USE_SYSTEM_TBB=ON - ) - cmake_src_configure -} - -src_install() { - dobin "${BUILD_DIR}"/${PN} - - # https://bugs.gentoo.org/872773 - insinto /usr/$(get_libdir)/mold - doins "${BUILD_DIR}"/${PN}-wrapper.so - - dodoc docs/{design,execstack}.md - doman docs/${PN}.1 - - dosym ${PN} /usr/bin/ld.${PN} - dosym ${PN} /usr/bin/ld64.${PN} - dosym ../../../usr/bin/${PN} /usr/libexec/${PN}/ld -} diff --git a/sys-devel/mold/mold-2.3.3.ebuild b/sys-devel/mold/mold-2.3.3.ebuild deleted file mode 100644 index 2b9db9efa079..000000000000 --- a/sys-devel/mold/mold-2.3.3.ebuild +++ /dev/null @@ -1,95 +0,0 @@ -# Copyright 2021-2023 Gentoo Authors -# Distributed under the terms of the GNU General Public License v2 - -EAPI=8 - -inherit cmake toolchain-funcs - -DESCRIPTION="A Modern Linker" -HOMEPAGE="https://github.com/rui314/mold" -if [[ ${PV} == 9999 ]] ; then - EGIT_REPO_URI="https://github.com/rui314/mold.git" - inherit git-r3 -else - SRC_URI="https://github.com/rui314/mold/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz" - KEYWORDS="~amd64 ~arm ~arm64 ~loong ~riscv ~sparc ~x86" -fi - -# mold (MIT) -# - xxhash (BSD-2) -LICENSE="MIT BSD-2" -SLOT="0" - -RDEPEND=" - app-arch/zstd:= - >=dev-cpp/tbb-2021.7.0-r1:= - dev-libs/blake3:= - sys-libs/zlib - !kernel_Darwin? ( - >=dev-libs/mimalloc-2:= - ) -" -DEPEND="${RDEPEND}" - -PATCHES=( - "${FILESDIR}"/${PN}-2.3.0-no-pch.patch -) - -pkg_pretend() { - # Requires a c++20 compiler, see #831473 - if [[ ${MERGE_TYPE} != binary ]]; then - if tc-is-gcc && [[ $(gcc-major-version) -lt 10 ]]; then - die "${PN} needs at least gcc 10" - elif tc-is-clang && [[ $(clang-major-version) -lt 12 ]]; then - die "${PN} needs at least clang 12" - fi - fi -} - -src_prepare() { - cmake_src_prepare - - # Needs unpackaged dwarfdump - rm test/elf/{{dead,compress}-debug-sections,compressed-debug-info}.sh || die - - # Heavy tests, need qemu - rm test/elf/gdb-index-{compress-output,dwarf{2,3,4,5}}.sh || die - rm test/elf/lto-{archive,dso,gcc,llvm,version-script}.sh || die - - # Sandbox sadness - rm test/elf/run.sh || die - sed -i 's|`pwd`/mold-wrapper.so|"& ${LD_PRELOAD}"|' \ - test/elf/mold-wrapper{,2}.sh || die - - # static-pie tests require glibc built with static-pie support - if ! has_version -d 'sys-libs/glibc[static-pie(+)]'; then - rm test/elf/{,ifunc-}static-pie.sh || die - fi -} - -src_configure() { - local mycmakeargs=( - -DCMAKE_DISABLE_PRECOMPILE_HEADERS=ON - -DMOLD_ENABLE_QEMU_TESTS=OFF - -DMOLD_LTO=OFF # Should be up to the user to decide this with CXXFLAGS. - -DMOLD_USE_MIMALLOC=$(usex !kernel_Darwin) - -DMOLD_USE_SYSTEM_MIMALLOC=ON - -DMOLD_USE_SYSTEM_TBB=ON - ) - cmake_src_configure -} - -src_install() { - dobin "${BUILD_DIR}"/${PN} - - # https://bugs.gentoo.org/872773 - insinto /usr/$(get_libdir)/mold - doins "${BUILD_DIR}"/${PN}-wrapper.so - - dodoc docs/{design,execstack}.md - doman docs/${PN}.1 - - dosym ${PN} /usr/bin/ld.${PN} - dosym ${PN} /usr/bin/ld64.${PN} - dosym -r /usr/bin/${PN} /usr/libexec/${PN}/ld -} |