[PATCH v3] [BZ #14579] rtld: limit self loading check to normal mode only

Dmitry V. Levin ldv@altlinux.org
Sat Sep 15 21:23:00 GMT 2012


On Fri, Sep 14, 2012 at 06:21:52PM -0700, Roland McGrath wrote:
> > +	$(SHELL) -e $^ > $@
> 
> If you want -e behavior, it's better to put 'set -e' inside the script so
> it's self-contained rather than implicitly expecting an unusual invocation.

If script relies upon -e behavior, then 'set -e' is preferable.  However,
the current glibc practice is $(SHELL) -e:

$ git grep -F '$(SHELL)' */Makefile
catgets/Makefile:	$(SHELL) -e $< $(common-objpfx) '$(built-program-cmd)'
elf/Makefile:	$(SHELL) -e $< $(common-objpfx)
elf/Makefile:	$(SHELL) -e $^ > $@
grp/Makefile:	$(SHELL) -e tst_fgetgrent.sh $(common-objpfx) $(elf-objpfx) \
iconvdata/Makefile:LC_ALL=C $(SHELL) ./gen-8bit.sh $< > $(@:stmp=T)
iconvdata/Makefile:LC_ALL=C $(SHELL) ./gen-8bit-gap.sh $< > $(@:stmp=T)
iconvdata/Makefile:	LC_ALL=C $(SHELL) ./gen-8bit-gap-1.sh $< > $(@:stmp=T)
iconvdata/Makefile:	$(SHELL) -e $< $(common-objdir) > $@
iconvdata/Makefile:	$(SHELL) $< $(common-objpfx) $(common-objpfx)iconvdata/ > $@
intl/Makefile:	$(SHELL) -e $< $(common-objpfx) $(common-objpfx)intl/ \
intl/Makefile:	$(SHELL) -e $< $(common-objpfx) $(common-objpfx)intl/
intl/Makefile:	$(SHELL) -e $< $(common-objpfx) $(common-objpfx)intl/
intl/Makefile:	$(SHELL) -e $< $(common-objpfx) '$(run-program-prefix)' $(common-objpfx)intl/
intl/Makefile:	$(SHELL) -e $< $(common-objpfx) '$(run-program-prefix)' $(common-objpfx)intl/
io/Makefile:	$(SHELL) -e ftwtest-sh $(shell cd $(common-objpfx). && pwd)/ \
libio/Makefile:	$(SHELL) -e $< $(common-objpfx) '$(run-program-prefix)'	\
localedata/Makefile:	@$(SHELL) -e gen-locale.sh $(common-objpfx) '$(built-program-cmd)' $@
localedata/Makefile:	$(SHELL) -e $< $(common-objpfx) '$(run-program-prefix)' $(test-input) \
localedata/Makefile:	$(SHELL) -e $< $(common-objpfx) '$(run-program-prefix)' tst-fmon.data \
localedata/Makefile:	$(SHELL) -e $< $(common-objpfx) '$(run-program-prefix)' tst-numeric.data \
localedata/Makefile:	$(SHELL) -e $< $(common-objpfx) '$(built-program-cmd)' > $@
localedata/Makefile:	$(SHELL) -e $< $(common-objpfx) '$(built-program-cmd)' > $@
localedata/Makefile:	$(SHELL) -e $< $(common-objpfx) '$(run-program-prefix)'
localedata/Makefile:	$(SHELL) -e $< $(common-objpfx) '$(run-program-prefix)'
localedata/Makefile:	$(SHELL) -e $< $(common-objpfx) '$(built-program-cmd)'
localedata/Makefile:	$(SHELL) -e $< $(common-objpfx) '$(built-program-cmd)'
localedata/Makefile:	$(SHELL) -e $< $(common-objpfx) '$(built-program-cmd)'
malloc/Makefile:	$(SHELL) -e $< $(common-objpfx)
manual/Makefile:	AWK=$(AWK) $(SHELL) $< $(objpfx) \
manual/Makefile:	@if $(SHELL) -c '$(INSTALL_INFO) --version' >/dev/null 2>&1; then \
nptl/Makefile:	$(SHELL) -e tst-tls6.sh $(common-objpfx) $(elf-objpfx) \
nptl/Makefile:	$(SHELL) $< $(common-objpfx)libc_pic.a \
posix/Makefile:	$(SHELL) -e globtest.sh $(common-objpfx) $(elf-objpfx) \
posix/Makefile:	$(SHELL) -e wordexp-tst.sh $(common-objpfx) $(elf-objpfx) \
posix/Makefile:	$(SHELL) -e $< $(common-objpfx) $(elf-objpfx) $(rtld-installed-name)
stdio-common/Makefile:	$(SHELL) -e tst-unbputc.sh $(common-objpfx) '$(run-program-prefix)'
stdio-common/Makefile:	$(SHELL) -e tst-printf.sh $(common-objpfx) '$(run-program-prefix)'
stdlib/Makefile:	$(SHELL) -e $< $(common-objpfx) '$(run-program-prefix)' $(common-objpfx)stdlib/

> > +echo '# normal mode'
> > +$rtld $rtld 2>&1 && rc=0 || rc=$?
> 
> This is a strange formulation and only necessary because of -e.  I don't
> see what -e is buying you at all. Just drop -e and write:

set -e makes the script exit with a non-zero status if something goes
wrong.  Not the program being tested but something else.  I think
it is a good default behavior for test scripts.

> 	$rtld $rtld 2>&1
> 	test $? -le 127 || result=1

No, the exit status has to be saved anyway because its value is needed for
two different actions: print and test.


-- 
ldv
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://sourceware.org/pipermail/libc-alpha/attachments/20120915/54d257c0/attachment.sig>


More information about the Libc-alpha mailing list