【问题标题】:Verify stw actually wrote to memory验证 stw 实际写入内存
【发布时间】:2021-06-23 14:52:33
【问题描述】:

我想验证我的 stw 是否确实使用 C 写入了内存位置。

我知道我可以使用加载字来读取它(只要我不使用写入它的同一个寄存器?),但是在 C 中可以使用的等效语法是什么?

【问题讨论】:

  • 你写信给stw的地址是什么? C 程序应该如何知道该地址?您是否关心数据是否实际写入物理内存,而不仅仅是缓存?
  • @EricPostpischil 见上文以进行澄清。这一切都在同一个项目下。我会知道写入数据所在的地址。数据已写入缓存,我需要确保“程序集写入”实际上已写入缓存。
  • 您的内联 asm 缺少 "memory" clobber:对它的 C 访问可以假定 asm 语句没有更改它。 (stackoverflow.com/tags/inline-assembly/info) 你也忘了告诉编译器你修改的寄存器,包括"cc" 条件代码,如果任何 PowerPC(?) 指令这样做的话。
  • @PeterCordes 它是 PowerPC
  • @PeterCordes 我得看看 clobber 做了什么。我对汇编不太了解,但我已经包含了上面的更多代码,因为我不确定它是否相关或不是,这可能是也可能不是您所引用的内容。

标签: c assembly memory inline-assembly powerpc


【解决方案1】:

您可以像这样从任意内存地址读取:

volatile uint64_t * const addr = (volatile uint64_t * const) 0x12345678;

printf("%llx\n",*addr);

将 uint64_t 替换为系统的字长。

这将需要在与执行 stw 的汇编例程相同的程序中运行,以便您在相同的虚拟地址空间中写入/读取相同的虚拟地址。

【讨论】:

    猜你喜欢
    • 2016-07-29
    • 2022-08-03
    • 1970-01-01
    • 2015-11-24
    • 2016-12-23
    • 2013-03-10
    • 1970-01-01
    • 1970-01-01
    • 2014-09-16
    相关资源
    最近更新 更多