提交 aecdbb30 编写于 作者: R Rich Felker

fix PLT call offset in sh dlsym asm

the braf instruction's destination register is an offset from the
address of the braf instruction plus 4 (or equivalently, the address
of the next instruction after the delay slot). the code for dlsym was
incorrectly computing the offset to pass using the address of the
delay slot itself. in other places, a label was placed after the delay
slot, but I find this confusing. putting the label on the branch
instruction itself, and manually adding 4, makes it more clear which
branch the offset in the constant pool goes with.
上级 33615cd5
......@@ -4,8 +4,8 @@
.type dlsym, @function
dlsym:
mov.l L1, r0
braf r0
1: mov.l @r15, r6
1: braf r0
mov.l @r15, r6
.align 2
L1: .long __dlsym@PLT-(1b-.)
L1: .long __dlsym@PLT-(1b+4-.)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册