-
Notifications
You must be signed in to change notification settings - Fork 1.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Don't override linker #8152
Don't override linker #8152
Conversation
What's the reason for this? We want gold or lld because that avoids spurious errors about sys_nerr that we don't want to have reported and are faster. Is there a particular reason to not want them? |
In general Linux distributions want to have control over toolchain used unless package requires specific tools. I wouldn't even notice this preference if our 32bit builds didn't fail with lld. That's likely an issue with lld linker itself but this does not change the fact that we (PLD Linux) prefer to build packages with as consistent toolchain as possible. Apparently so does Gentoo. |
Okay, in that case make it one option, "FISH_USE_DEFAULT_LINKER=ON|OFF" that just skips the override. Let it default to OFF and document it in the README, together with a note that GNU's default prints spurious errors. Or if that doesn't work for you make it "FISH_USE_LINKER=/path/to/linker", and if it's unset (by default) still do the override. Having two options for this is awkward and unnecessary (among other things, they can be set at the same time - in the current implementation LLD wins, but that's an arbitrary choice and unclear from the outside). (The exact names are, of course, up for debate)
(Link is broken, I'm assuming you mean https://bugs.gentoo.org/790596) |
Sorry about the link, no idea where that '3' at the end came from. Anyway before I make any changes I would like to clarify few things:
Can you confirm that you do want to keep this override for merely a warning that occurs with 1.5y old |
"1.5y old glibc" means it's still very much in active use. That's newer than what you would expect in stable distros like Debian or RHEL or Ubuntu LTS. Yes, we will keep workarounds for that. |
Okay, after a quick shower to moisturize those brain cells: It's about a warning, not functionality. In an old and crufty glibc version, only when you build fish yourself (instead of installing via our PPAs). That's very much unimportant cosmetics in a minority usecase. So this entire mechanism can, actually, be nuked from orbit. If your default linker is slow, your default linker is slow, and you should do something about it. |
We got a handful of problem reports, which is why I think @ridiculousfish added it in 5f6ee7f, but I agree it can go. |
Okay, it has been removed. |
This was a workaround for an error that has been removed in glibc 2.32 (by removing sys_errlist and friends, which it complained about). Other than that, it's an attempt at performance optimization that should just be fixed at the system level - if your linker is bad, replace it with a better linker. No need for fish to work around it. Closes fish-shell#8152
I disagree with this, because a) there's really no standard way to set the "default" linker, and b) CMake makes it hard to override the linker even via the usual ways. Although this is a C++ project, if both Also, @ridiculousfish added that hack for good reason: the warnings really did cause a lot of unnecessary drama (100% glibc's fault) and sent a lot of people barking up the wrong tree and absolutely deserve to be suffocated into silence and submission, by fire if necessary. Many (most?) LTS distros are still using glibc versions that stupidly complain with ZERO way of explicitly ignoring/opting-out of warnings, and it'll be ages before glibc's backtracking here will trickle down to everyone. (And the performance benefits are an extremely nice icing on the cake to boot.) |
Ok, this is just stupid. The only way to get CMake to respect my preference for
because CMake passes |
Enforcing specific toolchain is valid in very rare cases and Enforcing linker to fix somebody's warning (cosmetic thing) while breaking builds for others does not bring any added value. If you have problem with new change then open new issue, don't reopen pull requests. No idea why you pass linker flag in C++ compiler flags... try passing it in linker flags (LDFLAGS)? |
LDFLAGS is passed to the linker, it doesn't determine what the linker is. In this case, the top-level "linker" happens to be the compiler that invokes the actual linker, so it does work, but that is not a guarantee. Hence my point about there not being a standard way to actually decide what linker to use. You're right that using it would avoid the warnings about unused arguments generated by clang, however. I re-opened the pull request because it was my intention to merge your existing PR, but giving a window of opportunity to hear any other viewpoints. |
@mqudsi Please do handle the existing feedback: Having two options that aren't orthogonal is awkward. This should be one option. It should also be documented in README.md. Other than that, I don't really care either way. As long as it's usable to all involved, go ahead. |
That sounds good. I'll close this one out, then. |
It works exactly how it supposed to. You as a user control what linker should be and what flags should be passed. CMake defaults to C++ compiler for linking stage so if not specified otherwise LDFLAGS are passed to C++ compiler. You do realize code that was dropped did exactly that? It used to add a linker flag. It does not influence what linker binary really is (it is still C++ compiler). So passing LDFLAGS is effectively equivalent to dropped logic. |
@mqudsi does https://stackoverflow.com/a/55801096/125549 (using |
@zanchey I think that's what setting LDFLAGS indirectly does. After some time to think about this and in particular given that it seems to be deterministic that CMake invokes $CXX (or whatever that resolved to) to do the linking, I guess it's fair enough for the dev to just set an LDFLAGS (or CMAKE_EXE_LINKER_FLAGS) that will trigger the desired linker behavior. We can always put the linker preference patch back in if we start getting downstream complaints or concerns about the warnings again. |
To add to this, gold is actually broken under mips64. There's very little benefit in using a faster linker. Empirical testing shows an increase in binary size. |
I used the command from fish-shell#8092 to list issues/PRs with missing changelog entries, and went through most of them. Each issue gets three lines - subject - URL - verdict If the verdict ends with ", ignoring", I added it the the ignored list in the changelog. The issues are grouped by verdict, with the interesting/leftover ones on top (obviously no need to double check *everything*). The "gh" script is already a quantum leap we can still find better ways to share the changelog burden. I noticed that there are many minor updates that can probably be ignored. Filtering them out doesn't take much time but it adds up, especially if it's a single person doing it. --- Issue/PR title: Make --no-config mode more comfortable fish-shell#8493 in-flight Issue/PR title: Debian fish binary package difficult to install fish-shell#7845 TODO Issue/PR title: Work around `setpgid` error on older Apple platforms fish-shell#8153 this extends 7474, which wasn't listed either, we should probably mention it? Issue/PR title: Abbr -q return status inconsistent fish-shell#8431 fixes return status of "abbr -q", should we mention this? Issue/PR title: math: (n n): incorrect error fish-shell#8511 improved error output, which is very nice but too minor? Issue/PR title: Fish autocomplete error on iOS procursus fish-shell#8205 niche fix, ignoring Issue/PR title: Fix `fish_key_reader` wrapper check fish-shell#8271 minor update to not create a harmless alias for fish_key_reader, ignoring Issue/PR title: funced dosn't like backslash escapes in function names fish-shell#8289 minor escaping fix, ignoring Issue/PR title: Hide whatis database building from the user fish-shell#8310 not something many users would notice in the first place, ignoring Issue/PR title: Duplicated "Type 'help argparse' for related documentation" for argparse fish-shell#8368 minor update to error message, ignoring Issue/PR title: Variable highlight color does not span lines fish-shell#8444 very obscure fix, ignoring --- Issue/PR title: Add --function to `read` fish-shell#8295 added to existing entry (565) Issue/PR title: Added completions for ethtool fish-shell#8283 added to existing entry Issue/PR title: Add dart completion fish-shell#8315 added to existing entry Issue/PR title: Add common lisp completions(sbcl/roswell) fish-shell#8330 added to existing entry Issue/PR title: Fix st issue with shift+tab fish-shell#8354 added to existing entry (8352) Issue/PR title: Support vi-mode cursors in Foot Terminal fish-shell#8391 added to existing entry (8167) Issue/PR title: Completions pager should redraw if the subbed completion wraps/unwraps the line fish-shell#8405 added to existing entry (8509) --- Issue/PR title: Binding escape as user binding breaks escape sequence bindings (arrows, etc) fish-shell#8428 added new entry Issue/PR title: Windows "color" command completion fish-shell#8483 added new entry Issue/PR title: Doesn't build when using netbsd curses on Linux fish-shell#8087 added new entry Issue/PR title: Don't override linker fish-shell#8152 added new entry Issue/PR title: Add completions for `git-sizer` fish-shell#8156 added new entry Issue/PR title: `d3ceba107e88b6c6e1a0358ebcb30366aeef653f` causes issues with repainting multi-line prompt fish-shell#8163 added new entry Issue/PR title: Builtin math ncr can be extremely slow fish-shell#8170 added new entry Issue/PR title: Completion sometimes missing the last token fish-shell#8175 added new entry Issue/PR title: `set -S` should mark read-only variables fish-shell#8179 added new entry Issue/PR title: Errors when trying to autocomplete (invalid) UTF-8 escapes fish-shell#8195 added new entry Issue/PR title: Always use LC_NUMERIC=C internally fish-shell#8204 added new entry Issue/PR title: Slow interaction between backgrounding, universal variables, and repainting fish-shell#8209 added new entry Issue/PR title: Unsetting `$fish_emoji_width` doesn't clear the cached width fish-shell#8274 added new entry Issue/PR title: If prompt ends in an empty line, the commandline is inserted at the width of the line before fish-shell#8298 added new entry Issue/PR title: assertion normal_exited() failed related to paged builtin help fish-shell#8308 added new entry Issue/PR title: colors don't kick in for ls on macOS Big Sur, Monterey (and maybe FreeBSD) fish-shell#8309 added new entry Issue/PR title: Adds sub-command clear-session to history command. Issue fish-shell#5791 fish-shell#8337 added new entry (as 5791) Issue/PR title: Display local branches before unique remote branches in git completion fish-shell#8338 added new entry Issue/PR title: Fix delete-key in st fish-shell#8352 added new entry Issue/PR title: sigsegv on set --show variable (when LANG is set to fr_FR.utf8) fish-shell#8358 added new entry Issue/PR title: Add clasp completion fish-shell#8373 added new entry Issue/PR title: `cargo run --example` completions break with nested example directories fish-shell#8429 added new entry Issue/PR title: argparse completions fish-shell#8434 added new entry Issue/PR title: Stop linking to StackOverflow fish-shell#8495 added new entry Issue/PR title: fish_key_reader ^C warning isn't right fish-shell#8510 added new entry Issue/PR title: Use `--almost-all` in `la` function fish-shell#8519 added new entry --- Issue/PR title: improve the experience of using fish over mosh fish-shell#1363 listed as 8376, ignoring Issue/PR title: incomplete man page completions fish-shell#8305 listed as 8309, ignoring Issue/PR title: Support "$(cmd)" command substitution without line splitting fish-shell#8059 listed as 159, ignoring Issue/PR title: fish_config: Read colorschemes from .theme files fish-shell#8127 listed as 8132, ignoring Issue/PR title: funced: edit the whole file, not just the function definition fish-shell#8130 listed as 391, ignoring Issue/PR title: builtin cd: print error about broken symlink fish-shell#8270 listed as 8264, ignoring Issue/PR title: fix man completion for BSD's mandoc fish-shell#8306 listed as 8305, ignoring Issue/PR title: Don't escape tildes that come from custom completions fish-shell#8441 listed as 8441, ignoring Issue/PR title: Use `cargo run --example` to get list of examples fish-shell#8446 listed as 8429, ignoring --- Issue/PR title: Node completion: add v8 sparkplug option fish-shell#8118 update to existing completions, ignoring Issue/PR title: Add zypper subcommands completion fish-shell#8183 update to existing completions, ignoring Issue/PR title: completion nmap: suppress warning when local scripts folder exists fish-shell#8184 update to existing completions, ignoring Issue/PR title: add missing `git commit` completions fish-shell#8191 update to existing completions, ignoring Issue/PR title: Updated ping completions fish-shell#8192 update to existing completions, ignoring Issue/PR title: Add `--function` to `set` completion fish-shell#8202 update to existing completions, ignoring Issue/PR title: completion: support `--no` prefixes for mpv flag options fish-shell#8219 update to existing completions, ignoring Issue/PR title: complete "mpc load" fish-shell#8241 update to existing completions, ignoring Issue/PR title: Add and fix completions for new options fish-shell#8243 update to existing completions, ignoring Issue/PR title: Fix completions/ls.fish fish-shell#8249 update to existing completions, ignoring Issue/PR title: Fix completions/coredumpctl.fish and add new complete fish-shell#8256 update to existing completions, ignoring Issue/PR title: completions/git: Handle "1 .T" & "1 AT" files fish-shell#8311 update to existing completions, ignoring Issue/PR title: completions/xbps-query: add missing `-p` completions fish-shell#8323 update to existing completions, ignoring Issue/PR title: Update ldapsearch.fish fish-shell#8326 update to existing completions, ignoring Issue/PR title: small fix completions/duply.fish fish-shell#8327 update to existing completions, ignoring Issue/PR title: Update ip.fish fish-shell#8334 update to existing completions, ignoring Issue/PR title: Fix ant completion fish-shell#8344 update to existing completions, ignoring Issue/PR title: Update dmesg completions fish-shell#8365 update to existing completions, ignoring Issue/PR title: No hints for -g|--global and -U|--universal flags for abbr command fish-shell#8367 update to existing completions, ignoring Issue/PR title: Updated systemd-analyze completions fish-shell#8381 update to existing completions, ignoring Issue/PR title: vmctl completion function call needs to be quoted fish-shell#8406 update to existing completions, ignoring Issue/PR title: pabcnetcclear command completion update fish-shell#8480 update to existing completions, ignoring --- Issue/PR title: document `--no-config` fish-shell#8176 doc update, ignoring Issue/PR title: Theme demo needs to be adjusted so that only unmatched quote is an error fish-shell#8260 doc update, ignoring Issue/PR title: no error about wrong >>? redirection operator fish-shell#8380 doc update, ignoring Issue/PR title: set -l works outside of command block fish-shell#8385 doc update, ignoring Issue/PR title: Some enhancements to "for" and "while" loop pages fish-shell#8409 doc update, ignoring Issue/PR title: Html docs: Remove link underlines again? fish-shell#8439 doc update, ignoring Issue/PR title: Old-style options support "=" assignment operator in complete builtin fish-shell#8457 doc update, ignoring Issue/PR title: Document prompt_hostname fish-shell#8522 doc update, ignoring --- Issue/PR title: edit_command_buffer: use "command" to ignore any functions with the same name fish-shell#8221 only helps broken systems, ignoring Issue/PR title: Prepend command to cat fish-shell#8287 only helps broken systems, ignoring Issue/PR title: Make less version check compatible with older Fish fish-shell#8299 only helps broken systems, ignoring Issue/PR title: Skip leading `command` in `__fish_man_page` fish-shell#8447 only helps broken systems, ignoring Issue/PR title: fish_config doesn't work without curses module fish-shell#8487 only helps broken systems, ignoring --- Issue/PR title: fix 'socket file name too long' error fish-shell#8128 test fix with long tempdirs (macOS), not really user-visible, ignoring Issue/PR title: Give tests a more generic name fish-shell#8449 not user-visible, ignoring Issue/PR title: string tests sometimes failing on macOS (Github Actions) fish-shell#8353 not user-visible, ignoring Issue/PR title: history merge test fails on OpenBSD fish-shell#6477 not user-visible, ignoring --- Issue/PR title: Obtain Deno completions from itself fish-shell#8471 update to an unreleased feature (7138), ignoring Issue/PR title: `string length --visible` performance fish-shell#8253 update to an unreleased feature, ignoring Issue/PR title: Backspace character is ignored when calculating string widths fish-shell#8277 update to an unreleased feature, ignoring Issue/PR title: `fish_config choose` leaves previous right prompt in place fish-shell#8314 update to an unreleased feature, ignoring Issue/PR title: parenthesis characters outer of $(command substitution) in string cause error fish-shell#8394 update to an unreleased feature, ignoring Issue/PR title: Parser bug with command substitutions in strings inside parenthesis fish-shell#8500 update to an unreleased feature, ignoring Issue/PR title: fish_config: silently doesn't set color schemes. fish-shell#8419 regression, not in any release, ignoring Issue/PR title: :program: in sphinx doesn't link fish-shell#8438 regression, not in any release, ignoring Issue/PR title: __fish_seen_argument.fish throws exception when autocompleting fish-shell#8478 regression, not in any release, ignoring --- Issue/PR title: Fix typo in abbr docs fish-shell#8280 typofix, ignoring Issue/PR title: Fix typo in `set_colors` command documentation fish-shell#8321 typofix, ignoring Issue/PR title: Typo funcions -> functions fish-shell#8257 typofix, ignoring --- Issue/PR title: remove make_pair fish-shell#8206 no behavior change, ignoring Issue/PR title: replace push_back with emplate_back fish-shell#8222 no behavior change, ignoring Issue/PR title: clang-tidy: remove pointless virtual fish-shell#8224 no behavior change, ignoring Issue/PR title: change value to rvalue reference fish-shell#8227 no behavior change, ignoring Issue/PR title: convert const ref to rvalue ref fish-shell#8228 no behavior change, ignoring Issue/PR title: clang-tidy: use for range loops fish-shell#8229 no behavior change, ignoring Issue/PR title: fix deleted constructors fish-shell#8230 nno behavior change, ignoring Issue/PR title: clang-tidy: const reference conversions fish-shell#8231 no behavior change, ignoring Issue/PR title: clang-tidy: simplify two bool returns fish-shell#8235 no behavior change, ignoring Issue/PR title: clang-tidy: replace size comparisons with empty fish-shell#8237 no behavior change, ignoring Issue/PR title: clang-tidy: replace NULL with nullptr fish-shell#8239 no behavior change, ignoring Issue/PR title: add constexpr fish-shell#8252 no behavior change, ignoring Issue/PR title: __fish_seen_subcommand_from and __fish_seen_argument update fish-shell#8430 no behavior change (apart from a regression that's fixed), ignoring Issue/PR title: Run fish_indent on all non-test .fish files fish-shell#8476 no behavior change, ignoring Issue/PR title: Use test command instead of bracket command fish-shell#8477 no behavior change, ignoring Issue/PR title: Fix code scanning alert - Wrong type of arguments to formatting function fish-shell#8521 no behavior change, ignoring Issue/PR title: clang-tidy: replace push_back with emplace_back fish-shell#8236 no behavior change, ignoring ---
No description provided.