Function dmd.backend.machobj.dwarf_eh_frame_fixup
Generate LSDA and PC_Begin fixups in the _eh_frame segment encoded as DW_EH_PE_pcrel|ptr. 64 bits LSDA [0] address x0071 symbolnum 6 pcrel 0 length 3 extern 1 type 5 RELOC_SUBTRACTOR _Z3foov.eh [1] address x0071 symbolnum 1 pcrel 0 length 3 extern 1 type 0 RELOC_UNSIGNED GCC_except_table2
extern(C++) int dwarf_eh_frame_fixup
(
int dfseg,
ulong offset,
dmd .backend .cc .Symbol* s,
ulong val,
dmd .backend .cc .Symbol* fdesym
);
PC Begin
[2] address x0060 symbolnum 6 pcrel 0 length 3 extern 1 type 5 RELOC_SUBTRACTOR _Z3foov.eh [3] address x0060 symbolnum 5 pcrel 0 length 3 extern 1 type 0 RELOC_UNSIGNED _Z3foov Want the result to be &s - pc The fixup yields &s - &fdesym + value Therefore value = &fdesym - pc which is the same as fdesym.Soffset - offset 32 bits LSDA [6] address x0028 pcrel 0 length 2 value x0 type 4 RELOC_LOCAL_SECTDIFF [7] address x0000 pcrel 0 length 2 value x1dc type 1 RELOC_PAIR PC_Begin [8] address x0013 pcrel 0 length 2 value x228 type 4 RELOC_LOCAL_SECTDIFF [9] address x0000 pcrel 0 length 2 value x1c7 type 1 RELOC_PAIR
Parameters
Name | Description |
---|---|
dfseg | segment of where to write fixup (eh_frame segment) |
offset | offset of where to write fixup (eh_frame offset) |
s | fixup is a reference to this Symbol (GCC_except_table%d or function_name) |
val | displacement from s |
fdesym | function_name.eh |
Returns
number of bytes written at seg:offset