All of lore.kernel.org
 help / color / mirror / Atom feed
From: Zhao Liu <zhao1.liu@intel.com>
To: Stefan Hajnoczi <stefanha@redhat.com>
Cc: "Mads Ynddal" <mads@ynddal.dk>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Philippe Mathieu-Daud�" <philmd@linaro.org>,
	"Peter Maydell" <peter.maydell@linaro.org>,
	"Alex Benn�e" <alex.bennee@linaro.org>,
	"Daniel P . Berrang�" <berrange@redhat.com>,
	"Thomas Huth" <thuth@redhat.com>,
	"Markus Armbruster" <armbru@redhat.com>,
	qemu-devel@nongnu.org
Subject: Re: [RFC 3/6] scripts/simpletrace-rust: Add helpers to parse trace file
Date: Tue, 28 May 2024 16:37:39 +0800	[thread overview]
Message-ID: <ZlWX00EGcPdBezpy@intel.com> (raw)
In-Reply-To: <20240527203938.GD913874@fedora.redhat.com>

> > +    fn read_type(mut fobj: &File) -> Result<RecordType>
> > +    {
> > +        let mut tbuf = [0u8; 8];
> > +        if let Err(e) = fobj.read_exact(&mut tbuf) {
> > +            if e.kind() == ErrorKind::UnexpectedEof {
> > +                return Ok(RecordType::Empty);
> > +            } else {
> > +                return Err(Error::ReadFile(e));
> > +            }
> > +        }
> > +
> > +        /*
> > +         * Safe because the layout of the trace record requires us to parse
> > +         * the type first, and then there is a check on the validity of the
> > +         * record type.
> > +         */
> > +        let raw_t =
> > +            unsafe { std::mem::transmute::<[u8; 8], RecordRawType>(tbuf) };
> 
> A safe alternative: https://doc.rust-lang.org/std/primitive.u64.html#method.from_ne_bytes?

Thanks! Will use it.

> > +        match raw_t.rtype {
> > +            RECORD_TYPE_MAPPING => Ok(RecordType::Mapping),
> > +            RECORD_TYPE_EVENT => Ok(RecordType::Event),
> > +            _ => Err(Error::UnknownRecType(raw_t.rtype)),
> > +        }
> > +    }
> > +}

[snip]

> > +{
> > +    fn read_header(mut fobj: &File) -> Result<Self>
> > +    {
> > +        let mut raw_hdr = [0u8; 24];
> > +        fobj.read_exact(&mut raw_hdr).map_err(Error::ReadFile)?;
> > +
> > +        /*
> > +         * Safe because the size of log header (struct LogHeader)
> > +         * is 24 bytes, which is ensured by simple trace backend.
> > +         */
> > +        let hdr =
> > +            unsafe { std::mem::transmute::<[u8; 24], LogHeader>(raw_hdr) };
> 
> Or u64::from_ne_bytes() for each field.

Will do.

> > +        Ok(hdr)
> > +    }
> > +}

[snip]

> > +impl ReadHeader for RecordHeader
> > +{
> > +    fn read_header(mut fobj: &File) -> Result<Self>
> > +    {
> > +        let mut raw_hdr = [0u8; 24];
> > +        fobj.read_exact(&mut raw_hdr).map_err(Error::ReadFile)?;
> > +
> > +        /*
> > +         * Safe because the size of record header (struct RecordHeader)
> > +         * is 24 bytes, which is ensured by simple trace backend.
> > +         */
> > +        let hdr: RecordHeader =
> > +            unsafe { std::mem::transmute::<[u8; 24], RecordHeader>(raw_hdr) };
> 
> Or u64::from_ne_bytes() and u32::from_ne_bytes() for all fields.

Will do.

Thanks,
Zhao



  reply	other threads:[~2024-05-28  8:22 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-05-27  8:14 [RFC 0/6] scripts: Rewrite simpletrace printer in Rust Zhao Liu
2024-05-27  8:14 ` [RFC 1/6] scripts/simpletrace-rust: Add the basic cargo framework Zhao Liu
2024-05-27 20:05   ` Stefan Hajnoczi
2024-05-28  7:53     ` Zhao Liu
2024-05-28 14:14       ` Stefan Hajnoczi
2024-05-29 14:30         ` Zhao Liu
2024-05-29 18:41           ` Stefan Hajnoczi
2024-05-31 12:22             ` Daniel P. Berrangé
2024-05-27  8:14 ` [RFC 2/6] scripts/simpletrace-rust: Support Event & Arguments in trace module Zhao Liu
2024-05-27 20:33   ` Stefan Hajnoczi
2024-05-28  8:32     ` Zhao Liu
2024-05-27  8:14 ` [RFC 3/6] scripts/simpletrace-rust: Add helpers to parse trace file Zhao Liu
2024-05-27 20:39   ` Stefan Hajnoczi
2024-05-28  8:37     ` Zhao Liu [this message]
2024-05-27  8:14 ` [RFC 4/6] scripts/simpletrace-rust: Parse and check trace recode file Zhao Liu
2024-05-27 20:44   ` Stefan Hajnoczi
2024-05-28  9:30     ` Zhao Liu
2024-05-27  8:14 ` [RFC 5/6] scripts/simpletrace-rust: Format simple trace output Zhao Liu
2024-05-27  8:14 ` [RFC 6/6] docs/tracing: Add simpletrace-rust section Zhao Liu
2024-05-27 10:29 ` [RFC 0/6] scripts: Rewrite simpletrace printer in Rust Philippe Mathieu-Daudé
2024-05-27 10:49 ` Mads Ynddal
2024-05-28  6:15   ` Zhao Liu
2024-05-27 19:59 ` Stefan Hajnoczi
2024-05-28  6:48   ` Zhao Liu
2024-05-28 13:05     ` Stefan Hajnoczi
2024-05-29  9:33       ` Mads Ynddal
2024-05-29 14:10         ` Zhao Liu
2024-05-29 18:44           ` Stefan Hajnoczi
2024-05-31 12:27 ` Daniel P. Berrangé
2024-05-31 14:55   ` Alex Bennée

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZlWX00EGcPdBezpy@intel.com \
    --to=zhao1.liu@intel.com \
    --cc=alex.bennee@linaro.org \
    --cc=armbru@redhat.com \
    --cc=berrange@redhat.com \
    --cc=mads@ynddal.dk \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=philmd@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    --cc=thuth@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.