gcc memiliki -frecord-gcc-switches
opsi untuk itu:
-frecord-gcc-switches
This switch causes the command line that was used to invoke the compiler to
be recorded into the object file that is being created. This switch is only
implemented on some targets and the exact format of the recording is target
and binary file format dependent, but it usually takes the form of a section
containing ASCII text.
Setelah itu, executable ELF akan berisi .GCC.command.line
bagian dengan informasi itu.
$ gcc -O2 -frecord-gcc-switches a.c
$ readelf -p .GCC.command.line a.out
String dump of section '.GCC.command.line':
[ 0] a.c
[ 4] -mtune=generic
[ 13] -march=x86-64
[ 21] -O2
[ 25] -frecord-gcc-switches
Tentu saja, ini tidak akan berfungsi untuk executable yang dikompilasi tanpa opsi tersebut.
Untuk kasus pengoptimalan sederhana, Anda bisa coba gunakan debugger jika file dikompilasi dengan info debug. Jika Anda melewatinya sedikit, Anda mungkin memperhatikan bahwa beberapa variabel 'dioptimalkan'. Itu menunjukkan bahwa pengoptimalan telah terjadi.
Pilihan lainnya adalah -grecord-gcc-swtiches (perhatikan, bukan -f tapi -g). Menurut gcc docs itu akan menempatkan flag ke info debug kerdil. Dan sepertinya diaktifkan secara default sejak gcc 4.8.
Saya telah menemukan program dwarfdump berguna untuk mengekstrak cflag tersebut. Catatan, program string tidak melihatnya. Sepertinya info kerdil dikompresi.
Jika Anda mengkompilasi dengan -frecord-gcc-switches
flag, maka opsi kompiler baris perintah akan ditulis dalam biner di bagian catatan. Lihat juga dokumennya.