Please use GitHub pull requests for new patches. Avoid migrating existing patches. Phabricator shutdown timeline
Changeset View
Changeset View
Standalone View
Standalone View
libunwind/src/DwarfInstructions.hpp
Show First 20 Lines • Show All 236 Lines • ▼ Show 20 Lines | #else | ||||
asm("hint 0xe" : "+r"(x17) : "r"(x16)); // autib1716 | asm("hint 0xe" : "+r"(x17) : "r"(x16)); // autib1716 | ||||
else | else | ||||
asm("hint 0xc" : "+r"(x17) : "r"(x16)); // autia1716 | asm("hint 0xc" : "+r"(x17) : "r"(x16)); // autia1716 | ||||
returnAddress = x17; | returnAddress = x17; | ||||
#endif | #endif | ||||
} | } | ||||
#endif | #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 defined(_LIBUNWIND_TARGET_SPARC) | ||||
if (R::getArch() == REGISTERS_SPARC) { | if (R::getArch() == REGISTERS_SPARC) { | ||||
// Skip call site instruction and delay slot | // Skip call site instruction and delay slot | ||||
returnAddress += 8; | returnAddress += 8; | ||||
// Skip unimp instruction if function returns a struct | // Skip unimp instruction if function returns a struct | ||||
if ((addressSpace.get32(returnAddress) & 0xC1C00000) == 0) | if ((addressSpace.get32(returnAddress) & 0xC1C00000) == 0) | ||||
returnAddress += 4; | returnAddress += 4; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 586 Lines • Show Last 20 Lines |