Search notes:

Oracle internals: functions

Waiting for input from a client over TCP

The callstack of an Oracle User process (thread) when waiting for the next command from the client via TCP (Oracle 19c on Windows):
ntdll!NtWaitForMultipleObjects+0x14
KERNELBASE!WaitForMultipleObjectsEx+0xf0
orantcp19!snttclose+0x37d4
orantcp19!nttini+0x28642
oran19!nsbrecv+0x29a
oran19!nioqrc+0x1d4 (opikndf2()+1116?)
opitsk()+1292
opiino()+1142
opiodr()+1614
opidrv()+816
sou2o()+110
opimai_real()+174
opimai()+268
OracleThreadStart()+643
???
KERNEL32!BaseThreadInitThunk+0x14
ntdll!RtlUserThreadStart+0x21

erroep

erroep throws an exception/error. It's unclear to me how many parameters the function expects nor what they're supposed to mean.
SQL> oradebug call erroep 0 1477 0 0
ORA-01477: user data area descriptor is too large
SQL> oradebug call erroep 1555
ORA-01555: snapshot too old: rollback segment number  with name "" too small

Wait interface: kslwtbctx / kslwtectx

As per Frits Hoogland, kslwtbctx and kslwtectx are the entry points for the wait interface (Kernel service layer wait begin / end context) and the wait number is passed in the function kskthewt (register RSI).
The wait time is passed by calling the function kslwtrk_enter_wait_int (register r13).

Tracing function calls

Function calls can be traced:
SQL> oradebug setospid 14820
SQL> oradebug event sql_trace {callstack: fname opifch2} callstack(3)
SQL> oradebug tracefile_name
Then, in other session:
select …

See also

A way to find function names and the amount of parameters is using oradebug dump errorstack.
Memory addresses (in the .text segment of the executable of Oracle) can be translated to function names with oradebug translate_addr.

Index