public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: Florian Weimer <fweimer@redhat.com>
To: "H.J. Lu via Libc-alpha" <libc-alpha@sourceware.org>
Subject: Re: [PATCH 2/4] Check -z single-global-definition and -fsingle-global-definition
Date: Mon, 21 Jun 2021 09:43:24 +0200	[thread overview]
Message-ID: <875yy7mzmr.fsf@oldenburg.str.redhat.com> (raw)
In-Reply-To: <20210620233620.391576-3-hjl.tools@gmail.com> (H. J. Lu via Libc-alpha's message of "Sun, 20 Jun 2021 16:36:18 -0700")

* H. J. Lu via Libc-alpha:

> 1. Check linker support for -z single-global-definition.  If
> GNU_PROPERTY_1_NEEDED_SINGLE_GLOBAL_DEFINITION is set on any input
> relocatable files:
>   a. Don't generate copy relocations.
>   b. Turn off extern_protected_data.
>   c. Treate reference to protected symbols with single global definition
>   as local.
>   d. Set GNU_PROPERTY_1_NEEDED_SINGLE_GLOBAL_DEFINITION on output.
>   e. Add -z [no]single-global-definition to control single global
>   definition.
> 2. Check compiler support for -fsingle-global-definition:
>   a. Generate a single global definition marker in relocatable objects.
>     i. Always use GOT to access undefined data and function symbols,
>     including in PIE and non-PIE.  These will avoid copy relocations in
>     executables.
>     ii. This is compatible with existing executables and shared libraries.
>   b. In executable and shared library, bind symbols with the STV_PROTECTED
>      visibility locally:
>     i. The address of data symbol is the address of data body.
>     ii. For systems without function descriptor, the function pointer is
>     the address of function body.
>     iii. The resulting shared libraries may not be incompatible with
>     executables which have copy relocations on protected symbols.
>
> Size comparison of non-PIE builds with GCC 12 -O2:
>
> 1. On x86-64:
>    text	   data	    bss	    dec	    hex	filename
>  190218	   9672	    416	 200306	  30e72	ld.so (original)
>  190258	   9336	    416	 200010	  30d4a ld.so (-fsingle-global-definition)
> 1917384	  20232	  52424	1990040	 1e5d98	libc.so (original)
> 1919946	  20240	  52432	1992618	 1e67aa	libc.so (-fsingle-global-definition)
>  261734	  10339	    744	 272817	  429b1	localedef (original)
>  233084	  41734	    648	 275466	  4340a	localedef (-fsingle-global-definition)

I must say these numbers do not make sense to me.  Why do libc.so and
localedef data sizes increase with -fsingle-global-definition?  Fewer
copy relocations should *reduce* data size on both sides.  localedef
would have to have nearly 4,000 data relocations to account for the size
increase.  And shouldn't the GOT overlap with BSS anyway (so not even
show up in the data column)?

And I don't think we can build glibc with -fsingle-global-definition
anyway because it would be an ABI break.

> ---
>  configure    | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++-
>  configure.ac | 37 ++++++++++++++++++++++++++
>  2 files changed, 109 insertions(+), 1 deletion(-)
>
> diff --git a/configure b/configure
> index 9619c10991..5844dad68f 100755
> --- a/configure
> +++ b/configure
> @@ -732,6 +732,7 @@ infodir
>  docdir
>  oldincludedir
>  includedir
> +runstatedir
>  localstatedir
>  sharedstatedir
>  sysconfdir

Please regenerate with an unpatched autoconf.

Thanks,
Florian


  parent reply	other threads:[~2021-06-21  7:43 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-20 23:36 [PATCH 0/4] Implement single global definition marker H.J. Lu
2021-06-20 23:36 ` [PATCH 1/4] Initial support for GNU_PROPERTY_1_NEEDED H.J. Lu
2021-06-21  7:06   ` Florian Weimer
2021-06-21 12:57     ` H.J. Lu
2021-06-20 23:36 ` [PATCH 2/4] Check -z single-global-definition and -fsingle-global-definition H.J. Lu
2021-06-21  7:31   ` Andreas Schwab
2021-06-21  7:43   ` Florian Weimer [this message]
2021-06-21 12:49     ` H.J. Lu
2021-06-20 23:36 ` [PATCH 3/4] Add run-time chesk for single global definition H.J. Lu
2021-06-21  7:16   ` Florian Weimer
2021-06-21 13:20     ` H.J. Lu
2021-06-22  7:12       ` Florian Weimer
2021-06-20 23:36 ` [PATCH 4/4] Update tests for protected data and function symbols H.J. Lu
2021-06-21  7:19   ` Florian Weimer
2021-06-21 12:54     ` H.J. Lu
2021-06-21 12:57       ` Florian Weimer
2021-06-21 13:05         ` H.J. Lu
2021-06-21 20:05 ` [PATCH 0/4] Implement single global definition marker Joseph Myers

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=875yy7mzmr.fsf@oldenburg.str.redhat.com \
    --to=fweimer@redhat.com \
    --cc=libc-alpha@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).