如何在 xtensa 架构中映射复位向量?

How to map reset vector in xtensa architecture?

我是 xtensa 架构的新手,第一步是尝试映射重置向量。 Google搜索到xtensa的Uboot端口(https://github.com/jcmvbkbc/u-boot-tensa/blob/master/arch/xtensa/cpu/start.S),代码如下;

.section .ResetVector.text, "awx"
.global _ResetVector
   _ResetVector:

 j  1f
.align 4
    2:  .long   _start
    1:  l32r    a2, 2b
       jx   a2

我从 link 那里得到了 xtensa ISA https://0x04.net/~mwk/doc/xtensa.pdf(跳转指令3.8.4节)

这是我的问题;

    j  1f   

应该把pc移动'1f',那后面的代码有什么用?
标签 2: 和 1: 有什么用?

这阻止了我进一步尝试理解其余代码。我提前感谢任何有助于更好地理解代码的帮助,以及任何关于如何在 xtensa 中映射向量的额外参考。我不确定标签是否合适,但我无法创建标签 xtensa,所以我选择了最接近的标签。

1f 不是十六进制值,它是本地标签引用。参见manual。作者只是懒惰或认为选择更好的标签名称不够重要。代码相当于:

    j  skip
.align 4
 addr:
    .long   _start
 skip:
    l32r    a2, addr
    jx   a2

因此,第一个 j 用于跳过 l32r 随后加载的嵌入数据,jx 跳转到。