eightthree has quit [Remote host closed the connection]
<jrtc27>
courmisch: .variant_cc sym
<courmisch>
jrtc27: thanks
<courmisch>
although now I'm not sure I understand what this is supposed to do exactly
<jrtc27>
avoids lazy binding so registers don't get clobbered by calling into rtld
<jrtc27>
vector registers are normally caller-saved, so rtld won't preserve them and could use them internally (though I suspect no implementation currently does)
<courmisch>
so it's for using PLT from assembler to assembler?
<jrtc27>
it means "if at link time you need to use a PLT, make sure at load time it's bound eagerly (a la -z now)"
<courmisch>
hmm, well, I'm only doing calls within a shared object, so I guess I don't need it afterall, as long as I don't accidentally make the symbols interposable
<jrtc27>
yeah if they're not interposable you can get away without it
<jrtc27>
at least until people start wanting to do range extension thunks, then it may become relevant again
<jrtc27>
so I would say you might as well add it, it's correct to add, does no harm and may be useful in future
<courmisch>
does LLVM as grok it too?
<jrtc27>
yes
<jrtc27>
(since llvm 16)
<courmisch>
hmm yeah, but I might depend on T1 and T3 not getting clobbered, which would mean PLT is no go, RTLD or not
<courmisch>
well, I don't, but it's just a lucky accident, that I passed stuff in t0, vl and vtype rather than t1 and t3
JanC_ has joined #riscv
JanC has quit [Killed (mercury.libera.chat (Nickname regained by services))]
JanC_ is now known as JanC
JanC_ has joined #riscv
JanC is now known as Guest6483
Guest6483 has quit [Killed (zinc.libera.chat (Nickname regained by services))]
JanC_ is now known as JanC
jacklsw has quit [Ping timeout: 260 seconds]
JanC_ has joined #riscv
JanC is now known as Guest9440
Guest9440 has quit [Killed (mercury.libera.chat (Nickname regained by services))]
JanC_ is now known as JanC
JanC_ has joined #riscv
JanC is now known as Guest6253
JanC_ is now known as JanC
Guest6253 has quit [Ping timeout: 272 seconds]
JanC_ has joined #riscv
JanC is now known as Guest5198
JanC_ is now known as JanC
eightthree has joined #riscv
JanC_ has joined #riscv
JanC has quit [Killed (tantalum.libera.chat (Nickname regained by services))]
JanC_ is now known as JanC
eightthree has quit [Ping timeout: 264 seconds]
eightthree has joined #riscv
billchenchina has quit [Remote host closed the connection]
BootLayer has quit [Quit: Leaving]
eightthree has quit [Remote host closed the connection]
fuwei has quit [Ping timeout: 240 seconds]
fuwei has joined #riscv
eightthree has joined #riscv
paddymahoney has quit [Ping timeout: 256 seconds]
alexghiti has quit [Ping timeout: 268 seconds]
ntwk has quit [Ping timeout: 256 seconds]
alexghiti has joined #riscv
paddymahoney has joined #riscv
stolen has quit [Quit: Connection closed for inactivity]
mlw has quit [Ping timeout: 256 seconds]
<sorear>
some of what's been posted recently looks like it could be simplified by using "vsetvli zero, zero, NEW TYPE" for the purpose intended
<sorear>
whether or not rtld uses vector registers internally, glibc's dynamic linker can call back into application-provided code that e.g. interposes malloc()
naoki has joined #riscv
naoki has quit [Client Quit]
vagrantc has joined #riscv
<sorear>
the standard ABI for _dl_runtime_resolve clobbers t0, quite unfortunately, so t0 cannot be used for cross-DSO calls
<jrtc27>
it's a bit of a mess that the ABI never codified registers that can be clobbered between caller and callee