| Index: tools/gn/filesystem_utils.cc | 
| diff --git a/tools/gn/filesystem_utils.cc b/tools/gn/filesystem_utils.cc | 
| index 663e6ac3f0c188d708a366d3326eb273605d4130..79e77310d2588cba16d714aa95320eb91316f735 100644 | 
| --- a/tools/gn/filesystem_utils.cc | 
| +++ b/tools/gn/filesystem_utils.cc | 
| @@ -729,13 +729,27 @@ SourceDir GetToolchainGenDir(const BuildSettings* build_settings, | 
|  | 
| SourceDir GetOutputDirForSourceDir(const Settings* settings, | 
| const SourceDir& source_dir) { | 
| -  return GetOutputDirForSourceDirAsOutputFile(settings, source_dir).AsSourceDir( | 
| -      settings->build_settings()); | 
| +  return GetOutputDirForSourceDir( | 
| +      settings->build_settings(), source_dir, | 
| +      settings->toolchain_label(), settings->is_default()); | 
| } | 
|  | 
| -OutputFile GetOutputDirForSourceDirAsOutputFile(const Settings* settings, | 
| -                                                const SourceDir& source_dir) { | 
| -  OutputFile result = settings->toolchain_output_subdir(); | 
| +SourceDir GetOutputDirForSourceDir( | 
| +    const BuildSettings* build_settings, | 
| +    const SourceDir& source_dir, | 
| +    const Label& toolchain_label, | 
| +    bool is_default_toolchain) { | 
| +  return GetOutputDirForSourceDirAsOutputFile( | 
| +          build_settings, source_dir, toolchain_label, is_default_toolchain) | 
| +      .AsSourceDir(build_settings); | 
| +} | 
| + | 
| +OutputFile GetOutputDirForSourceDirAsOutputFile( | 
| +    const BuildSettings* build_settings, | 
| +    const SourceDir& source_dir, | 
| +    const Label& toolchain_label, | 
| +    bool is_default_toolchain) { | 
| +  OutputFile result(GetOutputSubdirName(toolchain_label, is_default_toolchain)); | 
| result.value().append("obj/"); | 
|  | 
| if (source_dir.is_source_absolute()) { | 
| @@ -745,8 +759,7 @@ OutputFile GetOutputDirForSourceDirAsOutputFile(const Settings* settings, | 
| source_dir.value().size() - 2); | 
| } else { | 
| // System-absolute. | 
| -    const std::string& build_dir = | 
| -        settings->build_settings()->build_dir().value(); | 
| +    const std::string& build_dir = build_settings->build_dir().value(); | 
|  | 
| if (base::StartsWith(source_dir.value(), build_dir, | 
| base::CompareCase::SENSITIVE)) { | 
| @@ -771,6 +784,13 @@ OutputFile GetOutputDirForSourceDirAsOutputFile(const Settings* settings, | 
| return result; | 
| } | 
|  | 
| +OutputFile GetOutputDirForSourceDirAsOutputFile(const Settings* settings, | 
| +                                                const SourceDir& source_dir) { | 
| +  return GetOutputDirForSourceDirAsOutputFile( | 
| +      settings->build_settings(), source_dir, | 
| +      settings->toolchain_label(), settings->is_default()); | 
| +} | 
| + | 
| SourceDir GetGenDirForSourceDir(const Settings* settings, | 
| const SourceDir& source_dir) { | 
| return GetGenDirForSourceDirAsOutputFile(settings, source_dir).AsSourceDir( | 
|  |