[Nasm-bugs] [Bug 3392533] Considerations for segment support in ELF

noreply-nasm at gorcunov.org noreply-nasm at gorcunov.org
Tue Dec 18 16:18:19 PST 2018


https://bugzilla.nasm.us/show_bug.cgi?id=3392533

--- Comment #17 from H. Peter Anvin <hpa at zytor.com> ---
I came up with a simpler proposal, as some architectures already need these
kinds of targets in binutils.  This is based on the fact that ELF does support
multiple relocations at the same offset, and some architectures already rely on
this.

So:

O(S) is the base of the *output* section that contains the symbol S, which may
be a pseudo-section that will always be at a specific address (SHT_ABS?).

Given that, these are the operations we should need:

R_*_SEG16      word16    (O(S) >> 4) + A
R_*_SEGSUB16   word16    A - O(S)
R_*_SEGSUB32   word32    A - O(S)

... which seem fairly straightforward to me.

To create a typical 16-bit FAR pointer like

    dw foo, seg foo

it would end up looking like:

0  R_386_16       foo
0  R_386_SEGSUB16 foo
2  R_386_SEG16    foo

   ... or ...

    dw foo wrt there, there

0  R_386_16       foo
0  R_386_SEGSUB16 there
2  R_386_SEG16    there

... which would be the default if "foo" had been declared a member of group
"there".

-- 
You are receiving this mail because:
You are watching all bug changes.
You are on the CC list for the bug.


More information about the Nasm-bugs mailing list