diff options
author | thegeorg <[email protected]> | 2022-02-10 16:45:08 +0300 |
---|---|---|
committer | Daniil Cherednik <[email protected]> | 2022-02-10 16:45:08 +0300 |
commit | 4e839db24a3bbc9f1c610c43d6faaaa99824dcca (patch) | |
tree | 506dac10f5df94fab310584ee51b24fc5a081c22 /contrib/libs/libunwind/src/DwarfInstructions.hpp | |
parent | 2d37894b1b037cf24231090eda8589bbb44fb6fc (diff) |
Restoring authorship annotation for <[email protected]>. Commit 1 of 2.
Diffstat (limited to 'contrib/libs/libunwind/src/DwarfInstructions.hpp')
-rw-r--r-- | contrib/libs/libunwind/src/DwarfInstructions.hpp | 102 |
1 files changed, 51 insertions, 51 deletions
diff --git a/contrib/libs/libunwind/src/DwarfInstructions.hpp b/contrib/libs/libunwind/src/DwarfInstructions.hpp index c1a241c55ce..cf00869d30b 100644 --- a/contrib/libs/libunwind/src/DwarfInstructions.hpp +++ b/contrib/libs/libunwind/src/DwarfInstructions.hpp @@ -1,4 +1,4 @@ -//===----------------------------------------------------------------------===// +//===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. @@ -74,13 +74,13 @@ private: } }; -template <typename R> -auto getSparcWCookie(const R &r, int) -> decltype(r.getWCookie()) { - return r.getWCookie(); -} -template <typename R> uint64_t getSparcWCookie(const R &, long) { - return 0; -} +template <typename R> +auto getSparcWCookie(const R &r, int) -> decltype(r.getWCookie()) { + return r.getWCookie(); +} +template <typename R> uint64_t getSparcWCookie(const R &, long) { + return 0; +} template <typename A, typename R> typename A::pint_t DwarfInstructions<A, R>::getSavedRegister( @@ -90,10 +90,10 @@ typename A::pint_t DwarfInstructions<A, R>::getSavedRegister( case CFI_Parser<A>::kRegisterInCFA: return (pint_t)addressSpace.getRegister(cfa + (pint_t)savedReg.value); - case CFI_Parser<A>::kRegisterInCFADecrypt: // sparc64 specific - return addressSpace.getP(cfa + (pint_t)savedReg.value) ^ - getSparcWCookie(registers, 0); - + case CFI_Parser<A>::kRegisterInCFADecrypt: // sparc64 specific + return addressSpace.getP(cfa + (pint_t)savedReg.value) ^ + getSparcWCookie(registers, 0); + case CFI_Parser<A>::kRegisterAtExpression: return (pint_t)addressSpace.getRegister(evaluateExpression( (pint_t)savedReg.value, addressSpace, registers, cfa)); @@ -126,16 +126,16 @@ double DwarfInstructions<A, R>::getSavedFloatRegister( return addressSpace.getDouble( evaluateExpression((pint_t)savedReg.value, addressSpace, registers, cfa)); - case CFI_Parser<A>::kRegisterUndefined: - return 0.0; - case CFI_Parser<A>::kRegisterInRegister: -#ifndef _LIBUNWIND_TARGET_ARM - return registers.getFloatRegister((int)savedReg.value); -#endif + case CFI_Parser<A>::kRegisterUndefined: + return 0.0; + case CFI_Parser<A>::kRegisterInRegister: +#ifndef _LIBUNWIND_TARGET_ARM + return registers.getFloatRegister((int)savedReg.value); +#endif case CFI_Parser<A>::kRegisterIsExpression: case CFI_Parser<A>::kRegisterUnused: case CFI_Parser<A>::kRegisterOffsetFromCFA: - case CFI_Parser<A>::kRegisterInCFADecrypt: + case CFI_Parser<A>::kRegisterInCFADecrypt: // FIX ME break; } @@ -160,7 +160,7 @@ v128 DwarfInstructions<A, R>::getSavedVectorRegister( case CFI_Parser<A>::kRegisterUndefined: case CFI_Parser<A>::kRegisterOffsetFromCFA: case CFI_Parser<A>::kRegisterInRegister: - case CFI_Parser<A>::kRegisterInCFADecrypt: + case CFI_Parser<A>::kRegisterInCFADecrypt: // FIX ME break; } @@ -183,16 +183,16 @@ int DwarfInstructions<A, R>::stepWithDwarf(A &addressSpace, pint_t pc, // restore registers that DWARF says were saved R newRegisters = registers; - - // Typically, the CFA is the stack pointer at the call site in - // the previous frame. However, there are scenarios in which this is not - // true. For example, if we switched to a new stack. In that case, the - // value of the previous SP might be indicated by a CFI directive. - // - // We set the SP here to the CFA, allowing for it to be overridden - // by a CFI directive later on. - newRegisters.setSP(cfa); - + + // Typically, the CFA is the stack pointer at the call site in + // the previous frame. However, there are scenarios in which this is not + // true. For example, if we switched to a new stack. In that case, the + // value of the previous SP might be indicated by a CFI directive. + // + // We set the SP here to the CFA, allowing for it to be overridden + // by a CFI directive later on. + newRegisters.setSP(cfa); + pint_t returnAddress = 0; const int lastReg = R::lastDwarfRegNum(); assert(static_cast<int>(CFI_Parser<A>::kMaxRegisterNumber) >= lastReg && @@ -235,7 +235,7 @@ int DwarfInstructions<A, R>::stepWithDwarf(A &addressSpace, pint_t pc, // restored. autia1716 is used instead of autia as autia1716 assembles // to a NOP on pre-v8.3a architectures. if ((R::getArch() == REGISTERS_ARM64) && - prolog.savedRegisters[UNW_AARCH64_RA_SIGN_STATE].value && + prolog.savedRegisters[UNW_AARCH64_RA_SIGN_STATE].value && returnAddress != 0) { #if !defined(_LIBUNWIND_IS_NATIVE_ONLY) return UNW_ECROSSRASIGNING; @@ -255,20 +255,20 @@ int DwarfInstructions<A, R>::stepWithDwarf(A &addressSpace, pint_t pc, } #endif -#if defined(_LIBUNWIND_IS_NATIVE_ONLY) && defined(_LIBUNWIND_TARGET_ARM) && \ - defined(__ARM_FEATURE_PAUTH) - if ((R::getArch() == REGISTERS_ARM) && - prolog.savedRegisters[UNW_ARM_RA_AUTH_CODE].value) { - pint_t pac = - getSavedRegister(addressSpace, registers, cfa, - prolog.savedRegisters[UNW_ARM_RA_AUTH_CODE]); - __asm__ __volatile__("autg %0, %1, %2" - : - : "r"(pac), "r"(returnAddress), "r"(cfa) - :); - } -#endif - +#if defined(_LIBUNWIND_IS_NATIVE_ONLY) && defined(_LIBUNWIND_TARGET_ARM) && \ + defined(__ARM_FEATURE_PAUTH) + if ((R::getArch() == REGISTERS_ARM) && + prolog.savedRegisters[UNW_ARM_RA_AUTH_CODE].value) { + pint_t pac = + getSavedRegister(addressSpace, registers, cfa, + prolog.savedRegisters[UNW_ARM_RA_AUTH_CODE]); + __asm__ __volatile__("autg %0, %1, %2" + : + : "r"(pac), "r"(returnAddress), "r"(cfa) + :); + } +#endif + #if defined(_LIBUNWIND_TARGET_SPARC) if (R::getArch() == REGISTERS_SPARC) { // Skip call site instruction and delay slot @@ -279,12 +279,12 @@ int DwarfInstructions<A, R>::stepWithDwarf(A &addressSpace, pint_t pc, } #endif -#if defined(_LIBUNWIND_TARGET_SPARC64) - // Skip call site instruction and delay slot. - if (R::getArch() == REGISTERS_SPARC64) - returnAddress += 8; -#endif - +#if defined(_LIBUNWIND_TARGET_SPARC64) + // Skip call site instruction and delay slot. + if (R::getArch() == REGISTERS_SPARC64) + returnAddress += 8; +#endif + #if defined(_LIBUNWIND_TARGET_PPC64) #define PPC64_ELFV1_R2_LOAD_INST_ENCODING 0xe8410028u // ld r2,40(r1) #define PPC64_ELFV1_R2_OFFSET 40 |