Reproducible builds - supporting relative paths in *-prefix-map
Richard Purdie
richard.purdie@linuxfoundation.org
Mon Aug 15 19:51:53 GMT 2022
On Mon, 2022-08-15 at 17:15 +0000, Joseph Myers wrote:
> On Mon, 15 Aug 2022, Richard Purdie via Gcc wrote:
>
> > Currently it works well for absolute paths but if a file uses a
> > relative path or a path with a symlink in, or a non-absolute path, it
> > will miss those cases. For relative paths in particular it is
> > problematic as you can't easily construct a compiler commandline that
> > would cover all relative path options.
>
> I'd expect a relative path to be naturally relocatable without needing to
> be remapped. (For example, DW_AT_comp_dir would be relocated in debug
> info, but there would be no need to relocate the paths to individual files
> that are relative to DW_AT_comp_dir.)
>
> Is the issue that you're using relative paths between two directories that
> don't have a fixed relative path between them, such as between the build
> and source directories, as opposed to relative paths within the source
> directory or within the build directory?
Yes, that is the issue. We build with separate build and source
directories with a relative path between them and that relation doesn't
work on target, particularly for installed binaries.
It is a general problem but particularly where we build multiple
components from the one shared source tree as those paths become
multiple levels deep which makes creating a source layout on target to
match even harder.
> > which address a realpath() call into the prefix mapping code. I did
>
> That would run the risk of breaking relocation for anyone who has
> deliberately used the paths they pass to the compiler (possibly involving
> symlinks, for example) in their remapping options - not expecting a
> further level of processing to be applied to those paths before remapping.
It would be a change in behaviour but I'm not sure how many people
would be relying on that or if they even should be. A relative path
would only be relocated if it did match something in the prefix-map
variables so this would be controllable.
Cheers,
Richard
More information about the Gcc
mailing list