Code Monkey home page Code Monkey logo

Comments (5)

jim-wilson avatar jim-wilson commented on July 20, 2024

It might be helpful to look at other psABIs, that had actual tech writers involved. For instance, you can find the MIPS one here
http://refspecs.linux-foundation.org/elf/mipsabi.pdf
and page 4-16 is where the relocation info starts. This one actually explains what the symbols mean, and they likely mean the same thing for RISC-V. There are a bunch of other ones in this elf dir also.

Yes, the R_RISCV_SUB32 doc is wrong. The symbol should be subtracted. Also, this is what bfd calls an inplace reloc, it reads the old value from the target and then subtracts the symbol and addend from it. R_RISCV_ADD32 is also an inplace reloc.

The idea here is that we can do symbol subtraction by having a pair of relocs, R_RISCV_ADD32 and R_RISCV_SUB32. R_RISCV_ADD32 reads the old value, adds its symbol value and stores it back.
R_RISCV_SUB32 reads the old value, subtracts its symbol value and stores it back. The starting value at the target should be 0, and the two relocs can occur and be processed in either order, and we still get the right result at the end.

Inplace relocs like this aren't very common for other targets, so it might be hard to find a good example we can copy from to improve the documentation.

from riscv-elf-psabi-doc.

luismarques avatar luismarques commented on July 20, 2024

@jim-wilson Thanks once again for a thoughtful reply (you spoil us!). I think some minimal extra documentation such as stating what the one letter variables stand for and a quick note about the inplace relocs would significantly improve the clarity for not much effort. But perhaps someone with more experience should help review the rest of the relocations to check their correctness, point out any subtle semantics, corner cases, etc. --- the kind of stuff that always seems to pop up when things are specified precisely.

from riscv-elf-psabi-doc.

luismarques avatar luismarques commented on July 20, 2024

stating what the one letter variables stand for and a quick note about the inplace relocs would significantly improve the clarity for not much effort.

Actually the names are already documented in the doc but not in a very "semantic" way. Something that made it clear that, say, the addend would be an offset, the symbol would be the address of the symbol, etc. would have made it 100% clear that the problem was a bug in the R_RISCV_SUB* documentation entries. The way things currently are there wasn't enough redundancy for a reliable error correction code ;-).

from riscv-elf-psabi-doc.

jim-wilson avatar jim-wilson commented on July 20, 2024

FYI pull request #83 updated the ADDx and SUBx reloc docs to mention that they use the old value in the calculation. This stuff could still use some improvement from a tech writer though.

from riscv-elf-psabi-doc.

MaskRay avatar MaskRay commented on July 20, 2024

The description of R_RISCV_ADD* and R_RISCV_SUB* should probably say that they are intended for local labels.

# snippet extracted from llvm/test/MC/RISCV/fixups-expr.s
.globl G1
.globl G2

.data
.dword G2-G1
~/projects/binutils-gdb/riscv/gas/as-new a.s -o a.o
~/projects/binutils-gdb/riscv/ld/ld-new a.o -shared # succeeded

G1 and G2 are preemptably in -shared mode, but it appears binutils ld.bfd doesn't give an error/warning.

from riscv-elf-psabi-doc.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.