只有 1 个参数和偏移量的 JALR 有什么作用?

What does JALR with only 1 argument and offset do?

所以我正在查看一些 riscv 汇编代码,基本上是想找出问题所在。 但是,我偶然发现了以下代码:

 80001a2:   00000097            auipc   ra,0x0
 80001a6:   62e080e7            jalr    1582(ra) # 80007d0 <memset>

我想我明白auipc,即将电脑添加到我的return地址,但是我不明白这里的jalr。 当我查找它时,它说用法是:
jalr xD, xL(偏移量)
我在我的代码中猜测 (ra) 是偏移量,但是这里的 1582 是什么?来源?目的地?两个?

大概反汇编程序假定正常的默认目标寄存器 (ra) 将 return 地址写入其中,因此保留隐式。

所以 1582(ra) 将是它显示目标地址计算的方式,例如加载或存储的寻址模式,offset(reg)。 RISC-V jalr 支持一些立即偏移位,使得可以使用 auipc 的 2 指令序列调用任何目标地址以获得 20 位的相对偏移,并且 jalr供应其他 12 个。这很清楚这里发生了什么。 Understanding the auipc+jalr sequence used for function calls

如果要double-check,自己拆机

auipc 指令中的 0x0 偏移量可能是由于 memset 在附近结束。这些看起来像“真实”地址,所以它不是一个 unlinked .o。我猜这是一个 statically-linked 可执行文件?直到 link 时间才知道 memset 如此接近的事实;太晚了我猜优化到 jal 相对分支。)