about summary refs log tree commit diff
path: root/Makerules
diff options
context:
space:
mode:
authorFangrui Song <maskray@google.com>2021-01-11 11:56:54 -0800
committerFangrui Song <maskray@google.com>2021-01-11 12:03:36 -0800
commit87d583c6e8cd0e49f64da76636ebeec033298b4d (patch)
tree0db4d141573b5454d054767ac407e32e7e6bfc9c /Makerules
parentbf7db6d369d7366ffe3ebcf3c2810139b0195517 (diff)
downloadglibc-87d583c6e8cd0e49f64da76636ebeec033298b4d.tar.gz
glibc-87d583c6e8cd0e49f64da76636ebeec033298b4d.tar.xz
glibc-87d583c6e8cd0e49f64da76636ebeec033298b4d.zip
install: Replace scripts/output-format.sed with objdump -f [BZ #26559]
GNU ld and gold have supported --print-output-format since 2011. glibc
requires binutils>=2.25 (2015), so if LD is GNU ld or gold, we can
assume the option is supported.

lld is by default a cross linker supporting multiple targets. It auto
detects the file format and does not need OUTPUT_FORMAT. It does not
support --print-output-format.

By parsing objdump -f, we can support all the three linkers.

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
Diffstat (limited to 'Makerules')
-rw-r--r--Makerules13
1 files changed, 3 insertions, 10 deletions
diff --git a/Makerules b/Makerules
index 0b300613cc..06c7c48310 100644
--- a/Makerules
+++ b/Makerules
@@ -1065,20 +1065,13 @@ install: $(inst_slibdir)/libc.so$(libc.so-version)
 # for the configuration we are building.  We put this statement into
 # the linker scripts we install for -lc et al so that they will not be
 # used by a link for a different format on a multi-architecture system.
-$(common-objpfx)format.lds: $(..)scripts/output-format.sed \
-			    $(common-objpfx)config.make \
+$(common-objpfx)format.lds: $(common-objpfx)config.make \
 			    $(common-objpfx)config.h $(..)Makerules
-ifneq (unknown,$(output-format))
-	echo > $@.new 'OUTPUT_FORMAT($(output-format))'
-else
 	$(LINK.o) -shared $(sysdep-LDFLAGS) $(rtld-LDFLAGS) \
 		  $(LDFLAGS.so) $(LDFLAGS-lib.so) \
-		  -x c /dev/null -o $@.so -Wl,--verbose -v 2>/dev/null \
-	| sed -n -f $< > $@.new
-	test -s $@.new
+		  -x c /dev/null -o $@.so 2>/dev/null
+	$(OBJDUMP) -f $@.so | sed -n 's/.*file format \(.*\)/OUTPUT_FORMAT(\1)/;T;p' > $@
 	rm -f $@.so
-endif
-	mv -f $@.new $@
 common-generated += format.lds
 
 ifndef subdir