Re: vax/ddb(4): clean up machine dependent code and improve usability

Hans Rosenfeld <[email protected]>
Newsgroups gmane.os.netbsd.ports.vax
Message-ID <[email protected]>
On Mon, Mar 10, 2025 at 10:25:40PM +0100, Jan-Benedict Glaw wrote:
> On Mon, 2025-03-10 13:08:09 +0100, Hans Rosenfeld <[email protected]> wrote:
> > I've recently fixed a few bugs on VAX, and while I did that I noticed
> > that ddb(4) on VAX is a pain to work with. Here's my attempt fix this:
> > 
> > https://github.com/NetBSD/src/compare/trunk...hrosenfeld:NetBSD-src:vax-ddb
> 
> The patch contain two chunks like this:
> 
> -/* Isolate the saved register bits, and count them */
> -regs = fp->vax_regs;
> -for (arg_base = 0; regs != 0; regs >>= 1) {
> -	if (regs & 1)
> -		arg_base++;
> -}
> +/* Count saved register bits */
> +arg_base = popcount(fp->vax_regs);
> 
> 
> I'm not entirely sure, but I think both are actually not exactly
> correct. While counting registers R0 .. R11 it totally fine, things
> may change if for whatever reason the IV and DV flags are set (and
> counted.)  Maybe AND the register mask to mask out the top two bits
> for safety?

The vax_regs member of VAX_CALLFRAME is actually a bitfield covering
only the register mask bits, so I don't think that can happen?

This may be a bit confusing because there's also a struct callsframe
defined in vax/include/frame.h which doesn't use bitfields, but that
isn't used in the stack trace code.


Hans


-- 
%SYSTEM-F-ANARCHISM, The operating system has been overthrown
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.