| Index: build/config/compiler/compiler.gni | 
| diff --git a/build/config/compiler/compiler.gni b/build/config/compiler/compiler.gni | 
| index e8051ec423489bcdf55f449b14b62db9e139b758..e4f463a76d6517488f495c806e4636d33f1b93f1 100644 | 
| --- a/build/config/compiler/compiler.gni | 
| +++ b/build/config/compiler/compiler.gni | 
| @@ -66,39 +66,53 @@ declare_args() { | 
| use_pic = true | 
| } | 
|  | 
| -# Whether to emit frame pointers by default. | 
| +# Determine the default setting for enable_frame_pointers, based on the platform | 
| +# and build arguments. | 
| if (is_mac || is_ios) { | 
| -  enabled_frame_pointers = true | 
| +  _default_enable_frame_pointers = true | 
| } else if (is_win) { | 
| # 64-bit Windows ABI doesn't support frame pointers. | 
| if (target_cpu == "x64") { | 
| -    enabled_frame_pointers = false | 
| +    _default_enable_frame_pointers = false | 
| } else { | 
| -    enabled_frame_pointers = true | 
| +    _default_enable_frame_pointers = true | 
| } | 
| +} else if (current_cpu == "arm64") { | 
| +  # Ensure that stacks from arm64 crash dumps are usable (crbug.com/391706). | 
| +  _default_enable_frame_pointers = true | 
| +} else if (is_chromeos && current_cpu == "arm" && arm_use_thumb) { | 
| +  # TODO(711784): Building ARM Thumb without frame pointers can lead to code | 
| +  # in ChromeOS which triggers some ARM A12/A17 errata. | 
| +  _default_enable_frame_pointers = true | 
| } else { | 
| # Explicitly ask for frame pointers, otherwise: | 
| # * Stacks may be missing for sanitizer and profiling builds. | 
| # * Debug tcmalloc can crash (crbug.com/636489). | 
| -  # * Stacks may be missing for arm64 crash dumps (crbug.com/391706). | 
| -  enabled_frame_pointers = | 
| -      using_sanitizer || enable_profiling || is_debug || current_cpu == "arm64" | 
| +  _default_enable_frame_pointers = | 
| +      using_sanitizer || enable_profiling || is_debug | 
| } | 
|  | 
| -# Unwinding with frame pointers requires that they are enabled by default for | 
| +declare_args() { | 
| +  # True if frame pointers should be generated, false otherwise. | 
| +  enable_frame_pointers = _default_enable_frame_pointers | 
| +} | 
| + | 
| +# In general assume that if we have frame pointers then we can use them to | 
| +# unwind the stack. However, this requires that they are enabled by default for | 
| # most translation units, that they are emitted correctly, and that the | 
| # compiler or platform provides a way to access them. | 
| +can_unwind_with_frame_pointers = enable_frame_pointers | 
| if (current_cpu == "arm" && arm_use_thumb) { | 
| -  # ARM Thumb builds do not emit frame pointers correctly. | 
| +  # We cannot currently unwind ARM Thumb frame pointers correctly. | 
| can_unwind_with_frame_pointers = false | 
| } else if (is_win) { | 
| # Windows 32-bit does provide frame pointers, but the compiler does not | 
| # provide intrinsics to access them, so we don't use them. | 
| can_unwind_with_frame_pointers = false | 
| -} else { | 
| -  can_unwind_with_frame_pointers = enabled_frame_pointers | 
| } | 
|  | 
| +assert(!can_unwind_with_frame_pointers || enable_frame_pointers) | 
| + | 
| declare_args() { | 
| # Whether or not the official builds should be built with full WPO. Enabled by | 
| # default for the PGO and the x64 builds. | 
|  |