NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

PR/55837 CVS commit: src/sys/lib/libunwind



The following reply was made to PR toolchain/55837; it has been noted by GNATS.

From: "Rin Okuyama" <rin%netbsd.org@localhost>
To: gnats-bugs%gnats.NetBSD.org@localhost
Cc: 
Subject: PR/55837 CVS commit: src/sys/lib/libunwind
Date: Mon, 31 May 2021 12:12:24 +0000

 Module Name:	src
 Committed By:	rin
 Date:		Mon May 31 12:12:24 UTC 2021
 
 Modified Files:
 	src/sys/lib/libunwind: Registers.hpp
 
 Log Message:
 PR toolchain/55837
 
 Bump LAST_REGISTER and LAST_RESTORE_REG to REGNO_ARM32_S31 for arm.
 
 There are two numbering schemes for VFPv2 registers: s0-s31 and d0-d15.
 The former is used by GCC, and the latter is by LLVM. Since libunwind was
 derived from LLVM, it has never supported the former. This results in
 crashes for GCC-compiled binaries in exception handler of C++, if it
 encounters VFPv2 registers when unwinding frames.
 
 This commit adds support for s0-s31 numbering to libunwind. I choose an
 implementation in which VFPv2 registers are ``double-counted'' as s0-s31
 AND d0-d15. This does not cause real problems, since the former is only
 used by GCC, and the later is by LLVM. That is, different numbering
 schemes cannot appear in a same frame. To make sure, assertions are added
 in order to check this.
 
 I've confirmed that no regression for ATF both for GCC- and LLVM-compiled
 userlands.
 
 
 To generate a diff of this commit:
 cvs rdiff -u -r1.26 -r1.27 src/sys/lib/libunwind/Registers.hpp
 
 Please note that diffs are not public domain; they are subject to the
 copyright notices on the relevant files.
 


Home | Main Index | Thread Index | Old Index