Don't let ld.so that failed its sanity check land in place.
authorRoland McGrath <roland@hack.frob.com>
Thu, 13 Jun 2013 17:26:44 +0000 (10:26 -0700)
committerRoland McGrath <roland@hack.frob.com>
Thu, 13 Jun 2013 17:26:44 +0000 (10:26 -0700)
ChangeLog
elf/Makefile

index 1a828ef..b32cced 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2013-06-13  Roland McGrath  <roland@hack.frob.com>
+
+       * elf/Makefile ($(objpfx)ld.so): Link into a temporary file and move
+       it into place only when and if the sanity check passes.
+
 2013-06-13  Joseph Myers  <joseph@codesourcery.com>
 
        * stdlib/gen-tst-strtod-round.c (round_str): Always generate
index 6f40414..3b58649 100644 (file)
@@ -318,13 +318,16 @@ generated += librtld.map librtld.mk rtld-libc.a librtld.os.map
 z-now-yes = -Wl,-z,now
 
 $(objpfx)ld.so: $(objpfx)librtld.os $(ld-map)
-       $(LINK.o) -nostdlib -nostartfiles -shared -o $@                 \
+# Link into a temporary file so that we don't touch $@ at all
+# if the sanity check below fails.
+       $(LINK.o) -nostdlib -nostartfiles -shared -o $@.new             \
                  $(LDFLAGS-rtld) -Wl,-z,defs $(z-now-$(bind-now))      \
                  $(filter-out $(map-file),$^) $(load-map-file)         \
                  -Wl,-soname=$(rtld-installed-name)                    \
                  -Wl,-defsym=_begin=0
-       $(READELF) -s $@ \
+       $(READELF) -s $@.new \
          | $(AWK) '($$7 ~ /^UND(|EF)$$/ && $$1 != "0:" && $$4 != "REGISTER") { print; p=1 } END { exit p != 0 }'
+       mv -f $@.new $@
 
 # interp.c exists just to get this string into the libraries.
 CFLAGS-interp.c = -D'RUNTIME_LINKER="$(rtlddir)/$(rtld-installed-name)"' \