ARMv8 沒開mmu執行memset引起的非對齊訪問異常

最近在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,也有的教材,把它翻譯為延遲。所謂的時延,就是…