[all-commits] [llvm/llvm-project] ce275d: [lldb] Rewrite Scalar::Promote

Pavel Labath via All-commits all-commits at lists.llvm.org
Fri Jun 26 02:47:08 PDT 2020


  Branch: refs/heads/master
  Home:   https://github.com/llvm/llvm-project
  Commit: ce275d3030a9dfcf9c55c81b88ae1b2c88f1828f
      https://github.com/llvm/llvm-project/commit/ce275d3030a9dfcf9c55c81b88ae1b2c88f1828f
  Author: Pavel Labath <pavel at labath.sk>
  Date:   2020-06-26 (Fri, 26 Jun 2020)

  Changed paths:
    M lldb/source/Utility/Scalar.cpp

  Log Message:
  -----------
  [lldb] Rewrite Scalar::Promote

This function was implementing c-like promotion rules by switching on
the both types. C promotion rules are complicated, but they are not
*that* complicated -- they basically boil down to:
- wider types trump narrower ones
- unsigned trump signed
- floating point trumps integral

With a couple of helper functions, we can rewrite the function in terms
of these rules and greatly reduce the size and complexity of this
function.


  Commit: 5ed8765e2f007e56a34e3aa0ab01f65c5aaa7e27
      https://github.com/llvm/llvm-project/commit/5ed8765e2f007e56a34e3aa0ab01f65c5aaa7e27
  Author: Pavel Labath <pavel at labath.sk>
  Date:   2020-06-26 (Fri, 26 Jun 2020)

  Changed paths:
    M lldb/source/Plugins/UnwindAssembly/x86/UnwindAssembly-x86.cpp
    A lldb/test/Shell/Unwind/Inputs/eh-frame-augment-noop.s
    A lldb/test/Shell/Unwind/eh-frame-augment-noop.test

  Log Message:
  -----------
  [lldb/Unwind] Use eh_frame plan directly when it doesn't need to be augmented

Summary:
This fixes a bug in the logic for choosing the unwind plan. Based on the
comment in UnwindAssembly-x86, the intention was that a plan which
describes the function epilogue correctly does not need to be augmented
(and it should be used directly). However, the way this was implemented
(by returning false) meant that the higher level code
(FuncUnwinders::GetEHFrameAugmentedUnwindPlan) interpreted this as a
failure to produce _any_ plan and proceeded with other fallback options.
The fallback usually chosed for "asynchronous" plans was the
"instruction emulation" plan, which tended to fall over on certain
functions with multiple epilogues (that's a separate bug).

This patch simply changes the function to return true, which signals the
caller that the unmodified plan is ready to be used.

The attached test case demonstrates the case where we would previously
fall back to the instruction emulation plan, and unwind incorrectly --
the test asserts that the "augmented" eh_frame plan is used, and that
the unwind is correct.

Reviewers: jasonmolenda, jankratochvil

Subscribers: davide, echristo, lldb-commits

Tags: #lldb

Differential Revision: https://reviews.llvm.org/D82378


Compare: https://github.com/llvm/llvm-project/compare/0ccfe1b267af...5ed8765e2f00


More information about the All-commits mailing list