A little-known feature of bash is that it can be extended with
loadable modules.  A number of example modules are built by default
and shipped in /usr/local/lib/bash.  However, loading some of those
modules fails because of missing symbols:

  bash$ enable finfo
  bash:/usr/local/lib/bash/finfo: undefined symbol 'sh_optind'
  bash:/usr/local/lib/bash/finfo: undefined symbol 'sh_optarg'
  bash: enable: finfo: not a shell builtin

This appears to concern bss symbols that _are_ defined in bash
itself:

  $ nm -g /usr/local/lib/bash/finfo | egrep 'sh_opt(ind|arg)'      
           U sh_optarg
           U sh_optind
  $ nm -g /usr/local/bin/bash | egrep 'sh_opt(ind|arg)'       
  00136588 B sh_optarg
  00136590 B sh_optind

I don't understand why this fails.  Note that this has been broken
for months, if not forever.  It is not a recent error.

Running bash with LD_DEBUG=1 provides no further information:

  bash$ enable finfo
  dlopen: loading: /usr/local/lib/bash/finfo
   flags /usr/local/lib/bash/finfo = 0x0
  head /usr/local/lib/bash/finfo
  obj /usr/local/lib/bash/finfo has /usr/local/lib/bash/finfo as head
  linking /usr/local/lib/bash/finfo as dlopen()ed
  head [/usr/local/lib/bash/finfo]
  examining: '/usr/local/lib/bash/finfo'
  tail /usr/local/lib/bash/finfo
  bash:/usr/local/lib/bash/finfo: undefined symbol 'sh_optind'
  bash:/usr/local/lib/bash/finfo: undefined symbol 'sh_optarg'
  unload_shlib called on /usr/local/lib/bash/finfo
  unload_shlib unloading on /usr/local/lib/bash/finfo
  dlopen: /usr/local/lib/bash/finfo: done (failed).
  dlopen: loading: finfo
  dlopen: failed to open finfo
  dlopen: finfo: done (failed).
  bash: enable: finfo: not a shell builtin

I'm at a loss.

-- 
Christian "naddy" Weisgerber                          na...@mips.inka.de

Reply via email to