[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug ld/6854] New: Use of BASH_LINENO[0] in ld/genscripts.sh prevents us

From: martinwguy at yahoo dot it
Subject: [Bug ld/6854] New: Use of BASH_LINENO[0] in ld/genscripts.sh prevents use of dash
Date: 25 Aug 2008 16:05:14 -0000

  In building a complete cross-toolchain with CONFIG_SHELL=/bin/ash (-> dash) is
frustrated by a single line in ld/genscripts.sh:

if test -n "${BASH+set}"; then
  printenv | grep BASH
    local current_script="$em_script"
    . $em_script
    local lineno=$[${BASH_LINENO[0]} + 1]   # <==== dash dies here
    echo >> e${EMULATION_NAME}.c "#line $lineno \"$em_script\""
    cat >> e${EMULATION_NAME}.c

Although dash doesn't execute the BASH_ code, it still dies parsing it, saying:

binutils-2.18/ld/genscripts.sh: 403: Syntax error: Bad substitution

Using dash knocks 35% off the elapsed build time for the toolchain compared to
bash - is this line-number-reporting code really worth it?

One fix is to drop the complex "then" clause leaving the body of the simple
"else" clause.

Another, keeping the exact same line-number bash functionality in a
non-dash-poisonous way is to achieve the same effect, substituting for the
fragment() function the following code:

  alias fragment='em_lineno=$LINENO; fragment_em'
    local lineno=$[$em_lineno + 1]
    echo >> e${EMULATION_NAME}.c "#line $lineno \"$em_script\""
    cat >> e${EMULATION_NAME}.c

I've tested this; with bash the files generated by genscripts.sh are identical
to those made with the original version, while using CONFIG_SHELL=/bin/dash the
binutils build finishes in

           Summary: Use of BASH_LINENO[0] in ld/genscripts.sh prevents use
                    of dash
           Product: binutils
           Version: 2.18
            Status: NEW
          Severity: minor
          Priority: P2
         Component: ld
        AssignedTo: unassigned at sources dot redhat dot com
        ReportedBy: martinwguy at yahoo dot it
                CC: bug-binutils at gnu dot org


------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]