[PATCH] Remove fno-unit-at-a-time make variable
Fangrui Song
maskray@google.com
Wed Mar 30 16:23:11 GMT 2022
On 2022-03-30, Adhemerval Zanella wrote:
>
>
>On 30/03/2022 02:07, Fangrui Song wrote:
>> 795985e4e751 in 2003 added -fno-unit-at-a-time to errlist.c and
>> siglist.c to "avoid reordering assembler output". -fno-toplevel-reorder
>> is a rough replacement for this legacy option
>> (https://sourceware.org/pipermail/gcc-patches/2006-January/186801.html).
>>
>> The reordering requirement does not seem to be needed any longer.
>
>We still need them for otherwise DEFINE_COMPAT_ERRLIST used on errlist-compat.c
>does not create _sys_errlist and _sys_siglist with expected sizes defined by
>glibc ABI.
>
>I am trying to fix without resorting to compiler options.
DEFINE_COMPAT_ERRLIST does not expand to code/data, just reordeable directives:
.globl __GLIBC_2_1_sys_errlist
.set __GLIBC_2_1_sys_errlist, _sys_errlist_internal
.type __GLIBC_2_1_sys_errlist,@object
.size __GLIBC_2_1_sys_errlist, 1000
.globl __GLIBC_2_1__sys_errlist
.set __GLIBC_2_1__sys_errlist, _sys_errlist_internal
.type __GLIBC_2_1__sys_errlist,@object
.size __GLIBC_2_1__sys_errlist, 1000
.symver __GLIBC_2_1_sys_nerr, sys_nerr@GLIBC_2.2.5
.symver __GLIBC_2_1__sys_nerr, _sys_nerr@GLIBC_2.2.5
.symver __GLIBC_2_1_sys_errlist, sys_errlist@GLIBC_2.2.5
.symver __GLIBC_2_1__sys_errlist, _sys_errlist@GLIBC_2.2.5
.globl __GLIBC_2_3_sys_errlist
.set __GLIBC_2_3_sys_errlist, _sys_errlist_internal
.type __GLIBC_2_3_sys_errlist,@object
.size __GLIBC_2_3_sys_errlist, 1008
.globl __GLIBC_2_3__sys_errlist
.set __GLIBC_2_3__sys_errlist, _sys_errlist_internal
.type __GLIBC_2_3__sys_errlist,@object
.size __GLIBC_2_3__sys_errlist, 1008
.symver __GLIBC_2_3_sys_nerr, sys_nerr@GLIBC_2.3
.symver __GLIBC_2_3__sys_nerr, _sys_nerr@GLIBC_2.3
.symver __GLIBC_2_3_sys_errlist, sys_errlist@GLIBC_2.3
.symver __GLIBC_2_3__sys_errlist, _sys_errlist@GLIBC_2.3
.globl __GLIBC_2_4_sys_errlist
I do not know whether GCC would reorder these macros. Even yes,
that'd just change the .symtab entries in the relocatable object file.
The linker behavior remains the same with reordering.
>> ---
>> config.make.in | 1 -
>> configure | 32 --------------------------------
>> configure.ac | 19 -------------------
>> stdio-common/Makefile | 2 --
>> 4 files changed, 54 deletions(-)
>>
>> diff --git a/config.make.in b/config.make.in
>> index 6d43e691f7..ecde84a7da 100644
>> --- a/config.make.in
>> +++ b/config.make.in
>> @@ -69,7 +69,6 @@ have-selinux = @have_selinux@
>> have-libaudit = @have_libaudit@
>> have-libcap = @have_libcap@
>> have-cc-with-libunwind = @libc_cv_cc_with_libunwind@
>> -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@
>> diff --git a/configure b/configure
>> index 2a3cb49b0b..f836874a58 100755
>> --- a/configure
>> +++ b/configure
>> @@ -620,7 +620,6 @@ libc_cv_cc_loop_to_function
>> libc_cv_cc_submachine
>> libc_cv_cc_nofma
>> libc_cv_mtls_dialect_gnu2
>> -fno_unit_at_a_time
>> libc_cv_has_glob_dat
>> libc_cv_hashstyle
>> libc_cv_fpie
>> @@ -6319,37 +6318,6 @@ fi
>> $as_echo "$libc_cv_has_glob_dat" >&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 :
>> - $as_echo_n "(cached) " >&6
>> -else
>> - cat > conftest.c <<EOF
>> -int foo;
>> -EOF
>> -if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -S -fno-toplevel-reorder -fno-section-anchors
>> - conftest.c 1>&5'
>> - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
>> - (eval $ac_try) 2>&5
>> - ac_status=$?
>> - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
>> - test $ac_status = 0; }; }
>> -then
>> - libc_cv_fno_toplevel_reorder=yes
>> -else
>> - libc_cv_fno_toplevel_reorder=no
>> -fi
>> -rm -f conftest*
>> -fi
>> -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_fno_toplevel_reorder" >&5
>> -$as_echo "$libc_cv_fno_toplevel_reorder" >&6; }
>> -if test $libc_cv_fno_toplevel_reorder = yes; then
>> - fno_unit_at_a_time="-fno-toplevel-reorder -fno-section-anchors"
>> -else
>> - fno_unit_at_a_time=-fno-unit-at-a-time
>> -fi
>> -
>> -
>> { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -mtls-dialect=gnu2" >&5
>> $as_echo_n "checking for -mtls-dialect=gnu2... " >&6; }
>> if ${libc_cv_mtls_dialect_gnu2+:} false; then :
>> diff --git a/configure.ac b/configure.ac
>> index fa7d3c025b..ec1db36d46 100644
>> --- a/configure.ac
>> +++ b/configure.ac
>> @@ -1478,25 +1478,6 @@ fi
>> rm -f conftest*])
>> AC_SUBST(libc_cv_has_glob_dat)
>>
>> -AC_CACHE_CHECK(for -fno-toplevel-reorder -fno-section-anchors, libc_cv_fno_toplevel_reorder, [dnl
>> -cat > conftest.c <<EOF
>> -int foo;
>> -EOF
>> -if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -S -fno-toplevel-reorder -fno-section-anchors
>> - conftest.c 1>&AS_MESSAGE_LOG_FD])
>> -then
>> - libc_cv_fno_toplevel_reorder=yes
>> -else
>> - libc_cv_fno_toplevel_reorder=no
>> -fi
>> -rm -f conftest*])
>> -if test $libc_cv_fno_toplevel_reorder = yes; then
>> - fno_unit_at_a_time="-fno-toplevel-reorder -fno-section-anchors"
>> -else
>> - fno_unit_at_a_time=-fno-unit-at-a-time
>> -fi
>> -AC_SUBST(fno_unit_at_a_time)
>> -
>> AC_CACHE_CHECK([for -mtls-dialect=gnu2], libc_cv_mtls_dialect_gnu2,
>> [dnl
>> cat > conftest.c <<EOF
>> diff --git a/stdio-common/Makefile b/stdio-common/Makefile
>> index 435cd8904f..dbaecbd76e 100644
>> --- a/stdio-common/Makefile
>> +++ b/stdio-common/Makefile
>> @@ -333,8 +333,6 @@ CFLAGS-isoc99_vfscanf.c += -fexceptions
>> CFLAGS-isoc99_vscanf.c += -fexceptions
>> CFLAGS-isoc99_fscanf.c += -fexceptions
>> CFLAGS-isoc99_scanf.c += -fexceptions
>> -CFLAGS-errlist.c += $(fno-unit-at-a-time)
>> -CFLAGS-siglist.c += $(fno-unit-at-a-time)
>>
>> # scanf14a.c and scanf16a.c test a deprecated extension which is no
>> # longer visible under most conformance levels; see the source files
More information about the Libc-alpha
mailing list