mailing list of musl libc
 help / color / mirror / code / Atom feed
* [PATCH] _start_c does more work than is necessary
@ 2018-08-26  0:56 Jon Chesterfield
  2018-08-26  1:23 ` Rich Felker
  0 siblings, 1 reply; 4+ messages in thread
From: Jon Chesterfield @ 2018-08-26  0:56 UTC (permalink / raw)
  To: musl

[-- Attachment #1: Type: text/plain, Size: 1247 bytes --]

The init sequence in musl is _start calls _start_c which calls
__libc_start_main.

_start_c passes pointers to the _init and _fini functions, and also a
trailing zero, to __libc_start_main.

__libc_start_main currently takes exactly three arguments. I'd like to
simplify crt1.c by only passing main, argc, argv.

This is worth a few lines of C and three instructions in the startup
sequence. E.g. x86-64 this removes mov, mov, xor for fourteen bytes.

It also removes uses of _init() and _free() which I'm considering deleting
from a musl/llvm toolchain which makes no use of either, slightly
decreasing the size of my out of tree patch.

Thanks,

Jon

---
diff --git a/crt/crt1.c b/crt/crt1.c
index af02af9..f27c949 100644
--- a/crt/crt1.c
+++ b/crt/crt1.c
@@ -5,14 +5,11 @@
 #include "crt_arch.h"

 int main();
-void _init() __attribute__((weak));
-void _fini() __attribute__((weak));
-_Noreturn int __libc_start_main(int (*)(), int, char **,
-       void (*)(), void(*)(), void(*)());
+_Noreturn int __libc_start_main(int (*)(), int, char **);

 void _start_c(long *p)
 {
        int argc = p[0];
        char **argv = (void *)(p+1);
-       __libc_start_main(main, argc, argv, _init, _fini, 0);
+       __libc_start_main(main, argc, argv);
 }

[-- Attachment #2: Type: text/html, Size: 1551 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2018-08-30 18:19 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-08-26  0:56 [PATCH] _start_c does more work than is necessary Jon Chesterfield
2018-08-26  1:23 ` Rich Felker
2018-08-26  1:47   ` Jon Chesterfield
2018-08-30 18:19   ` A. Wilcox

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).