Hallo!

Diffing the make log of a build of GCC with SHELL not explicitly set
(thus /bin/sh, which is bash) and one with SHELL=/bin/dash, I found the
following unexpected difference:

    -checking assembler for eh_frame optimization... yes
    +checking assembler for eh_frame optimization... buggy

This is from gcc/configure; which invokes
acinclude.m4:gcc_GAS_CHECK_FEATURE for the ``eh_frame optimization''
check.

Latter case, gcc/config.log:

    configure:22282: checking assembler for eh_frame optimization
    configure:22327: /usr/bin/as --32  -o conftest.o conftest.s >&5
    conftest.s: Assembler messages:
    conftest.s: Warning: end of file in string; '"' inserted
    conftest.s:13: Warning: unterminated string; newline inserted

There, the following happens:

    $ sh # This is bash.
    sh-4.1$ echo '.ascii "z\0"'
    .ascii "z\0"

This is what GCC expects.  However, with dash:

    $ dash
    $ echo '.ascii "z\0"'
    .ascii "z

The backslash escape and everything after is cut off.

The test in gcc/configure.ac:

    gcc_GAS_CHECK_FEATURE(eh_frame optimization, gcc_cv_as_eh_frame,
      [elf,2,12,0],,
    [   .text
    [...]
        .byte   0x1
        .ascii "z\0"
        .byte   0x1
    [...]

As quickly determined in #gcc with Ian's and Ismail's help, this is
unportable usage of the echo builtin (and also at least questionable for
/bin/echo), so I'm suggesting the following simple fix:

        gcc/
        * configure.ac (eh_frame optimization): Avoid unportable shell feature.

diff --git a/gcc/configure.ac b/gcc/configure.ac
index c2163bf..73f0209 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -2538,7 +2538,7 @@ __FRAME_BEGIN__:
 .LSCIE1:
        .4byte  0x0
        .byte   0x1
-       .ascii "z\0"
+       .asciz "z"
        .byte   0x1
        .byte   0x78
        .byte   0x1a

Alternatively, gcc_GAS_CHECK_FEATURE could be changed to emit the
temporary file by using a shell here-doc, which is what AC_TRY_COMPILE is
doing, for example.


Grüße,
 Thomas

Attachment: pgpoH48Y3yGDm.pgp
Description: PGP signature

Reply via email to