R_AARCH64_ADR_PREL_PG_HI21问题说明

news2025/1/22 12:21:40

目录

问题现象:

问题原因

问题机理


问题现象:

客户现场加载out文件出现如下问题:

打印“Relocation of type ‘R_AARCH64_ADR_PREL_PG_HI22…..’”,明确是ARDP指令引起的问题

问题原因

ARDP的寻址范围是±4GB范围,加载的位置已经超过这个位置范围,便会报如

问题机理

ARDP指令说明:

ADRP指令使用一个21位的立即数(immediate)来指定偏移量,这个偏移量是以4KB页面大小为单位计算的。因此,ADRP指令可以表示的偏移范围是:

超出范围的处理

        如果目标地址超出了±4GB范围,编译器将无法使用ADRP指令生成有效的偏移量。在这种情况下,编译阶段会产生错误。具体错误信息可能因编译器和工具链而异,但通常会出现类似于“out of range”或“cannot generate relocation”之类的错误信息。

        链接时错误:如果链接器在处理重定位时发现符号地址超出了 ADRP 能够表示的范围,它可能会报错。这种情况下,链接器可能会报告一个错误,提示重定位类型 R_AARCH64_ADR_PREL_PG_HI21 无法应用,因为目标地址超出了 ADRP 指令能够访问的范围。

        运行时错误:如果链接器没有检测到这个问题,或者在编译时使用了某些特殊的选项来绕过检查,那么在运行时,程序可能会尝试执行一个超出范围的地址访问。这将导致未定义行为,可能表现为程序崩溃或产生错误消息。

常见错误信息

在使用ADRP指令加载超出±4GB范围的地址时,常见的编译器错误信息包括:

“relocation truncated to fit”

“cannot generate relocation”

“immediate offset out of range”

这些错误表明目标地址超出了ADRP指令能够处理的范围,编译器无法生成有效的机器码。

解决方案

        在out文件编译的时候添加-mcmodel=large参数。

        使用 -mcmodel=large 时指令生成的变化

        在大内存模型下,编译器会选择能够处理更大地址空间的指令来确保正确访问数据。例如:

        在小内存模型下,编译器可能会生成如下代码:

ADRP X0, label
ADD  X0, X0, :lo12:label

        在大内存模型下,编译器可能会生成如下代码:

LDR  X0, =label

        在大内存模型下,使用LDR指令可以直接从内存中加载绝对地址,而不受±2GB的限制。这是因为在-mcmodel=large模式下,编译器假定需要访问的地址可能超出ADRP指令的范围。

说明(LDR和ADRP区别)

        在ARMv8架构中,ADRP 和 LDR 指令用于不同的目的和场景,尽管它们都与内存地址操作有关。以下是它们的主要区别:

ADRP 指令

        ADRP 指令是“Add with Relocation Page”的缩写,用于生成一个页面对齐的地址。它将当前的PC(程序计数器)与一个相对偏移相加,并将结果存储在目标寄存器中。主要用于生成基地址,在加载较大的数据或访问静态变量时特别有用。

  1. 语法: ADRP Xd, label
  2. 功能: 将标签(label)的页基地址加载到寄存器 Xd 中。标签必须在同一页面(通常为4KB)或相邻页面中。
  3. 用途: 常用于PIC(位置无关代码)和地址计算,如访问全局变量或静态数据。

例如:

ADRP X0, label  ; 将label的页基地址加载到X0

LDR 指令

        LDR 指令是“Load Register”的缩写,用于从内存中加载数据到寄存器中。LDR 可以直接加载数据或通过基址和偏移量来访问内存。

  1. 语法: LDR Xt, [Xn, #offset]
  2. 功能: 从地址 [Xn + offset] 处加载数据到寄存器 Xt 中。
  3. 用途: 直接访问内存中的数据,用于加载全局变量、数组元素或从内存中读取任意数据。

例如:

LDR X1, [X0, #offset]  ; 从X0 + offset处加载数据到X1

示例说明

        结合 ADRP 和 LDR 指令,我们可以看到一个完整的地址加载过程。例如,加载一个全局变量的地址:

ADRP X0, label       ; 加载label所在页的页基地址到X0

LDR X1, [X0, #offset] ; 从X0 + offset处加载实际数据到X1

        在这个例子中,ADRP 用于生成一个接近目标地址的基址(页对齐的基址),然后 LDR 用于加载该地址的实际数据。

总结

        ADRP 用于生成页基地址,特别适用于需要生成基址的情况。

        LDR 用于从内存加载数据,直接与内存地址打交道。(因虚拟地址需MMU配置完成才能使用

        两者结合使用时,能够有效地访问大数据或静态变量,在编写高效和位置无关代码时尤为重要。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【用Python画画】六一儿童节画爱心

本文收录于 《Python编程入门》专栏,从零基础开始,分享一些Python编程基础知识,欢迎关注,谢谢! 文章目录 一、前言二、代码示例三、知识点梳理四、总结 一、前言 本文介绍如何使用Python的海龟画图工具turtle&#xf…

取代Windows的系统复制粘贴等文件处理

TeraCopy 可以到官网下载也可以通过应用商店下载 主要作用 : 取代Windows的系统复制粘贴等文件处理 常规窗口 点击第一排最左侧的按钮会显示这个窗口, 显示所以文件操作记录 , 这个也是我装这个软件的原因之一, 框选的是当前正在进行的 当执行复制粘贴时会自动出现, 让自行…

html three.js 引入.stl模型示例

1.新建一个模块用于放置模型 <div id"chart_map" style"width:800px;height:500px"></div> 2. 引入代码根据需求更改 <!-- 在head或body标签内加入以下链接 --> <script src"https://cdn.jsdelivr.net/npm/three0.137/build/t…

基于R语言BIOMOD2 及机器学习方法的物种分布模拟

BIOMOD2是一个R软件包&#xff0c;用于构建和评估物种分布模型&#xff08;SDMs&#xff09;。它集成了多种统计和机器学习方法&#xff0c;如GLM、GAM、SVM等&#xff0c;允许用户预测和分析物种在不同环境条件下的地理分布。通过这种方式&#xff0c;BIOMOD帮助研究者评估气候…

零刻SER8 AMD 8845Hs Ryzen AI 本地部署大语言模型教程!

零刻SER8 8845HS,配备了一个内置的 NPU&#xff08;神经网络处理单元&#xff09;&#xff0c;可以通过LM Studio语言大模型来部署己的 GPT 模型 AI 聊天机器人&#xff0c;AI 助手已迅速成为提高生产力、效率&#xff0c;甚至是头脑风暴的关键资源。在本地机器上运行 AI 聊天机…

前端列表可滚动,可轮播

前端列表可滚动&#xff0c;可轮播 <ulclass"scroll-list"ref"scroll_List"mouseenter"cancelScroll()"mouseleave"autoScroll()"><liclass"list-item"v-for"(item,index) in tableData3":class"[…

java现饱和,有必要去学其他语言吗?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「 java的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;如果有时间总比不学好&…

虹科免拆诊断案例 | 2013 款路虎神行者 2 车偶发性无法起动

故障现象 一辆2013款路虎神行者2车&#xff0c;搭载2.0 L Si4 Petrol发动机&#xff0c;累计行驶里程约为4.5万km。车主反映&#xff0c;车辆偶发性无法起动&#xff0c;故障出现时&#xff0c;尝试起动发动机&#xff0c;组合仪表上会出现“挡位不在驻车挡”“充电系统故障”…

【Qt】 new成功,但是没有进入到构造函数。

NameTest工程中 nametest.cpp NameTest::NameTest() {pdata new privateAB; }NameTest::~NameTest() {if (pdata){privateAB *p (privateAB *)pData; //void *pdata nullptr;delete p;pdata nullptr;} }内部类&#xff1a; privateAB #include "private.h"#i…

密码学基本概念(补充)

BiBa模型的*特性规则&#xff1a;主体不能修改更高完整级的客体&#xff08;主题不能向上写&#xff09; Diffie-Hellman密钥交换协议的安全性基于求解离散对数的困难性&#xff0c;既对于C^d M mod P&#xff0c;在已知C和P的前提下&#xff0c;由d求M很容易&#xff0c;但是…

使用Nginx正向代理让内网主机通过外网主机访问互联网

目录 环境概述 流程说明 在外网服务器上安装部署nginx 安装前准备 下载nginx 编译安装nginx 开始配置正向代理 创建systemd服务单元文件&#xff0c;用于管理Nginx服务的启动、停止和重新加载 启动nginx 代理服务器本地验证 内网服务器验证 将代理地址添加到环境变量中…

地理加权回归GWR简介

地理加权回归GWR简介 一、定义&#xff1a; 地理加权回归&#xff08;Geographically Weighted Regression&#xff0c;简称GWR&#xff09;是一种空间数据分析方法&#xff0c;专门用于处理空间异质性&#xff08;spatial heterogeneity&#xff09;问题。以下是对GWR的详细简…

【云原生】Kubernetes----Ingress对外服务

目录 引言 一、K8S对外方式 &#xff08;一&#xff09;NodePort 1.作用 2.弊端 3.示例 &#xff08;二&#xff09;externalIPs 1.作用 2.弊端 3.示例 &#xff08;三&#xff09;LoadBalancer 1.作用 2.弊端 &#xff08;四&#xff09;Ingress 二、Ingress的…

mac虚拟光驱工具:Daemon Tools for Mac

Daemon Tools for Mac是一款功能强大的虚拟光驱工具&#xff0c;它为用户提供了在Mac上模拟物理光驱的能力&#xff0c;从而方便用户处理各种光盘映像文件。以下是关于Daemon Tools for Mac的详细介绍&#xff1a; 守护进程工具&#xff1a;Daemon Tools不仅是一个简单的虚拟光…

Tomcat概述及部署

目录 一、Tomcat概述 1.Tomcat的简介 2.Tomcat 核心的三个组件 3.应用场景 4.Tomcat 请求过程 二、部署安装Tomcat 三、Tomcat 虚拟主机配置 四、Tomcat多实例部署 一、Tomcat概述 1.Tomcat的简介 Tomcat 是 Java 语言开发的&#xff0c;Tomcat 服务器是一个免费的开…

花费-效益分析筛选肿瘤标记物最佳组合

基于花费-效益分析的肿瘤标记物最佳组合筛选 本文的想法来自于一篇发表的论文[1]。论文作者有感于临床上存在的不恰当的肿瘤标记物的检测&#xff0c;搜集了各种肿瘤标记物&#xff08;TM&#xff09;的价格、检测结果和最终诊断等数据&#xff0c;使用逻辑回归模型分别计算出…

中国90米土壤渗流因子Fsic数据

Fsic(土壤渗流因子)&#xff1a;土壤渗流因子的计算是根据美国农业部(USDA)土壤质地分类&#xff0c; 进行分类、赋值并归一化,得到土壤渗流因子Fsic的值。将13种土壤质地类型分别在0-1之间均等赋值得到。其中Fsic值越高&#xff0c;代表土壤渗水能力越强&#xff0c;Fsic值域范…

彻底吃透A*算法的最优性

下面的博客将主要介绍A*算法在扩展结点&#xff08;这对于寻路时间很重要&#xff09;和总代价&#xff08;这对于保证最后解的最优性很重要&#xff09;上的最优性&#xff0c;并将淡化对A *完备性的介绍。 A* 算法流程 A*算法的流程如下[1]&#xff1a; 并定义 f ( n ) f(n…

编译openjdk12-33

编译环境 ubuntu20 Ubuntu里用户可以自行选择安装GCC或CLang来进行编译&#xff0c;但必须确保最低的版本为GCC 4.8或者CLang 3.2以上&#xff0c;官方推荐使用GCC 7.8或者CLang 9.1来完成编译。 源码 https://github.com/openjdk/jdk/tree/jdk-12%2B33 安装gcc sudo apt…

喜讯丨泰迪智能科技实力中标“健康大数据与人工智能实验室建设”项目

泰迪智能科技以健康数据分析与应用为主题的实验中心&#xff0c;为学校大健康产业大数据与人工智能应用人才培养提供载体&#xff0c;并基于培养中心根据学生专业的不同&#xff0c;提供不同的健康大数据学习资源&#xff0c;实现健康大数据技术和数据分析应用能力培养普遍提升…