diff options
author | Fangrui Song <maskray@google.com> | 2021-01-11 11:56:54 -0800 |
---|---|---|
committer | Fangrui Song <maskray@google.com> | 2021-01-11 12:03:36 -0800 |
commit | 87d583c6e8cd0e49f64da76636ebeec033298b4d (patch) | |
tree | 0db4d141573b5454d054767ac407e32e7e6bfc9c | |
parent | bf7db6d369d7366ffe3ebcf3c2810139b0195517 (diff) | |
download | glibc-87d583c6e8cd0e49f64da76636ebeec033298b4d.tar.gz |
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>
-rw-r--r-- | Makerules | 13 | ||||
-rw-r--r-- | benchtests/strcoll-inputs/filelist#en_US.UTF-8 | 1 | ||||
-rw-r--r-- | config.make.in | 1 | ||||
-rwxr-xr-x | configure | 19 | ||||
-rw-r--r-- | configure.ac | 11 | ||||
-rw-r--r-- | scripts/output-format.sed | 35 |
6 files changed, 3 insertions, 77 deletions
@@ -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 diff --git a/benchtests/strcoll-inputs/filelist#en_US.UTF-8 b/benchtests/strcoll-inputs/filelist#en_US.UTF-8 index 2f4ef195bb..43eb9efb40 100644 --- a/benchtests/strcoll-inputs/filelist#en_US.UTF-8 +++ b/benchtests/strcoll-inputs/filelist#en_US.UTF-8 @@ -9450,7 +9450,6 @@ move-if-change check-execstack.awk pylint pylintrc -output-format.sed merge-test-results.sh update-copyrights config-uname.sh diff --git a/config.make.in b/config.make.in index 7ae27564fd..7f47f0caa4 100644 --- a/config.make.in +++ b/config.make.in @@ -73,7 +73,6 @@ fno-unit-at-a-time = @fno_unit_at_a_time@ bind-now = @bindnow@ have-hash-style = @libc_cv_hashstyle@ use-default-link = @use_default_link@ -output-format = @libc_cv_output_format@ have-cxx-thread_local = @libc_cv_cxx_thread_local@ have-loop-to-function = @libc_cv_cc_loop_to_function@ have-textrel_ifunc = @libc_cv_textrel_ifunc@ @@ -623,7 +623,6 @@ libc_cv_cc_submachine libc_cv_cc_nofma libc_cv_mtls_dialect_gnu2 fno_unit_at_a_time -libc_cv_output_format libc_cv_has_glob_dat libc_cv_hashstyle libc_cv_fpie @@ -6074,24 +6073,6 @@ fi $as_echo "$libc_cv_has_glob_dat" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking linker output format" >&5 -$as_echo_n "checking linker output format... " >&6; } -if ${libc_cv_output_format+:} false; then : - $as_echo_n "(cached) " >&6 -else - if libc_cv_output_format=` -${CC-cc} -nostartfiles -nostdlib $no_ssp -Wl,--print-output-format 2>&5` -then - : -else - libc_cv_output_format= -fi -test -n "$libc_cv_output_format" || libc_cv_output_format=unknown -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_output_format" >&5 -$as_echo "$libc_cv_output_format" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -fno-toplevel-reorder -fno-section-anchors" >&5 $as_echo_n "checking for -fno-toplevel-reorder -fno-section-anchors... " >&6; } if ${libc_cv_fno_toplevel_reorder+:} false; then : diff --git a/configure.ac b/configure.ac index 43cfac9d48..341d4eeac2 100644 --- a/configure.ac +++ b/configure.ac @@ -1429,17 +1429,6 @@ fi rm -f conftest*]) AC_SUBST(libc_cv_has_glob_dat) -AC_CACHE_CHECK(linker output format, libc_cv_output_format, [dnl -if libc_cv_output_format=` -${CC-cc} -nostartfiles -nostdlib $no_ssp -Wl,--print-output-format 2>&AS_MESSAGE_LOG_FD` -then - : -else - libc_cv_output_format= -fi -test -n "$libc_cv_output_format" || libc_cv_output_format=unknown]) -AC_SUBST(libc_cv_output_format) - AC_CACHE_CHECK(for -fno-toplevel-reorder -fno-section-anchors, libc_cv_fno_toplevel_reorder, [dnl cat > conftest.c <<EOF int foo; diff --git a/scripts/output-format.sed b/scripts/output-format.sed deleted file mode 100644 index 364f52059f..0000000000 --- a/scripts/output-format.sed +++ /dev/null @@ -1,35 +0,0 @@ -/ld.*[ ]-E[BL]/b f -/collect.*[ ]-E[BL]/b f -/OUTPUT_FORMAT[^)]*$/{N -s/\n[ ]*/ / -} -t o -: o -s/^.*OUTPUT_FORMAT(\([^,]*\), \1, \1).*$/OUTPUT_FORMAT(\1)/ -t q -s/^.*OUTPUT_FORMAT(\([^,]*\), \([^,]*\), \([^,]*\)).*$/\1,\2,\3/ -t s -s/^.*OUTPUT_FORMAT(\([^,)]*\).*$)/OUTPUT_FORMAT(\1)/ -t q -d -: s -s/"//g -G -s/\n// -s/^\([^,]*\),\([^,]*\),\([^,]*\),B/OUTPUT_FORMAT(\2)/p -s/^\([^,]*\),\([^,]*\),\([^,]*\),L/OUTPUT_FORMAT(\3)/p -s/^\([^,]*\),\([^,]*\),\([^,]*\)/OUTPUT_FORMAT(\1)/p -/,/s|^|*** BUG in libc/scripts/output-format.sed *** |p -q -: q -s/"//g -p -q -: f -s/^.*[ ]-E\([BL]\)[ ].*$/,\1/ -t h -s/^.*[ ]-E\([BL]\)$/,\1/ -t h -d -: h -h |