Bug 21987

Summary: [sparc32] wrong bits/long-double.h installed
Product: glibc Reporter: Joseph Myers <jsm28>
Component: mathAssignee: Not yet assigned to anyone <unassigned>
Status: RESOLVED FIXED    
Severity: normal CC: jeremip11
Priority: P2 Flags: fweimer: security-
Version: 2.26   
Target Milestone: 2.27   
Host: sparc*-*-linux* Target:
Build: Last reconfirmed:

Description Joseph Myers 2017-08-22 00:20:46 UTC
My refactoring of long double information

commit 0acb8a2a855395c25b1feef2470f4d7ca4bed589
Author: Joseph Myers <joseph@codesourcery.com>
Date:   Wed Dec 14 18:27:56 2016 +0000

    Refactor long double information into bits/long-double.h.

resulted in sparc32 configurations installing the ldbl-opt version of bits/long-double.h instead of the intended sysdeps/unix/sysv/linux/sparc version.

For sparc32 by itself, this is not a problem, since the ldbl-opt version is correct for sparc32.  However, both sparc32 and sparc64 are supposed to install sets of headers that work for both of them, so that a single sysroot, whichever order the libraries are built and installed in, works for both.  The effect of having the wrong version installed is that you end up with a miscompiled sparc64 libstdc++ which fails glibc's configure tests for the C++ compiler.
Comment 1 Sourceware Commits 2017-08-22 00:32:07 UTC
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  75dfe623df945db7dd3c12a206d743c45c16b5ed (commit)
      from  ea99fcd03875caf59ceda354ec8ed813bb5a5f79 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=75dfe623df945db7dd3c12a206d743c45c16b5ed

commit 75dfe623df945db7dd3c12a206d743c45c16b5ed
Author: Joseph Myers <joseph@codesourcery.com>
Date:   Tue Aug 22 00:30:51 2017 +0000

    Fix position of tests-unsupported definition in assert/Makefile.
    
    tests-unsupported has to be defined before the inclusion of Rules in a
    subdirectory Makefile; otherwise it is ineffective.  This patch fixes
    the ordering in assert/Makefile, where a recent test addition put
    tests-unsupported too late (resulting in build failures when the C++
    compiler was missing or broken, and thereby showing up the unrelated
    bug 21987).
    
    Incidentally, I don't see why these tests depend on
    $(have-cxx-thread_local) rather than just a working C++ compiler.
    
    Tested in such a configuration (broken compiler/libstdc++) with
    build-many-glibcs.py.
    
    	* assert/Makefile [$(have-cxx-thread_local)]: Move conditional
    	variable definitions above inclusion of ../Rules.

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog       |    5 +++++
 assert/Makefile |    4 ++--
 2 files changed, 7 insertions(+), 2 deletions(-)
Comment 2 Sourceware Commits 2017-08-22 01:01:47 UTC
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  80f91666fed71fa3dd5eb5618739147cc731bc89 (commit)
      from  75dfe623df945db7dd3c12a206d743c45c16b5ed (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=80f91666fed71fa3dd5eb5618739147cc731bc89

commit 80f91666fed71fa3dd5eb5618739147cc731bc89
Author: Joseph Myers <joseph@codesourcery.com>
Date:   Tue Aug 22 00:59:43 2017 +0000

    Fix sparc32 bits/long-double.h (bug 21987).
    
    My refactoring of long double information
    
    commit 0acb8a2a855395c25b1feef2470f4d7ca4bed589
    Author: Joseph Myers <joseph@codesourcery.com>
    Date:   Wed Dec 14 18:27:56 2016 +0000
    
        Refactor long double information into bits/long-double.h.
    
    resulted in sparc32 configurations installing the ldbl-opt version of
    bits/long-double.h instead of the intended
    sysdeps/unix/sysv/linux/sparc version.
    
    For sparc32 by itself, this is not a problem, since the ldbl-opt
    version is correct for sparc32.  However, both sparc32 and sparc64 are
    supposed to install sets of headers that work for both of them, so
    that a single sysroot, whichever order the libraries are built and
    installed in, works for both.  The effect of having the wrong version
    installed is that you end up with a miscompiled sparc64 libstdc++
    which fails glibc's configure tests for the C++ compiler.
    
    This patch moves the header from sysdeps/unix/sysv/linux/sparc to
    separate copies of the same file for sparc32 and sparc64, to ensure it
    comes before ldbl-opt in the sysdeps directory ordering.
    
    Tested with build-many-glibcs.py for sparc64-linux-gnu and
    sparcv9-linux-gnu.
    
    	[BZ #21987]
    	* sysdeps/unix/sysv/linux/sparc/bits/long-double.h: Remove file
    	and copy to ...
    	* sysdeps/unix/sysv/linux/sparc/sparc32/bits/long-double.h:
    	... here.
    	* sysdeps/unix/sysv/linux/sparc/sparc64/bits/long-double.h:
    	... and here.

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                          |    8 ++++++++
 .../linux/sparc/{ => sparc32}/bits/long-double.h   |    0
 .../linux/sparc/{ => sparc64}/bits/long-double.h   |    0
 3 files changed, 8 insertions(+), 0 deletions(-)
 copy sysdeps/unix/sysv/linux/sparc/{ => sparc32}/bits/long-double.h (100%)
 rename sysdeps/unix/sysv/linux/sparc/{ => sparc64}/bits/long-double.h (100%)
Comment 3 Joseph Myers 2017-08-22 01:02:53 UTC
Fixed for 2.27.
Comment 4 Sourceware Commits 2017-09-04 09:36:24 UTC
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, release/2.26/master has been updated
       via  947e2e0a9410c18eb44144456c7fe8e7c0e2a999 (commit)
      from  58270c0049404ef2f878fdd45df55f17f0b8c1f7 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=947e2e0a9410c18eb44144456c7fe8e7c0e2a999

commit 947e2e0a9410c18eb44144456c7fe8e7c0e2a999
Author: Joseph Myers <joseph@codesourcery.com>
Date:   Tue Aug 22 00:30:51 2017 +0000

    Fix position of tests-unsupported definition in assert/Makefile.
    
    tests-unsupported has to be defined before the inclusion of Rules in a
    subdirectory Makefile; otherwise it is ineffective.  This patch fixes
    the ordering in assert/Makefile, where a recent test addition put
    tests-unsupported too late (resulting in build failures when the C++
    compiler was missing or broken, and thereby showing up the unrelated
    bug 21987).
    
    Incidentally, I don't see why these tests depend on
    $(have-cxx-thread_local) rather than just a working C++ compiler.
    
    Tested in such a configuration (broken compiler/libstdc++) with
    build-many-glibcs.py.
    
    	* assert/Makefile [$(have-cxx-thread_local)]: Move conditional
    	variable definitions above inclusion of ../Rules.
    
    (cherry picked from commit 75dfe623df945db7dd3c12a206d743c45c16b5ed)

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog       |    5 +++++
 assert/Makefile |    4 ++--
 2 files changed, 7 insertions(+), 2 deletions(-)
Comment 5 Sourceware Commits 2017-10-02 15:52:00 UTC
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, release/2.26/master has been updated
       via  3f68c5c9b61600f0f85c75bac15b1520d5059359 (commit)
      from  fdf58ebc60ce0eb459fd616241b52872b3571ac1 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=3f68c5c9b61600f0f85c75bac15b1520d5059359

commit 3f68c5c9b61600f0f85c75bac15b1520d5059359
Author: Joseph Myers <joseph@codesourcery.com>
Date:   Tue Aug 22 00:59:43 2017 +0000

    Fix sparc32 bits/long-double.h (bug 21987).
    
    My refactoring of long double information
    
    commit 0acb8a2a855395c25b1feef2470f4d7ca4bed589
    Author: Joseph Myers <joseph@codesourcery.com>
    Date:   Wed Dec 14 18:27:56 2016 +0000
    
        Refactor long double information into bits/long-double.h.
    
    resulted in sparc32 configurations installing the ldbl-opt version of
    bits/long-double.h instead of the intended
    sysdeps/unix/sysv/linux/sparc version.
    
    For sparc32 by itself, this is not a problem, since the ldbl-opt
    version is correct for sparc32.  However, both sparc32 and sparc64 are
    supposed to install sets of headers that work for both of them, so
    that a single sysroot, whichever order the libraries are built and
    installed in, works for both.  The effect of having the wrong version
    installed is that you end up with a miscompiled sparc64 libstdc++
    which fails glibc's configure tests for the C++ compiler.
    
    This patch moves the header from sysdeps/unix/sysv/linux/sparc to
    separate copies of the same file for sparc32 and sparc64, to ensure it
    comes before ldbl-opt in the sysdeps directory ordering.
    
    Tested with build-many-glibcs.py for sparc64-linux-gnu and
    sparcv9-linux-gnu.
    
    	[BZ #21987]
    	* sysdeps/unix/sysv/linux/sparc/bits/long-double.h: Remove file
    	and copy to ...
    	* sysdeps/unix/sysv/linux/sparc/sparc32/bits/long-double.h:
    	... here.
    	* sysdeps/unix/sysv/linux/sparc/sparc64/bits/long-double.h:
    	... and here.
    
    (cherry picked from commit 80f91666fed71fa3dd5eb5618739147cc731bc89)

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                          |   10 ++++++++++
 .../linux/sparc/{ => sparc32}/bits/long-double.h   |    0
 .../linux/sparc/{ => sparc64}/bits/long-double.h   |    0
 3 files changed, 10 insertions(+), 0 deletions(-)
 copy sysdeps/unix/sysv/linux/sparc/{ => sparc32}/bits/long-double.h (100%)
 rename sysdeps/unix/sysv/linux/sparc/{ => sparc64}/bits/long-double.h (100%)
Comment 6 Sourceware Commits 2017-10-02 15:55:17 UTC
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, release/2.25/master has been updated
       via  ac93084c086ff06f815c405c9eb36a2b1f02da6a (commit)
      from  b64e0298661a084d8aab6756b08dbced515449d8 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=ac93084c086ff06f815c405c9eb36a2b1f02da6a

commit ac93084c086ff06f815c405c9eb36a2b1f02da6a
Author: Joseph Myers <joseph@codesourcery.com>
Date:   Tue Aug 22 00:59:43 2017 +0000

    Fix sparc32 bits/long-double.h (bug 21987).
    
    My refactoring of long double information
    
    commit 0acb8a2a855395c25b1feef2470f4d7ca4bed589
    Author: Joseph Myers <joseph@codesourcery.com>
    Date:   Wed Dec 14 18:27:56 2016 +0000
    
        Refactor long double information into bits/long-double.h.
    
    resulted in sparc32 configurations installing the ldbl-opt version of
    bits/long-double.h instead of the intended
    sysdeps/unix/sysv/linux/sparc version.
    
    For sparc32 by itself, this is not a problem, since the ldbl-opt
    version is correct for sparc32.  However, both sparc32 and sparc64 are
    supposed to install sets of headers that work for both of them, so
    that a single sysroot, whichever order the libraries are built and
    installed in, works for both.  The effect of having the wrong version
    installed is that you end up with a miscompiled sparc64 libstdc++
    which fails glibc's configure tests for the C++ compiler.
    
    This patch moves the header from sysdeps/unix/sysv/linux/sparc to
    separate copies of the same file for sparc32 and sparc64, to ensure it
    comes before ldbl-opt in the sysdeps directory ordering.
    
    Tested with build-many-glibcs.py for sparc64-linux-gnu and
    sparcv9-linux-gnu.
    
    	[BZ #21987]
    	* sysdeps/unix/sysv/linux/sparc/bits/long-double.h: Remove file
    	and copy to ...
    	* sysdeps/unix/sysv/linux/sparc/sparc32/bits/long-double.h:
    	... here.
    	* sysdeps/unix/sysv/linux/sparc/sparc64/bits/long-double.h:
    	... and here.
    
    (cherry picked from commit 80f91666fed71fa3dd5eb5618739147cc731bc89)

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                          |   10 ++++++++++
 .../linux/sparc/{ => sparc32}/bits/long-double.h   |    0
 .../linux/sparc/{ => sparc64}/bits/long-double.h   |    0
 3 files changed, 10 insertions(+), 0 deletions(-)
 copy sysdeps/unix/sysv/linux/sparc/{ => sparc32}/bits/long-double.h (100%)
 rename sysdeps/unix/sysv/linux/sparc/{ => sparc64}/bits/long-double.h (100%)
Comment 7 Sourceware Commits 2017-10-19 17:33:17 UTC
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  37bb78cb8c1fb6b5813407c8856b1557359e6343 (commit)
      from  d74e6f6c0de55fc588b1ac09c88eb0fb8b8600af (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=37bb78cb8c1fb6b5813407c8856b1557359e6343

commit 37bb78cb8c1fb6b5813407c8856b1557359e6343
Author: Joseph Myers <joseph@codesourcery.com>
Date:   Thu Oct 19 17:32:20 2017 +0000

    Install correct bits/long-double.h for MIPS64 (bug 22322).
    
    Similar to bug 21987 for SPARC, MIPS64 wrongly installs the ldbl-128
    version of bits/long-double.h, meaning incorrect results when using
    headers installed from a 64-bit installation for a 32-bit build.  (I
    haven't actually seen this cause build failures before its interaction
    with bits/floatn.h did so - installed headers wrongly expecting
    _Float128 to be available in a 32-bit configuration.)
    
    This patch fixes the bug by moving the MIPS header to
    sysdeps/mips/ieee754, which comes before sysdeps/ieee754/ldbl-128 in
    the sysdeps directory ordering.  (bits/floatn.h will need a similar
    fix - duplicating the ldbl-128 version for MIPS will suffice - for
    headers from a 32-bit installation to be correct for 64-bit builds.)
    
    Tested with build-many-glibcs.py (compilers build for
    mips64-linux-gnu, where there was previously a libstdc++ build failure
    as at
    <https://sourceware.org/ml/libc-testresults/2017-q4/msg00130.html>).
    
    	[BZ #22322]
    	* sysdeps/mips/bits/long-double.h: Move to ....
    	* sysdeps/mips/ieee754/bits/long-double.h: ... here.

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                     |    6 ++++++
 sysdeps/mips/{ => ieee754}/bits/long-double.h |    0
 2 files changed, 6 insertions(+), 0 deletions(-)
 rename sysdeps/mips/{ => ieee754}/bits/long-double.h (100%)
Comment 8 Sourceware Commits 2017-10-23 15:47:40 UTC
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, release/2.26/master has been updated
       via  04acd597943e90147e4bc139911564788e04ae51 (commit)
      from  b1b8d8aa95a055dc7929259679a995189d444809 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=04acd597943e90147e4bc139911564788e04ae51

commit 04acd597943e90147e4bc139911564788e04ae51
Author: Joseph Myers <joseph@codesourcery.com>
Date:   Thu Oct 19 17:32:20 2017 +0000

    Install correct bits/long-double.h for MIPS64 (bug 22322).
    
    Similar to bug 21987 for SPARC, MIPS64 wrongly installs the ldbl-128
    version of bits/long-double.h, meaning incorrect results when using
    headers installed from a 64-bit installation for a 32-bit build.  (I
    haven't actually seen this cause build failures before its interaction
    with bits/floatn.h did so - installed headers wrongly expecting
    _Float128 to be available in a 32-bit configuration.)
    
    This patch fixes the bug by moving the MIPS header to
    sysdeps/mips/ieee754, which comes before sysdeps/ieee754/ldbl-128 in
    the sysdeps directory ordering.  (bits/floatn.h will need a similar
    fix - duplicating the ldbl-128 version for MIPS will suffice - for
    headers from a 32-bit installation to be correct for 64-bit builds.)
    
    Tested with build-many-glibcs.py (compilers build for
    mips64-linux-gnu, where there was previously a libstdc++ build failure
    as at
    <https://sourceware.org/ml/libc-testresults/2017-q4/msg00130.html>).
    
    	[BZ #22322]
    	* sysdeps/mips/bits/long-double.h: Move to ....
    	* sysdeps/mips/ieee754/bits/long-double.h: ... here.
    
    (cherry picked from commit 37bb78cb8c1fb6b5813407c8856b1557359e6343)

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                     |    6 ++++++
 NEWS                                          |    1 +
 sysdeps/mips/{ => ieee754}/bits/long-double.h |    0
 3 files changed, 7 insertions(+), 0 deletions(-)
 rename sysdeps/mips/{ => ieee754}/bits/long-double.h (100%)
Comment 9 Sourceware Commits 2017-10-23 15:50:05 UTC
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, release/2.25/master has been updated
       via  0fc015b6db6a1591d2beecb98362f5de175a077f (commit)
      from  61bebc863e65afd994b08353f574c5df3fe8accc (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=0fc015b6db6a1591d2beecb98362f5de175a077f

commit 0fc015b6db6a1591d2beecb98362f5de175a077f
Author: Joseph Myers <joseph@codesourcery.com>
Date:   Thu Oct 19 17:32:20 2017 +0000

    Install correct bits/long-double.h for MIPS64 (bug 22322).
    
    Similar to bug 21987 for SPARC, MIPS64 wrongly installs the ldbl-128
    version of bits/long-double.h, meaning incorrect results when using
    headers installed from a 64-bit installation for a 32-bit build.  (I
    haven't actually seen this cause build failures before its interaction
    with bits/floatn.h did so - installed headers wrongly expecting
    _Float128 to be available in a 32-bit configuration.)
    
    This patch fixes the bug by moving the MIPS header to
    sysdeps/mips/ieee754, which comes before sysdeps/ieee754/ldbl-128 in
    the sysdeps directory ordering.  (bits/floatn.h will need a similar
    fix - duplicating the ldbl-128 version for MIPS will suffice - for
    headers from a 32-bit installation to be correct for 64-bit builds.)
    
    Tested with build-many-glibcs.py (compilers build for
    mips64-linux-gnu, where there was previously a libstdc++ build failure
    as at
    <https://sourceware.org/ml/libc-testresults/2017-q4/msg00130.html>).
    
    	[BZ #22322]
    	* sysdeps/mips/bits/long-double.h: Move to ....
    	* sysdeps/mips/ieee754/bits/long-double.h: ... here.
    
    (cherry picked from commit 37bb78cb8c1fb6b5813407c8856b1557359e6343)

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                     |    6 ++++++
 NEWS                                          |    1 +
 sysdeps/mips/{ => ieee754}/bits/long-double.h |    0
 3 files changed, 7 insertions(+), 0 deletions(-)
 rename sysdeps/mips/{ => ieee754}/bits/long-double.h (100%)
Comment 10 Sourceware Commits 2018-01-04 12:37:03 UTC
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, release/2.25/master has been updated
       via  d11bdaa1f114872e94c7a08f0beefac31b60c75d (commit)
      from  fc7ef00f02ee41452245926a4f7ff2073711db33 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=d11bdaa1f114872e94c7a08f0beefac31b60c75d

commit d11bdaa1f114872e94c7a08f0beefac31b60c75d
Author: Joseph Myers <joseph@codesourcery.com>
Date:   Tue Aug 22 00:30:51 2017 +0000

    Fix position of tests-unsupported definition in assert/Makefile.
    
    tests-unsupported has to be defined before the inclusion of Rules in a
    subdirectory Makefile; otherwise it is ineffective.  This patch fixes
    the ordering in assert/Makefile, where a recent test addition put
    tests-unsupported too late (resulting in build failures when the C++
    compiler was missing or broken, and thereby showing up the unrelated
    bug 21987).
    
    Incidentally, I don't see why these tests depend on
    $(have-cxx-thread_local) rather than just a working C++ compiler.
    
    Tested in such a configuration (broken compiler/libstdc++) with
    build-many-glibcs.py.
    
    	* assert/Makefile [$(have-cxx-thread_local)]: Move conditional
    	variable definitions above inclusion of ../Rules.
    
    (cherry picked from commit 75dfe623df945db7dd3c12a206d743c45c16b5ed)

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog       |    5 +++++
 assert/Makefile |    4 ++--
 2 files changed, 7 insertions(+), 2 deletions(-)