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

More...
nothrow @safe @trusted
int
dwarf_eh_frame_fixup
(
int dfseg
,
targ_size_t offset
,,
targ_size_t val
,)

Parameters

dfseg int

segment of where to write fixup (eh_frame segment)

offset targ_size_t

offset of where to write fixup (eh_frame offset)

s Symbol*

fixup is a reference to this Symbol (GCC_except_table%d or function_name)

val targ_size_t

displacement from s

fdesym Symbol*

function_name.eh

Return Value

Type: int

number of bytes written at seg:offset

Detailed Description

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

Meta