On Fri, Apr 3, 2020 at 8:15 PM Egeyar Bagcioglu <egeyar.bagcio...@oracle.com> wrote: > > > > On 3/18/20 10:05 AM, Martin Liška wrote: > > On 3/17/20 7:43 PM, Egeyar Bagcioglu wrote: > >> Hi Martin, > >> > >> I like the patch. It definitely serves our purposes at Oracle and > >> provides another way to do what my previous patches did as well. > >> > >> 1) It keeps the backwards compatibility regarding > >> -frecord-gcc-switches; therefore, removes my related doubts about > >> your previous patch. > >> > >> 2) It still makes use of -frecord-gcc-switches. The new option is > >> only to control the format. This addresses some previous objections > >> to having a new option doing something similar. Now the new option > >> controls the behaviour of the existing one and that behaviour can be > >> further extended. > >> > >> 3) It uses an environment variable as Jakub suggested. > >> > >> The patch looks good and I confirm that it works for our purposes. > > > > Hello. > > > > Thank you for the support. > > > >> > >> Having said that, I have to ask for recognition in this patch for my > >> and my company's contributions. Can you please keep my name and my > >> work email in the changelog and in the commit message? > > > > Sure, sorry I forgot. > > Hi Martin, > > I noticed that some comments in the patch were still referring to > --record-gcc-command-line, the option I suggested earlier. I updated > those comments to mention -frecord-gcc-switches-format instead and also > added my name to the patch as you agreed above. I attached the updated > patch. We are starting to use this patch in the specific domain where we > need its functionality.
So while I like the addition of -frecord-gcc-switches-format to preserve backward compatibility there are IMHO several issues with the patch. For one, the target hook change to a void(void) hook makes it need to duplicate too much internals. Please make it take a const char * argument, the actual text to output. For second, I see no good reason to have different handling of -grecord-gcc-switches vs. -frecord-gcc-switches - they should produce the same content and thus -frecord-gcc-switches-format should apply to -grecord-gcc-switches as well. Now - I think what we output into the assembly file with -fverbose-asm should _always_ be the processed arguments since the assembly is produced by cc1, not gcc. +/* Return value of env variable GCC_DRIVER_COMMAND_LINE if exists. + Otherwise return empty string. */ + +const char * +get_driver_command_line () +{ + const char *cmdline = getenv ("GCC_DRIVER_COMMAND_LINE"); + return cmdline != NULL ? cmdline : ""; +} I think silently emitting nothing is not a good idea. In particular using the environment to carry the driver command-line makes it difficult to reproduce output with pasting commands as dumped by -v [-save-temps]. Likewise the driver seems to always populate GCC_DRIVER_COMMAND_LINE even if not needed - why not look for -frecord-gcc-switches-format before doing so? I'd make -frecord-gcc-switches-format a driver only option (only the driver can do sth about it) and amend -frecord-gcc-switches with a -frecord-gcc-switches=FILE variant specifying the content. The driver would then substitute -frecord-gcc-switches-format=driver with -frecord-gcc-switches=tempfile and dump the command line into tempfile. cc1 can then pick contents from tempfile or use the processed variant if no contents are specified. Richard. > Regards > Egeyar > > > > > > Martin > > > >> > >> Thanks > >> Egeyar > >> > >> > >> > >> On 3/17/20 2:53 PM, Martin Liška wrote: > >>> Hi. > >>> > >>> I'm sending enhanced patch that makes the following changes: > >>> - a new option -frecord-gcc-switches-format is added; the option > >>> selects format (processed, driver) for all options that record > >>> GCC command line > >>> - Dwarf gen_produce_string is now used in -fverbose-asm > >>> - The .s file is affected in the following way: > >>> > >>> BEFORE: > >>> > >>> # GNU C17 (SUSE Linux) version 9.2.1 20200128 [revision > >>> 83f65674e78d97d27537361de1a9d74067ff228d] (x86_64-suse-linux) > >>> # compiled by GNU C version 9.2.1 20200128 [revision > >>> 83f65674e78d97d27537361de1a9d74067ff228d], GMP version 6.2.0, MPFR > >>> version 4.0.2, MPC version 1.1.0, isl version isl-0.22.1-GMP > >>> > >>> # GGC heuristics: --param ggc-min-expand=100 --param > >>> ggc-min-heapsize=131072 > >>> # options passed: -fpreprocessed test.i -march=znver1 -mmmx -mno-3dnow > >>> # -msse -msse2 -msse3 -mssse3 -msse4a -mcx16 -msahf -mmovbe -maes -msha > >>> # -mpclmul -mpopcnt -mabm -mno-lwp -mfma -mno-fma4 -mno-xop -mbmi > >>> -mno-sgx > >>> # -mbmi2 -mno-pconfig -mno-wbnoinvd -mno-tbm -mavx -mavx2 -msse4.2 > >>> -msse4.1 > >>> # -mlzcnt -mno-rtm -mno-hle -mrdrnd -mf16c -mfsgsbase -mrdseed -mprfchw > >>> # -madx -mfxsr -mxsave -mxsaveopt -mno-avx512f -mno-avx512er > >>> -mno-avx512cd > >>> # -mno-avx512pf -mno-prefetchwt1 -mclflushopt -mxsavec -mxsaves > >>> # -mno-avx512dq -mno-avx512bw -mno-avx512vl -mno-avx512ifma > >>> -mno-avx512vbmi > >>> # -mno-avx5124fmaps -mno-avx5124vnniw -mno-clwb -mmwaitx -mclzero > >>> -mno-pku > >>> # -mno-rdpid -mno-gfni -mno-shstk -mno-avx512vbmi2 -mno-avx512vnni > >>> # -mno-vaes -mno-vpclmulqdq -mno-avx512bitalg -mno-movdiri > >>> -mno-movdir64b > >>> # -mno-waitpkg -mno-cldemote -mno-ptwrite --param l1-cache-size=32 > >>> # --param l1-cache-line-size=64 --param l2-cache-size=512 -mtune=znver1 > >>> # -grecord-gcc-switches -g -fverbose-asm -frecord-gcc-switches > >>> # options enabled: -faggressive-loop-optimizations -fassume-phsa > >>> # -fasynchronous-unwind-tables -fauto-inc-dec -fcommon > >>> # -fdelete-null-pointer-checks -fdwarf2-cfi-asm -fearly-inlining > >>> # -feliminate-unused-debug-types -ffp-int-builtin-inexact > >>> -ffunction-cse > >>> # -fgcse-lm -fgnu-runtime -fgnu-unique -fident -finline-atomics > >>> # -fipa-stack-alignment -fira-hoist-pressure -fira-share-save-slots > >>> # -fira-share-spill-slots -fivopts -fkeep-static-consts > >>> # -fleading-underscore -flifetime-dse -flto-odr-type-merging > >>> -fmath-errno > >>> # -fmerge-debug-strings -fpeephole -fplt -fprefetch-loop-arrays > >>> # -frecord-gcc-switches -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 > >>> -fschedule-fusion > >>> # -fsemantic-interposition -fshow-column -fshrink-wrap-separate > >>> # -fsigned-zeros -fsplit-ivs-in-unroller -fssa-backprop -fstdarg-opt > >>> # -fstrict-volatile-bitfields -fsync-libcalls -ftrapping-math > >>> -ftree-cselim > >>> # -ftree-forwprop -ftree-loop-if-convert -ftree-loop-im > >>> -ftree-loop-ivcanon > >>> # -ftree-loop-optimize -ftree-parallelize-loops= -ftree-phiprop > >>> # -ftree-reassoc -ftree-scev-cprop -funit-at-a-time -funwind-tables > >>> # -fverbose-asm -fzero-initialized-in-bss -m128bit-long-double -m64 > >>> -m80387 > >>> # -mabm -madx -maes -malign-stringops -mavx -mavx2 > >>> # -mavx256-split-unaligned-store -mbmi -mbmi2 -mclflushopt -mclzero > >>> -mcx16 > >>> # -mf16c -mfancy-math-387 -mfma -mfp-ret-in-387 -mfsgsbase -mfxsr > >>> -mglibc > >>> # -mieee-fp -mlong-double-80 -mlzcnt -mmmx -mmovbe -mmwaitx -mpclmul > >>> # -mpopcnt -mprfchw -mpush-args -mrdrnd -mrdseed -mred-zone -msahf > >>> -msha > >>> # -msse -msse2 -msse3 -msse4 -msse4.1 -msse4.2 -msse4a -mssse3 -mstv > >>> # -mtls-direct-seg-refs -mvzeroupper -mxsave -mxsavec -mxsaveopt > >>> -mxsaves > >>> > >>> AFTER: > >>> > >>> # GGC heuristics: --param ggc-min-expand=30 --param > >>> ggc-min-heapsize=4096 > >>> # GNU C17 10.0.1 20200317 (experimental) -march=znver1 -mmmx > >>> -mno-3dnow -msse -msse2 -msse3 -mssse3 -msse4a -mcx16 -msahf -mmovbe > >>> -maes -msha -mpclmul -mpopcnt -mabm -mno-lwp -mfma -mno-fma4 > >>> -mno-xop -mbmi -mno-sgx -mbmi2 -mno-pconfig -mno-wbnoinvd -mno-tbm > >>> -mavx -mavx2 -msse4.2 -msse4.1 -mlzcnt -mno-rtm -mno-hle -mrdrnd > >>> -mf16c -mfsgsbase -mrdseed -mprfchw -madx -mfxsr -mxsave -mxsaveopt > >>> -mno-avx512f -mno-avx512er -mno-avx512cd -mno-avx512pf > >>> -mno-prefetchwt1 -mclflushopt -mxsavec -mxsaves -mno-avx512dq > >>> -mno-avx512bw -mno-avx512vl -mno-avx512ifma -mno-avx512vbmi > >>> -mno-avx5124fmaps -mno-avx5124vnniw -mno-clwb -mmwaitx -mclzero > >>> -mno-pku -mno-rdpid -mno-gfni -mno-shstk -mno-avx512vbmi2 > >>> -mno-avx512vnni -mno-vaes -mno-vpclmulqdq -mno-avx512bitalg > >>> -mno-movdiri -mno-movdir64b -mno-waitpkg -mno-cldemote -mno-ptwrite > >>> -mno-avx512bf16 -mno-enqcmd -mno-avx512vp2intersect > >>> --param=l1-cache-size=32 --param=l1-cache-line-size=64 > >>> --param=l2-cache-size=512 -mtune=znver1 -g > >>> > >>> That's the biggest change I made, but I hope it's acceptable. > >>> Apart from that the patch simplifies and unifies places where > >>> save_decoded_options > >>> options are transformed back to string representation. > >>> > >>> Patch can bootstrap on x86_64-linux-gnu and survives regression tests. > >>> > >>> Ready to be installed in next stage1? > >>> Thanks, > >>> Martin > >> > > >