[all-commits] [llvm/llvm-project] c0065f: [ELF] Default to --no-fortran-common

Fangrui Song via All-commits all-commits at lists.llvm.org
Wed Mar 30 09:12:31 PDT 2022


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: c0065f118291e56ee6572032905a7301716e6b23
      https://github.com/llvm/llvm-project/commit/c0065f118291e56ee6572032905a7301716e6b23
  Author: Fangrui Song <i at maskray.me>
  Date:   2022-03-30 (Wed, 30 Mar 2022)

  Changed paths:
    M lld/ELF/Driver.cpp
    M lld/docs/ReleaseNotes.rst
    M lld/test/ELF/common-archive-lookup.s
    M lld/test/ELF/warn-backrefs.s

  Log Message:
  -----------
  [ELF] Default to --no-fortran-common

D86142 introduced --fortran-common and defaulted it to true (matching GNU ld
but deviates from gold/macOS ld64). The default state was motivated by transparently
supporting some FORTRAN 77 programs (Fortran 90 deprecated common blocks).
Now I think it again. I believe we made a mistake to change the default:

* this is a weird and legacy rule, though the breakage is very small
* --fortran-common introduced complexity to parallel symbol resolution and will slow down it
* --fortran-common more likely causes issues when users mix COMMON and
  STB_GLOBAL definitions (see https://github.com/llvm/llvm-project/issues/48570 and
  https://maskray.me/blog/2022-02-06-all-about-common-symbols).
  I have seen several issues in our internal projects and Android.
  On the other hand, --no-fortran-common is safer since
  COMMON/STB_GLOBAL have the same semantics related to archive member extraction.

Therefore I think we should switch back, not punishing the common uage.
A platform wanting --fortran-common can implement ld.lld as a shell script
wrapper around `lld -flavor gnu --fortran-common "$@"`.

Reviewed By: ikudrin, sfertile

Differential Revision: https://reviews.llvm.org/D122450




More information about the All-commits mailing list