On Wed, Aug 19, 2026 at 7:35 AM Jaihind Yadav <[email protected]> wrote:
>
> Hi Richard, Pietro,
>
>   Thanks for the feedback. I tested Pietro’s suggestion with a minimal 
> reproducer and a local dummy plugin.
>
>   I compiled hello.c with:
>
>   - -g -grecord-gcc-switches -fplugin=<absolute-path>
>
>   Then repeated with:
>
>   1. -fdebug-prefix-map=/tmp/gcc_plugin_map_test3=REMAP
>   2. -fdebug-prefix-map targeting the plugin directory specifically
>   3. -ffile-prefix-map=/tmp/gcc_plugin_map_test3=REMAP
>   4. -fmacro-prefix-map=/tmp/gcc_plugin_map_test3=REMAP
>   5. -fdebug-prefix-map + -ffile-prefix-map
>   6. Control: -gno-record-gcc-switches
>
>   Validation:
>
>   - Checked DW_AT_producer via readelf --debug-dump=info.
>
>   Findings:
>
>   - In cases (1)–(5), DW_AT_producer still contained the absolute plugin path 
> from -fplugin=....
>   - Only case (6) removed -fplugin from DW_AT_producer.
>
>   So in this environment (GCC 13.3.0), the prefix-map options do not 
> rewrite/sanitize the plugin path when GCC switch recording is enabled.

It's IMO also a good suggestion to make -f*-prefix-map affect the
-fplugin argument.

Richard.

>   Thanks,
>   Jaihind Yadav
>
> -----Original Message-----
> From: Pietro Monteiro <[email protected]>
> Sent: Sunday, August 16, 2026 8:06 PM
> To: Richard Biener <[email protected]>; Jaihind Yadav 
> <[email protected]>
> Cc: [email protected]; [email protected]
> Subject: Re: RFC: Should -fplugin and -fplugin-arg options be excluded from 
> DW_AT_producer recording?
>
> WARNING: This email originated from outside of Qualcomm. Please be wary of 
> any links or attachments, and do not enable macros.
>
> On Fri, Aug 14, 2026, at 2:16 AM, Richard Biener via Gcc wrote:
> > On Wed, Aug 12, 2026 at 12:40 PM Jaihind Yadav
> > <[email protected]> wrote:
> >>
> >> Hi,
> >>
> >>
> >>
> >> While investigating a build-path leakage issue, I noticed that
> >>
> >> -fplugin=<path> and -fplugin-arg-* options are currently recorded in
> >>
> >> DW_AT_producer when -grecord-gcc-switches is enabled.
> >>
> >>
> >>
> >> As a result, an absolute plugin path may become embedded in debug
> >>
> >> metadata.
> >>
> >>
> >>
> >> For example:
> >>
> >>
> >>
> >> gcc -g -grecord-gcc-switches \
> >>
> >> -fplugin=/path/to/plugin.so \
> >>
> >> -c hello.c
> >>
> >>
> >>
> >> produces an object file whose DW_AT_producer contains:
> >>
> >>
> >>
> >> GNU C23 ... -g -fplugin=/path/to/plugin.so
> >>
> >>
> >>
> >> In my case, the recorded path was an absolute build-system path to a
> >>
> >> GCC plugin:
> >>
> >>
> >>
> >> -fplugin=/local/.../scripts/gcc-plugins/stackleak_plugin.so
> >>
> >>
> >>
> >> This introduces host-specific path information into the generated
> >>
> >> artifact and may negatively affect reproducibility.
> >>
> >>
> >>
> >> I noticed that GCC already has the NoDWARFRecord mechanism for
> >> options
> >>
> >> that should not be recorded in the producer string. Looking through
> >> the
> >>
> >> history, it appears that this mechanism was introduced partly to
> >> address
> >>
> >> reproducibility concerns involving path-containing options, and there
> >>
> >> are also examples where specific options are intentionally excluded
> >> from
> >>
> >> producer-string recording.
> >>
> >>
> >>
> >> As an experiment, I modified:
> >>
> >>
> >>
> >> gcc/common.opt
> >>
> >>
> >>
> >> and marked:
> >>
> >>
> >>
> >> -fplugin=
> >>
> >> -fplugin-arg-*
> >>
> >>
> >>
> >> with NoDWARFRecord.
> >>
> >>
> >>
> >> With this change:
> >>
> >>
> >>
> >> Before:
> >>
> >> DW_AT_producer:
> >>
> >> GNU C23 ... -g \
> >>
> >> -fplugin=/local/.../stackleak_plugin.so
> >>
> >>
> >>
> >> After:
> >>
> >> DW_AT_producer:
> >>
> >> GNU C23 ... -g
> >>
> >>
> >>
> >> The plugin is still loaded correctly, plugin arguments are still
> >> passed,
> >>
> >> and generated code/debug information remain unchanged. The only
> >> observed
> >>
> >> difference is that plugin-related command-line options are no longer
> >>
> >> recorded in DW_AT_producer.
> >>
> >>
> >>
> >> The tradeoff appears to be:
> >>
> >>
> >>
> >> Benefits:
> >>
> >> - Avoids recording host-specific absolute plugin paths.
> >>
> >> - Improves reproducibility of producer strings.
> >>
> >> - Reduces leakage of local build environment details.
> >>
> >>
> >>
> >> Downsides:
> >>
> >> - Reduces provenance information available from DW_AT_producer.
> >>
> >> - Makes it harder to determine from the binary alone which GCC plugin
> >>
> >> (and plugin arguments) were used during compilation.
> >>
> >>
> >>
> >> Before preparing a formal patch submission, I would like feedback on
> >> the
> >>
> >> policy aspect:
> >>
> >>
> >>
> >> Should -fplugin and -fplugin-arg-* be treated similarly to other
> >>
> >> path-sensitive options and be excluded from producer-string
> >>
> >> recording?
> >
> > No, they should not be excluded as they are clearly affecting the
> > compilation.  Is there not a standard plugin search path so the build
> > systems can use -fplugin=<name>.so without path?
>
> Can you test the effect of -fdebug-prefix-map and other path options on 
> plugin path recording?
>
> https://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#index-fdebug-prefix-map
>
> pietro
>
> >>
> >>
> >>
> >> or
> >>
> >>
> >>
> >> Is preserving plugin provenance in DW_AT_producer considered more
> >>
> >> valuable than avoiding path leakage and reproducibility issues?
> >>
> >>
> >>
> >> Comments and guidance would be appreciated.
> >>
> >>
> >>
> >> Thanks,
> >>
> >> Jaihind Yadav
> >>
> >>

Reply via email to