Peter Fox Peter Fox - 7 months ago 35
Linux Question

What is the difference between "options enabled" and "options passed" usind gcc -Q -v

I am looking for the default compiler flags used during compilation. Therefore I used the command

gcc -Q -v <example.c>

the output of interest looks like this:

GNU C (Ubuntu 4.8.4-2ubuntu1~14.04.3) version 4.8.4 (x86_64-linux-gnu)
compiled by GNU C version 4.8.4, GMP version 5.1.3, MPFR version 3.1.2-p3, MPC version 1.0.1

GGC heuristics: --param ggc-min-expand=100 --param

options passed: -v -imultiarch x86_64-linux-gnu example.c
-mtune=generic -march=x86-64 -fstack-protector -Wformat -Wformat-security

options enabled: -faggressive-loop-optimizations
-fasynchronous-unwind-tables -fauto-inc-dec -fbranch-count-reg -fcommon -fdelete-null-pointer-checks -fdwarf2-cfi-asm -fearly-inlining -feliminate-unused-debug-types -ffunction-cse -fgcse-lm -fgnu-runtime -fgnu-unique -fident -finline-atomics -fira-hoist-pressure -fira-share-save-slots -fira-share-spill-slots -fivopts -fkeep-static-consts -fleading-underscore -fmath-errno -fmerge-debug-strings -fmove-loop-invariants -fpeephole -fprefetch-loop-arrays -freg-struct-return -fsched-critical-path-heuristic -fsched-dep-count-heuristic -fsched-group-heuristic -fsched-interblock -fsched-last-insn-heuristic -fsched-rank-heuristic -fsched-spec -fsched-spec-insn-heuristic -fsched-stalled-insns-dep -fshow-column -fsigned-zeros -fsplit-ivs-in-unroller -fstack-protector -fstrict-volatile-bitfields -fsync-libcalls -ftrapping-math -ftree-coalesce-vars -ftree-cselim -ftree-forwprop -ftree-loop-if-convert -ftree-loop-im -ftree-loop-ivcanon -ftree-loop-optimize -ftree-parallelize-loops= -ftree-phiprop -ftree-pta -ftree-reassoc -ftree-scev-cprop -ftree-slp-vectorize -ftree-vect-loop-version -funit-at-a-time -funwind-tables -fvar-tracking -fvar-tracking-assignments -fzero-initialized-in-bss -m128bit-long-double -m64 -m80387 -maccumulate-outgoing-args -malign-stringops -mfancy-math-387 -mfp-ret-in-387 -mfxsr -mglibc -mieee-fp -mlong-double-80 -mmmx -mno-sse4 -mpush-args -mred-zone -msse -msse2 -mtls-direct-seg-refs

I am now wondering: what is the difference between options enabled and options passed?


Options passed are options added to the command line, added by configuration, like -march=x86-64 -fstack-protector, or by command invocation, like -v. That means those options are not enabled by default and must be specified by gcc command.

Options enebled are options that are enabled and are always used to compile with that specific gcc on the specific system, as far as into option passed you are not disabling some of them.

E.g. On a clear environment calling gcc example.c will give you example.c as only passed option, but all options enabled still the same.