Bug 26288 - ET_EXEC files rejected with `--just-symbols' (PR ld/26047 fix regression)
Summary: ET_EXEC files rejected with `--just-symbols' (PR ld/26047 fix regression)
Status: RESOLVED FIXED
Alias: None
Product: binutils
Classification: Unclassified
Component: ld (show other bugs)
Version: 2.35
: P2 normal
Target Milestone: 2.35
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2020-07-22 21:42 UTC by Maciej W. Rozycki
Modified: 2020-07-23 19:27 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Maciej W. Rozycki 2020-07-22 21:42:47 UTC
The PR ld/26047 fix has regressed RISC-V/Linux kernel builds, causing a
link failure, by disallowing the use of ET_EXEC files as `--just-symbols'
input, which is legitimate and indeed often the most useful.
Comment 1 Maciej W. Rozycki 2020-07-22 21:44:13 UTC
I'm testing a fix along with a couple of test cases targetting 2.35.
Comment 2 Fangrui Song 2020-07-22 21:47:19 UTC
Allowing ET_EXEC with --just-symbols seems fine. Gold explicitly allows this combination.
Comment 3 Sourceware Commits 2020-07-23 19:12:49 UTC
The master branch has been updated by Maciej W. Rozycki <macro@sourceware.org>:

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=b5dd7120f6bcbd1fe650b8839a53b2bd423fbf60

commit b5dd7120f6bcbd1fe650b8839a53b2bd423fbf60
Author: Maciej W. Rozycki <macro@wdc.com>
Date:   Thu Jul 23 20:11:29 2020 +0100

    PR ld/26288: Revert obsolete part of PR ld/26047 fix
    
    Revert commit a3fc941881e4 ("Stop the linker from accepting executable
    ELF files as inputs to other links."), which has been made obsolete by
    commit a87e1817a435 ("Have the linker fail if any attempt to link in an
    executable is made.").  An earlier check triggers added with the latter
    commit making the piece of code removed dead.
    
            ld/
            PR ld/26288
    
            Revert:
            PR 26047
            * ldelf.c (ldelf_after_open): Fail if attempting to link one
            executable into another.
Comment 4 Sourceware Commits 2020-07-23 19:12:54 UTC
The master branch has been updated by Maciej W. Rozycki <macro@sourceware.org>:

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=97c79e2174fbb0dda16850fa5366592e93d31cb9

commit 97c79e2174fbb0dda16850fa5366592e93d31cb9
Author: Maciej W. Rozycki <macro@wdc.com>
Date:   Thu Jul 23 20:11:29 2020 +0100

    PR ld/26288: Allow the use of `--just-symbols' with ET_EXEC input
    
    Fix a regression from commit a87e1817a435 ("Have the linker fail if any
    attempt to link in an executable is made.") and do not reject ET_EXEC
    input supplied with the `--just-symbols' option.  Such use is legitimate
    as the file requested is not actually linked and only the symbols are
    extracted. Furthermore it is often the most useful application, as
    already observed in our documentation for the option, where it allows
    "to refer symbolically to absolute locations of memory defined in other
    programs."
    
    Provide a set of tests for the use of ET_EXEC with `--just-symbols'.
    These are excluded however for SH/PE targets because they complain if a
    section's VMA is 0:
    
    ld: zero vma section reloc detected: `.text' #0 f=32795
    ld: zero vma section reloc detected: `.data' #1 f=291
    
    and for x86_64/PE targets because they seem to hardwire the VMA:
    
     100000000 12000000 01000000 00000000 00000000  ................
    
            ld/
            PR ld/26288
            * ldelf.c (ldelf_after_open): Do not reject ET_EXEC input
            supplied with `--just-symbols'.
            * testsuite/ld-misc/just-symbols.exp: New test script.
            * testsuite/ld-misc/just-symbols-1.dd: New test dump.
            * testsuite/ld-misc/just-symbols.ld: New test linker script.
            * testsuite/ld-misc/just-symbols-0.s: New test source.
            * testsuite/ld-misc/just-symbols-1.s: New test source.
Comment 5 Sourceware Commits 2020-07-23 19:26:02 UTC
The binutils-2_35-branch branch has been updated by Maciej W. Rozycki <macro@sourceware.org>:

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=9b6165529df6a759d65fc786a44eb28e226b81ad

commit 9b6165529df6a759d65fc786a44eb28e226b81ad
Author: Maciej W. Rozycki <macro@wdc.com>
Date:   Thu Jul 23 20:24:58 2020 +0100

    PR ld/26288: Revert obsolete part of PR ld/26047 fix
    
    Revert commit a3fc941881e4 ("Stop the linker from accepting executable
    ELF files as inputs to other links."), which has been made obsolete by
    commit a87e1817a435 ("Have the linker fail if any attempt to link in an
    executable is made.").  An earlier check triggers added with the latter
    commit making the piece of code removed dead.
    
            ld/
            PR ld/26288
    
            Revert:
            PR 26047
            * ldelf.c (ldelf_after_open): Fail if attempting to link one
            executable into another.
    
    (cherry picked from commit b5dd7120f6bcbd1fe650b8839a53b2bd423fbf60)
Comment 6 Sourceware Commits 2020-07-23 19:26:07 UTC
The binutils-2_35-branch branch has been updated by Maciej W. Rozycki <macro@sourceware.org>:

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=fa3b131151d42e1284a447add8c0535ac92ec6e1

commit fa3b131151d42e1284a447add8c0535ac92ec6e1
Author: Maciej W. Rozycki <macro@wdc.com>
Date:   Thu Jul 23 20:24:58 2020 +0100

    PR ld/26288: Allow the use of `--just-symbols' with ET_EXEC input
    
    Fix a regression from commit a87e1817a435 ("Have the linker fail if any
    attempt to link in an executable is made.") and do not reject ET_EXEC
    input supplied with the `--just-symbols' option.  Such use is legitimate
    as the file requested is not actually linked and only the symbols are
    extracted. Furthermore it is often the most useful application, as
    already observed in our documentation for the option, where it allows
    "to refer symbolically to absolute locations of memory defined in other
    programs."
    
    Provide a set of tests for the use of ET_EXEC with `--just-symbols'.
    These are excluded however for SH/PE targets because they complain if a
    section's VMA is 0:
    
    ld: zero vma section reloc detected: `.text' #0 f=32795
    ld: zero vma section reloc detected: `.data' #1 f=291
    
    and for x86_64/PE targets because they seem to hardwire the VMA:
    
     100000000 12000000 01000000 00000000 00000000  ................
    
            ld/
            PR ld/26288
            * ldelf.c (ldelf_after_open): Do not reject ET_EXEC input
            supplied with `--just-symbols'.
            * testsuite/ld-misc/just-symbols.exp: New test script.
            * testsuite/ld-misc/just-symbols-1.dd: New test dump.
            * testsuite/ld-misc/just-symbols.ld: New test linker script.
            * testsuite/ld-misc/just-symbols-0.s: New test source.
            * testsuite/ld-misc/just-symbols-1.s: New test source.
    
    (cherry picked from commit 97c79e2174fbb0dda16850fa5366592e93d31cb9)
Comment 7 Maciej W. Rozycki 2020-07-23 19:27:19 UTC
Fixed on master and binutils-2_35-branch.