mailing list of musl libc
 help / color / mirror / code / Atom feed
From: Denys Vlasenko <vda.linux@googlemail.com>
To: Rich Felker <dalias@libc.org>
Cc: musl <musl@lists.openwall.com>
Subject: Re: [PATCH] configure: add gcc flags for better link-time optimization
Date: Tue, 27 Oct 2015 20:09:28 +0100	[thread overview]
Message-ID: <CAK1hOcN-azc5TAfjs+BqkZgfyFRwCXeSeqS0ycJ5fPfbgiTBsA@mail.gmail.com> (raw)
In-Reply-To: <20151027012131.GR8645@brightrain.aerifal.cx>

On Tue, Oct 27, 2015 at 2:21 AM, Rich Felker <dalias@libc.org> wrote:
> On Fri, Oct 23, 2015 at 03:12:02PM +0200, Szabolcs Nagy wrote:
>> * Denys Vlasenko <vda.linux@googlemail.com> [2015-10-23 14:30:26 +0200]:
>> > libc.so size reduction:
>> >
>> >    text        data     bss     dec     hex filename
>> >  564099        1944   11768  577811   8d113 libc.so.before
>> >  562277        1924   11576  575777   8c921 libc.so
>> >
>>
>> i assume this is x86_64, nice improvement.
>
> I suspect all of this difference comes from optimizing out dummy weak
> functions that are replaced by strong versions in other files.

No, it does not look that way. These options don't give linker
any extra freedom to eliminate anything.

"nm --size-sort -D libc.so" shows no differences after

   --sort-section=alignment --sort-common

were added to ld command line.

After -ffunction-sections -fdata-sections are added to gcc command line,
"nm" output does change, the entire difference is as follows:

--- libc.so.nm.OLD       2015-10-27 19:57:52.971964518 +0100
+++ libc.so.nm  2015-10-27 19:58:28.544115009 +0100
@@ -18,7 +18,6 @@
 0000000000000001 T setutxent
 0000000000000001 W updwtmp
 0000000000000001 T updwtmpx
-0000000000000002 T dlclose
 0000000000000002 T __stack_chk_fail
 0000000000000003 T catclose
 0000000000000003 T dirfd
@@ -84,6 +83,7 @@
 0000000000000005 T catopen
 0000000000000005 T creall
 0000000000000005 T dladdr
+0000000000000005 T dlclose
 0000000000000005 T dlinfo
 0000000000000005 T __fbufsize
 0000000000000005 T __freadptrinc
@@ -328,7 +328,6 @@
 000000000000000b T recv
 000000000000000b T send
 000000000000000b T setprotoent
-000000000000000b T tfind
 000000000000000b T __xstat
 000000000000000b W __xstat64
 000000000000000c T __acquire_ptc
@@ -417,6 +416,7 @@
 000000000000000e T tcflow
 000000000000000e T tcflush
 000000000000000e T tcsendbreak
+000000000000000e T tfind
 000000000000000f T dcgettext
 000000000000000f T execv
 000000000000000f T execvp
@@ -986,8 +986,6 @@
 0000000000000032 T pthread_rwlock_init
 0000000000000032 T putchar_unlocked
 0000000000000032 T sem_init
-0000000000000032 T __stdio_exit
-0000000000000032 W __stdio_exit_needed
 0000000000000032 T wcschr
 0000000000000033 T pthread_rwlock_tryrdlock
 0000000000000033 T pthread_setcanceltype
@@ -1011,6 +1009,8 @@
 0000000000000035 T pthread_sigmask
 0000000000000035 T pwritev
 0000000000000035 W pwritev64
+0000000000000035 T __stdio_exit
+0000000000000035 W __stdio_exit_needed
 0000000000000035 W thrd_detach
 0000000000000035 T __tre_mem_destroy
 0000000000000035 T tsearch

As you see, not a single label was eliminated.


The visible small differences in size for a few functions are caused
by the need to always use "near" jumps (not "short" ones)
for tail call optimizations now, since they now jump across sections:

Before:
00000000000274a6 <dlclose>:
   274a6:       eb c8                   jmp    27470 <__reset_tls+0x1f0>
After:
000000000002795f <dlclose>:
   2795f:       e9 c5 ff ff ff          jmpq   27929 <__reset_tls+0x1f0>


  reply	other threads:[~2015-10-27 19:09 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-23 12:30 Denys Vlasenko
2015-10-23 13:12 ` Szabolcs Nagy
2015-10-23 14:41   ` Denys Vlasenko
2015-10-23 14:48     ` Rich Felker
2015-10-23 22:00       ` Denys Vlasenko
2015-10-24 12:43         ` Szabolcs Nagy
2015-10-24 19:20           ` Rich Felker
2015-10-27  1:21   ` Rich Felker
2015-10-27 19:09     ` Denys Vlasenko [this message]
2015-10-27 21:01       ` Rich Felker
2015-10-28  9:53         ` Denys Vlasenko
2015-10-28 10:05           ` Denys Vlasenko
2015-11-01 19:56 ` Rich Felker
2015-11-02 22:36   ` Rich Felker
2015-11-03  0:01     ` Rich Felker
2015-11-05  2:58       ` Rich Felker

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=CAK1hOcN-azc5TAfjs+BqkZgfyFRwCXeSeqS0ycJ5fPfbgiTBsA@mail.gmail.com \
    --to=vda.linux@googlemail.com \
    --cc=dalias@libc.org \
    --cc=musl@lists.openwall.com \
    /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.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

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 NNTP newsgroup(s).