There are a lot of other helpful replies in this thread, so I won’t add much, but I did find this reference, which you could read if you have a lot of free time. But I particularly liked reading this summary:
_start calls the libc __libc_start_main;
__libc_start_main calls the executable __libc_csu_init (statically-linked part of the libc);
__libc_csu_init calls the executable constructors (and other initialisatios);
There are a lot of other helpful replies in this thread, so I won’t add much, but I did find this reference, which you could read if you have a lot of free time. But I particularly liked reading this summary: