summaryrefslogtreecommitdiff
path: root/sys/lib
diff options
context:
space:
mode:
authorjoerg <joerg@NetBSD.org>2021-02-23 15:07:32 +0000
committerjoerg <joerg@NetBSD.org>2021-02-23 15:07:32 +0000
commit1fbf1330147f0eeddc3a4931b8ec0dd10b08afbe (patch)
tree0d9141dc7428033cdbf116f342925000b3515952 /sys/lib
parentbc4d2d6fcad31b5436b2a4c625b5d2c6e83d41c0 (diff)
The return address register entry is the DWARF register. On PowerPC,
this is not the same as the internal encoding, since the Link Register is deliberately non-continous from the other general purpose register values. To handle this, always translate the value into the internal format.
Diffstat (limited to 'sys/lib')
-rw-r--r--sys/lib/libunwind/DwarfParser.hpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/sys/lib/libunwind/DwarfParser.hpp b/sys/lib/libunwind/DwarfParser.hpp
index 6e8ef2cab4c..9b9b394bd66 100644
--- a/sys/lib/libunwind/DwarfParser.hpp
+++ b/sys/lib/libunwind/DwarfParser.hpp
@@ -239,7 +239,7 @@ bool CFI_Parser<A, R>::parseCIE(A &addressSpace, pint_t cie,
// Parse data alignment factor
cieInfo->dataAlignFactor = addressSpace.getSLEB128(p, cieContentEnd);
// Parse return address register
- cieInfo->returnAddressRegister = (uint8_t)addressSpace.getULEB128(p, cieContentEnd);
+ cieInfo->returnAddressRegister = R::dwarf2regno((uint8_t)addressSpace.getULEB128(p, cieContentEnd));
// Parse augmentation data based on augmentation string.
if (addressSpace.get8(strStart) == 'z') {
// parse augmentation data length