最近在haps上验证一个新的芯片,记录一下memset访问出错的问题。

在没开mmu和cache的情况下,对全局变量指针进行memset清零操作,发现每次都会出现异常。最后发现是没开mmu导致出现了数据非对齐访问导致报错。

排查EC区域发现是0x25,产生了非对齐访问。

下面是非对齐访问的排查逻辑:

在ARM Cortex-A35处理器(ARMv8-A架构)上,可以通过检查以下状态寄存器来判断是否发生了非对齐内存访问异常:

1. 异常状态寄存器 (ESR_ELx)

这是判断异常类型的关键寄存器:

  • EC 字段 (Exception Class, 位[31:26]):

    • 数据中止异常:0b100101 (0x25)

  • ISS 字段 (Instruction Specific Syndrome, 位[24:0]):

    • 对齐错误:DFSC=0b100001 (0x21)

判断步骤


# 读取ESR_EL1(假设异常发生在EL1)
set esr_value [readreg ESR_EL1]# 提取EC字段(高6位)
set ec [expr ($esr_value >> 26) & 0x3F]# 提取DFSC字段(低6位)
set dfsc [expr $esr_value & 0x3F]# 检查是否是非对齐数据访问异常
if {$ec == 0x25 && $dfsc == 0x21} {echo "检测到非对齐内存访问异常!"
}

2. 故障地址寄存器 (FAR_ELx)

记录触发异常的内存地址:


# 读取触发异常的地址
set fault_addr [readreg FAR_EL1]
echo "异常访问地址:0x[format %x $fault_addr]"

完整调试示例脚本


# 连接到目标
connect -p jtag -c cortex-a35# 设置断点
break vector_data# 运行程序
run# 异常发生后检查状态
stop# 读取关键寄存器
set esr [readreg ESR_EL1]
set far [readreg FAR_EL1]
set pc [readreg PC]# 解析ESR
set ec [expr ($esr >> 26) & 0x3F]
set dfsc [expr $esr & 0x3F]# 输出诊断信息
echo "-------------------------"
echo "异常诊断信息:"
echo "PC = 0x[format %x $pc]"
echo "FAR = 0x[format %x $far]"
echo "ESR_EL1 = 0x[format %x $esr]"
echo "EC = 0x[format %x $ec]"
echo "DFSC = 0x[format %x $dfsc]"# 判断异常类型
if {$ec == 0x25} {if {$dfsc == 0x21} {echo ">> 非对齐内存访问异常!"echo ">> 地址 0x[format %x $far] 未按字长对齐"} else {echo ">> 其他类型数据中止 (DFSC=0x[format %x $dfsc])"}
} else {echo ">> 非数据中止异常 (EC=0x[format %x $ec])"
}

关键寄存器说明

寄存器位域含义
ESR_ELxEC[31:26]0x25数据中止异常
DFSC[5:0]0x21对齐错误
FAR_ELx-任意地址触发异常的内存地址
PC-当前地址发生异常时的指令地址

常见对齐要求

数据类型ARM64对齐要求
Byte1字节
Halfword2字节
Word4字节
Doubleword8字节
128-bit向量16字节

⚠️ 注意事项

  1. 异常级别需匹配:EL1异常查ESR_EL1,EL2查ESR_EL2

  2. 通过SCTLR_ELx.A位可配置对齐检查:

    • A=1:强制对齐检查(默认)

    • A=0:允许非对齐访问(但性能下降)

  3. 使用STM/LDM等多寄存器指令时,地址必须按8字节对齐

可通过以下命令检查对齐检查配置:


# 读取系统控制寄存器
set sctlr [readreg SCTLR_EL1]
set alignment_check [expr ($sctlr >> 1) & 1]  # 提取A位if {$alignment_check} {echo "对齐检查已启用"
} else {echo "警告:非对齐访问被允许!"
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/87944.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/87944.shtml
英文地址,请注明出处:http://en.pswp.cn/web/87944.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于LiveKit Go 实现腾讯云实时音视频功能

详细的生产部署建议,适用于 LiveKit Go 服务器 Web 客户端 TURN/HTTPS。 1. 服务器准备 推荐使用云服务器(如阿里云、腾讯云、AWS、Azure等),公网IP,带宽建议≥10Mbps。系统推荐 Ubuntu 20.04/22.04 或 CentOS 7/8&…

三位一体:Ovis-U1如何以30亿参数重构多模态AI格局?

1. 时代命题:多模态统一模型的破局之战当GPT-4o以万亿级参数构建多模态帝国时,中国AI军团正在书写另一种答案。Ovis-U1用30亿参数证明:参数量并非决定性因素,架构创新与训练策略的化学反应,同样能催生出改变游戏规则的…

图像处理基础:镜像、缩放与矫正

在图像处理中,镜像、缩放和矫正操作是常见的图像变换手段。这些操作可以帮助我们对图像进行调整,以满足不同的需求。本文将详细介绍这三种操作的原理和实现方法,并通过代码示例展示它们的实际应用。一、图片镜像旋转1.1 什么是镜像旋转&#…

「Java案例」猜数游戏

案例实现 猜数字游戏 设计一个三位数的猜数游戏,三位数随机生成。程序提示用户输入一个三位的数字,依照以下的规则决定赢取多少奖金:1) 如果用户输入的数字和随机数字完全一致,输出:“恭喜恭喜!完全猜对了!获得三个赞!”2) 如果用户输入的数字覆盖了随机生成的所有数…

创客匠人解析创始人 IP 内卷:知识变现时代的生存逻辑与破局路径

当知识付费行业进入 “存量竞争” 阶段,创始人 IP 的 “内卷” 已非选择而是必然。创客匠人在服务数万知识创业者的实践中发现,那些实现逆势增长的案例,其核心差异往往在于创始人是否具备 “从幕后走到台前” 的决心与能力 —— 这种内卷并非…

250705-Debian12-sudo apt update加速+配置RDP远程桌面环境+设置FRP服务为开机启动项

A. 实现sudo apt update加速 在 Debian 12 上运行 sudo apt update 很慢的常见原因包括: 🔍 一、常见原因分析 使用了国外的软件源 默认 Debian 安装源多数是国际服务器,国内访问会非常慢。 DNS 解析慢或失败 软件源地址解析时间长&#xf…

数学视频动画引擎Python库 -- Manim Voiceover 语音服务 Speech Services

文中内容仅限技术学习与代码实践参考,市场存在不确定性,技术分析需谨慎验证,不构成任何投资建议。 Manim Voiceover 是一个为 Manim 打造的专注于语音旁白的插件: 直接在 Python 中添加语音旁白: 无需使用视频编辑器&…

C++11 forward_list 从基础到精通:原理、实践与性能优化

文章目录一、为什么需要 forward_list?二、基础篇:forward_list 的核心特性与接口2.1 数据结构与迭代器2.2 常用接口速览2.3 基础操作示例:从初始化到遍历2.3.1 初始化与遍历2.3.2 插入与删除:before_begin 的关键作用三、进阶篇&…

物联网技术的核心组件与发展趋势(截至2025年)

一、物联网技术的核心组件物联网(IoT)技术体系由感知层、网络层、平台层、应用层和安全层构成,各层技术协同工作,实现物理世界与数字世界的深度融合。1. 感知层:数据采集与交互传感器技术:类型:…

面试中常见的问题:JavaScript 宏任务与微任务,包教包会

事件循环Event Loop 我们都知道,JavaScript 是一种单线程的编程语言,简单的说就是:js只有一条通道,那么在任务多的情况下,就会出现拥挤的情况,这种情况下就产生了 ‘多线程’ ,但是这种“多线程…

【LeetCode102.二叉树的层序遍历】vs.【LeetCode103.二叉树的锯齿形层序遍历】

题目链接 LeetCode102.二叉树的层序遍历:102. 二叉树的层序遍历 - 力扣(LeetCode)LeetCode103.二叉树的锯齿形层序遍历:103. 二叉树的锯齿形层序遍历 - 力扣(LeetCode) 实现思路 定义一个队列&#xff0…

Redis On-CPU Profiling定位瓶颈到可视化火焰图

1 . 前置检查:确认 CPU 真的是瓶颈 在正式打性能“补丁”前,务必跑一遍系统级健康核对表(推荐 Brendan Greg 的 USE Method):资源关注指标常用工具CPUUtil/Idle、RunQueuetop、vmstat、sar内存Fault、Swap、Cache Miss…

未来趋势:AI与量子计算对服务器安全的影响

随着技术的飞速发展,人工智能(AI)和量子计算正在深刻改变信息技术的各个领域。特别是在服务器安全领域,这两项技术既带来了新的可能性,也带来了前所未有的挑战。本文将探讨AI和量子计算技术对服务器安全的影响&#xf…

markdown学习笔记(个人向) Part.1

markdown学习笔记(个人向) Part.1 1. 推荐插件 markdown: 安装支持markdown的插件; markdown-preview-github-styles: 可以将VS Code上默认的markdown预览样式修改成github上常用的形式,很大程度上提高文件…

ZooKeeper 实现分布式锁

1. 分布式锁概述 在分布式系统中,为了保证共享资源在并发访问下的数据一致性,需要引入分布式锁。分布式锁是一种在分布式环境下控制多个进程对共享资源进行互斥访问的机制。它与单机环境下的锁(如Java中的synchronized或Lock)不同…

Linux线程——基础全解

一、什么是线程(Thread)?✅ 定义:线程是程序执行的最小单位。即线程(Thread)是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。一个进程可以并发多…

Java基础--封装+static

目录 什么是封装? 什么是访问限定符? static静态修饰符 用static修饰的类变量或类方法的注意事项: 什么是封装? 封装是面向对象的三大特性之一,指的是将一个类中的实现细节进行隐藏,对外只提供一些开放…

DAY 51 复习日

作业:day43的时候我们安排大家对自己找的数据集用简单cnn训练,现在可以尝试下借助这几天的知识来实现精度的进一步提高import torch import torch.nn as nn import torch.nn.functional as F import torchvision import torchvision.transforms as trans…

针对网络爬虫的相关法律法规整理

在中国,网络爬虫的法律法规涉及多个层面,包括个人信息保护、数据安全、网络安全、知识产权、反不正当竞争等。以下是详细的法律法规分析及合规指南: 1. 核心法律法规及适用场景​ ​​(1)《民法典》——隐私权与个人信…

1.1_5_2 计算机网络的性能指标(下)

继续来看计算机网络的性能指标,接下来我们探讨时延,时延带宽积和往返时延,以及信道利用率这几个性能指标。 首先来看时延这个性能指标,英文叫delay,也有的教材,把它翻译为延迟。所谓的时延,就是…