View source code
Display the source code in rt/dwarfeh.d from which this page was generated on github.
Report a bug
If you spot a problem with this page, click here to create a Bugzilla issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. If you'd like to make larger changes you may want to consider using local clone.

Function rt.dwarfeh.scanLSDA

Read and extract information from the LSDA (aka gcc_except_table section). The dmd Call Site Table is structurally different from other implementations. It is organized as nested ranges, and one ip can map to multiple ranges. The most nested candidate is selected when searched. Other implementations have one candidate per ip.

rt.dwarfeh.LsdaResult scanLSDA (
  const(ubyte)* lsda,
  ulong ip,
  ulong exceptionClass,
  bool cleanupsOnly,
  bool preferHandler,
  rt.unwind._Unwind_Exception* exceptionObject,
  out ulong landingPad,
  out int handler
);

Parameters

NameDescription
lsda pointer to LSDA table
ip offset from start of function at which exception happened
exceptionClass which language threw the exception
cleanupsOnly only look for cleanups
preferHandler if a handler encloses a cleanup, prefer the handler
exceptionObject language specific exception information
landingPad set to landing pad
handler set to index of which catch clause was matched

Returns

LsdaResult

See Also

http

//reverseengineering.stackexchange.com/questions/6311/how-to-recover-the-exception-info-from-gcc-except-table-and-eh-handle-sections

http

//www.airs.com/blog/archives/464

https

//anarcheuz.github.io/2015/02/15/ELF%20internals%20part%202%20-%20exception%20handling/

Authors

Walter Bright

License

Distributed under the Boost Software License 1.0. (See accompanying file LICENSE)