After loading an executable into gdb, how do I break at the entry point, before the first instruction is executed?
You can find what functions are called before int main() with set backtrace past-main on and after finding them set a breakpoint on them and restart your program:
>gdb -q main
Reading symbols from /home/main...done.
(gdb) set backtrace past-main on
(gdb) b main
Breakpoint 1 at 0x40058a: file main.cpp, line 25.
(gdb) r
Starting program: /home/main
Breakpoint 1, main () at main.cpp:25
25 a();
(gdb) bt
#0 main () at main.cpp:25
#1 0x0000003a1d81ed1d in __libc_start_main () from /lib64/libc.so.6
#2 0x0000000000400499 in _start ()
(gdb) b _start
Breakpoint 2 at 0x400470
(gdb) r
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /home/main
Breakpoint 2, 0x0000000000400470 in _start ()