sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget(/translations/zh_CN/kbuild/gendwarfksymsmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/zh_TW/kbuild/gendwarfksymsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/it_IT/kbuild/gendwarfksymsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/ja_JP/kbuild/gendwarfksymsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/ko_KR/kbuild/gendwarfksymsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/pt_BR/kbuild/gendwarfksymsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/sp_SP/kbuild/gendwarfksymsmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(hDWARF module versioningh]hDWARF module versioning}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhB/var/lib/git/docbuild/linux/Documentation/kbuild/gendwarfksyms.rsthKubh)}(hhh](h)}(h Introductionh]h Introduction}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hXWhen CONFIG_MODVERSIONS is enabled, symbol versions for modules are typically calculated from preprocessed source code using the **genksyms** tool. However, this is incompatible with languages such as Rust, where the source code has insufficient information about the resulting ABI. With CONFIG_GENDWARFKSYMS (and CONFIG_DEBUG_INFO) selected, **gendwarfksyms** is used instead to calculate symbol versions from the DWARF debugging information, which contains the necessary details about the final module ABI.h](hWhen CONFIG_MODVERSIONS is enabled, symbol versions for modules are typically calculated from preprocessed source code using the }(hhhhhNhNubhstrong)}(h **genksyms**h]hgenksyms}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhubh tool. However, this is incompatible with languages such as Rust, where the source code has insufficient information about the resulting ABI. With CONFIG_GENDWARFKSYMS (and CONFIG_DEBUG_INFO) selected, }(hhhhhNhNubh)}(h**gendwarfksyms**h]h gendwarfksyms}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhubh is used instead to calculate symbol versions from the DWARF debugging information, which contains the necessary details about the final module ABI.}(hhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h Dependenciesh]h Dependencies}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(h?gendwarfksyms depends on the libelf, libdw, and zlib libraries.h]h?gendwarfksyms depends on the libelf, libdw, and zlib libraries.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h=Here are a few examples of how to install these dependencies:h]h=Here are a few examples of how to install these dependencies:}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh bullet_list)}(hhh](h list_item)}(hHArch Linux and derivatives:: sudo pacman --needed -S libelf zlib h](h)}(hArch Linux and derivatives::h]hArch Linux and derivatives:}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjFubh literal_block)}(h#sudo pacman --needed -S libelf zlibh]h#sudo pacman --needed -S libelf zlib}hjZsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1jXhhhKhjFubeh}(h]h ]h"]h$]h&]uh1jDhjAhhhhhNubjE)}(hZDebian, Ubuntu, and derivatives:: sudo apt install libelf-dev libdw-dev zlib1g-dev h](h)}(h!Debian, Ubuntu, and derivatives::h]h Debian, Ubuntu, and derivatives:}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjpubjY)}(h0sudo apt install libelf-dev libdw-dev zlib1g-devh]h0sudo apt install libelf-dev libdw-dev zlib1g-dev}hjsbah}(h]h ]h"]h$]h&]jhjiuh1jXhhhKhjpubeh}(h]h ]h"]h$]h&]uh1jDhjAhhhhhNubjE)}(haFedora and derivatives:: sudo dnf install elfutils-libelf-devel elfutils-devel zlib-devel h](h)}(hFedora and derivatives::h]hFedora and derivatives:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hjubjY)}(h@sudo dnf install elfutils-libelf-devel elfutils-devel zlib-develh]h@sudo dnf install elfutils-libelf-devel elfutils-devel zlib-devel}hjsbah}(h]h ]h"]h$]h&]jhjiuh1jXhhhK"hjubeh}(h]h ]h"]h$]h&]uh1jDhjAhhhhhNubjE)}(hZopenSUSE and derivatives:: sudo zypper install libelf-devel libdw-devel zlib-devel h](h)}(hopenSUSE and derivatives::h]hopenSUSE and derivatives:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK$hjubjY)}(h7sudo zypper install libelf-devel libdw-devel zlib-develh]h7sudo zypper install libelf-devel libdw-devel zlib-devel}hjsbah}(h]h ]h"]h$]h&]jhjiuh1jXhhhK&hjubeh}(h]h ]h"]h$]h&]uh1jDhjAhhhhhNubeh}(h]h ]h"]h$]h&]bullet*uh1j?hhhKhjhhubeh}(h] dependenciesah ]h"] dependenciesah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hUsageh]hUsage}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK)ubh)}(hgendwarfksyms accepts a list of object files on the command line, and a list of symbol names (one per line) in standard input::h]h~gendwarfksyms accepts a list of object files on the command line, and a list of symbol names (one per line) in standard input:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK+hjhhubjY)}(hXUsage: gendwarfksyms [options] elf-object-file ... < symbol-list Options: -d, --debug Print debugging information --dump-dies Dump DWARF DIE contents --dump-die-map Print debugging information about die_map changes --dump-types Dump type strings --dump-versions Dump expanded type strings used for symbol versions -s, --stable Support kABI stability features -T, --symtypes file Write a symtypes file -h, --help Print this messageh]hXUsage: gendwarfksyms [options] elf-object-file ... < symbol-list Options: -d, --debug Print debugging information --dump-dies Dump DWARF DIE contents --dump-die-map Print debugging information about die_map changes --dump-types Dump type strings --dump-versions Dump expanded type strings used for symbol versions -s, --stable Support kABI stability features -T, --symtypes file Write a symtypes file -h, --help Print this message}hjsbah}(h]h ]h"]h$]h&]jhjiuh1jXhhhK.hjhhubeh}(h]usageah ]h"]usageah$]h&]uh1hhhhhhhhK)ubeh}(h] introductionah ]h"] introductionah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hType information availabilityh]hType information availability}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hhhhhKhj/hhubh)}(hTo ensure the compiler emits the necessary DWARF type information in the TU where symbols are actually exported, gendwarfksyms adds a pointer to exported symbols in the `EXPORT_SYMBOL()` macro using the following macro::h](hTo ensure the compiler emits the necessary DWARF type information in the TU where symbols are actually exported, gendwarfksyms adds a pointer to exported symbols in the }(hjNhhhNhNubhtitle_reference)}(h`EXPORT_SYMBOL()`h]hEXPORT_SYMBOL()}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjNubh! macro using the following macro:}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKChj/hhubjY)}(h#define __GENDWARFKSYMS_EXPORT(sym) \ static typeof(sym) *__gendwarfksyms_ptr_##sym __used \ __section(".discard.gendwarfksyms") = &sym;h]h#define __GENDWARFKSYMS_EXPORT(sym) \ static typeof(sym) *__gendwarfksyms_ptr_##sym __used \ __section(".discard.gendwarfksyms") = &sym;}hjpsbah}(h]h ]h"]h$]h&]jhjiuh1jXhhhKHhj/hhubh)}(hXWhen a symbol pointer is found in DWARF, gendwarfksyms can use its type for calculating symbol versions even if the symbol is defined elsewhere. The name of the symbol pointer is expected to start with `__gendwarfksyms_ptr_`, followed by the name of the exported symbol.h](hWhen a symbol pointer is found in DWARF, gendwarfksyms can use its type for calculating symbol versions even if the symbol is defined elsewhere. The name of the symbol pointer is expected to start with }(hj~hhhNhNubjW)}(h`__gendwarfksyms_ptr_`h]h__gendwarfksyms_ptr_}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jVhj~ubh., followed by the name of the exported symbol.}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKMhj/hhubeh}(h]type-information-availabilityah ]h"]type information availabilityah$]h&]uh1hhhhhhhhK = enum s# = struct t# = typedef u# = unionh]hEe# = enum s# = struct t# = typedef u# = union}hjsbah}(h]h ]h"]h$]h&]jhjiuh1jXhhhKahjhhubh)}(hCType names with spaces in them are wrapped in single quotes, e.g.::h]hBType names with spaces in them are wrapped in single quotes, e.g.:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKfhjhhubjY)}(h=s#'core::result::Result'h]h=s#'core::result::Result'}hjsbah}(h]h ]h"]h$]h&]jhjiuh1jXhhhKhhjhhubh)}(hThe rest of the line contains a type string. Unlike with genksyms that produces C-style type strings, gendwarfksyms uses the same simple parsed DWARF format produced by **--dump-dies**, but with type references instead of fully expanded strings.h](hThe rest of the line contains a type string. Unlike with genksyms that produces C-style type strings, gendwarfksyms uses the same simple parsed DWARF format produced by }(hjhhhNhNubh)}(h**--dump-dies**h]h --dump-dies}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh=, but with type references instead of fully expanded strings.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKjhjhhubeh}(h]symtypes-output-formatah ]h"]symtypes output formatah$]h&]uh1hhhhhhhhKSubh)}(hhh](h)}(hMaintaining a stable kABIh]hMaintaining a stable kABI}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hhhhhKpubh)}(hXfDistribution maintainers often need the ability to make ABI compatible changes to kernel data structures due to LTS updates or backports. Using the traditional `#ifndef __GENKSYMS__` to hide these changes from symbol versioning won't work when processing object files. To support this use case, gendwarfksyms provides kABI stability features designed to hide changes that won't affect the ABI when calculating versions. These features are all gated behind the **--stable** command line flag and are not used in the mainline kernel. To use stable features during a kernel build, set `KBUILD_GENDWARFKSYMS_STABLE=1`.h](hDistribution maintainers often need the ability to make ABI compatible changes to kernel data structures due to LTS updates or backports. Using the traditional }(hjHhhhNhNubjW)}(h`#ifndef __GENKSYMS__`h]h#ifndef __GENKSYMS__}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjHubhX to hide these changes from symbol versioning won’t work when processing object files. To support this use case, gendwarfksyms provides kABI stability features designed to hide changes that won’t affect the ABI when calculating versions. These features are all gated behind the }(hjHhhhNhNubh)}(h **--stable**h]h--stable}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHubhn command line flag and are not used in the mainline kernel. To use stable features during a kernel build, set }(hjHhhhNhNubjW)}(h`KBUILD_GENDWARFKSYMS_STABLE=1`h]hKBUILD_GENDWARFKSYMS_STABLE=1}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjHubh.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKrhj7hhubh)}(hXFExamples for using these features are provided in the **scripts/gendwarfksyms/examples** directory, including helper macros for source code annotation. Note that as these features are only used to transform the inputs for symbol versioning, the user is responsible for ensuring that their changes actually won't break the ABI.h](h6Examples for using these features are provided in the }(hjhhhNhNubh)}(h"**scripts/gendwarfksyms/examples**h]hscripts/gendwarfksyms/examples}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh directory, including helper macros for source code annotation. Note that as these features are only used to transform the inputs for symbol versioning, the user is responsible for ensuring that their changes actually won’t break the ABI.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK|hj7hhubh)}(hhh](h)}(h kABI rulesh]h kABI rules}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hX1kABI rules allow distributions to fine-tune certain parts of gendwarfksyms output and thus control how symbol versions are calculated. These rules are defined in the `.discard.gendwarfksyms.kabi_rules` section of the object file and consist of simple null-terminated strings with the following structure::h](hkABI rules allow distributions to fine-tune certain parts of gendwarfksyms output and thus control how symbol versions are calculated. These rules are defined in the }(hjhhhNhNubjW)}(h#`.discard.gendwarfksyms.kabi_rules`h]h!.discard.gendwarfksyms.kabi_rules}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjubhg section of the object file and consist of simple null-terminated strings with the following structure:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubjY)}(hversion\0type\0target\0value\0h]hversion\0type\0target\0value\0}hjsbah}(h]h ]h"]h$]h&]jhjiuh1jXhhhKhjhhubh)}(hmThis string sequence is repeated as many times as needed to express all the rules. The fields are as follows:h]hmThis string sequence is repeated as many times as needed to express all the rules. The fields are as follows:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj@)}(hhh](jE)}(hl`version`: Ensures backward compatibility for future changes to the structure. Currently expected to be "1".h]h)}(hl`version`: Ensures backward compatibility for future changes to the structure. Currently expected to be "1".h](jW)}(h `version`h]hversion}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjubhg: Ensures backward compatibility for future changes to the structure. Currently expected to be “1”.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jDhjhhhhhNubjE)}(h1`type`: Indicates the type of rule being applied.h]h)}(hj$h](jW)}(h`type`h]htype}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jVhj&ubh+: Indicates the type of rule being applied.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj"ubah}(h]h ]h"]h$]h&]uh1jDhjhhhhhNubjE)}(h~`target`: Specifies the target of the rule, typically the fully qualified name of the DWARF Debugging Information Entry (DIE).h]h)}(h~`target`: Specifies the target of the rule, typically the fully qualified name of the DWARF Debugging Information Entry (DIE).h](jW)}(h`target`h]htarget}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjKubhv: Specifies the target of the rule, typically the fully qualified name of the DWARF Debugging Information Entry (DIE).}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjGubah}(h]h ]h"]h$]h&]uh1jDhjhhhhhNubjE)}(h&`value`: Provides rule-specific data. h]h)}(h%`value`: Provides rule-specific data.h](jW)}(h`value`h]hvalue}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjqubh: Provides rule-specific data.}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjmubah}(h]h ]h"]h$]h&]uh1jDhjhhhhhNubeh}(h]h ]h"]h$]h&]j-uh1j?hhhKhjhhubh)}(h[The following helper macros, for example, can be used to specify rules in the source code::h]hZThe following helper macros, for example, can be used to specify rules in the source code:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubjY)}(hX#define ___KABI_RULE(hint, target, value) \ static const char __PASTE(__gendwarfksyms_rule_, \ __COUNTER__)[] __used __aligned(1) \ __section(".discard.gendwarfksyms.kabi_rules") = \ "1\0" #hint "\0" target "\0" value #define __KABI_RULE(hint, target, value) \ ___KABI_RULE(hint, #target, #value)h]hX#define ___KABI_RULE(hint, target, value) \ static const char __PASTE(__gendwarfksyms_rule_, \ __COUNTER__)[] __used __aligned(1) \ __section(".discard.gendwarfksyms.kabi_rules") = \ "1\0" #hint "\0" target "\0" value #define __KABI_RULE(hint, target, value) \ ___KABI_RULE(hint, #target, #value)}hjsbah}(h]h ]h"]h$]h&]jhjiuh1jXhhhKhjhhubh)}(hCurrently, only the rules discussed in this section are supported, but the format is extensible enough to allow further rules to be added as need arises.h]hCurrently, only the rules discussed in this section are supported, but the format is extensible enough to allow further rules to be added as need arises.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hhh](h)}(hManaging definition visibilityh]hManaging definition visibility}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hXA declaration can change into a full definition when additional includes are pulled into the translation unit. This changes the versions of any symbol that references the type even if the ABI remains unchanged. As it may not be possible to drop includes without breaking the build, the `declonly` rule can be used to specify a type as declaration-only, even if the debugging information contains the full definition.h](hXA declaration can change into a full definition when additional includes are pulled into the translation unit. This changes the versions of any symbol that references the type even if the ABI remains unchanged. As it may not be possible to drop includes without breaking the build, the }(hjhhhNhNubjW)}(h `declonly`h]hdeclonly}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjubhx rule can be used to specify a type as declaration-only, even if the debugging information contains the full definition.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h.The rule fields are expected to be as follows:h]h.The rule fields are expected to be as follows:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj@)}(hhh](jE)}(h`type`: "declonly"h]h)}(hjh](jW)}(h`type`h]htype}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jVhj ubh: “declonly”}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jDhjhhhhhNubjE)}(he`target`: The fully qualified name of the target data structure (as shown in **--dump-dies** output).h]h)}(he`target`: The fully qualified name of the target data structure (as shown in **--dump-dies** output).h](jW)}(h`target`h]htarget}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jVhj/ubhE: The fully qualified name of the target data structure (as shown in }(hj/hhhNhNubh)}(h**--dump-dies**h]h --dump-dies}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/ubh output).}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj+ubah}(h]h ]h"]h$]h&]uh1jDhjhhhhhNubjE)}(h `value`: This field is ignored. h]h)}(h`value`: This field is ignored.h](jW)}(h`value`h]hvalue}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjgubh: This field is ignored.}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjcubah}(h]h ]h"]h$]h&]uh1jDhjhhhhhNubeh}(h]h ]h"]h$]h&]jjuh1j?hhhKhjhhubh)}(hubah}(h]h ]h"]h$]h&]uh1jDhjhhhhhNubjE)}(h+`value`: Integer value used for the field. h]h)}(h*`value`: Integer value used for the field.h](jW)}(h`value`h]hvalue}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjzubh#: Integer value used for the field.}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjvubah}(h]h ]h"]h$]h&]uh1jDhjhhhhhNubeh}(h]h ]h"]h$]h&]jjuh1j?hhhKhjhhubh)}(h`, but we can't hide the increase in structure size. The `byte_size` rule allows us to override the structure size used for symbol versioning.h](hWTo append new members, we can hide them from symbol versioning as described in section }(hjhhhNhNubh)}(h&:ref:`Hiding members `h]hinline)}(hjh]hHiding members}(hj!hhhNhNubah}(h]h ](xrefstdstd-refeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdockbuild/gendwarfksyms refdomainj,reftyperef refexplicitrefwarn reftargethiding_membersuh1hhhhMhjubh:, but we can’t hide the increase in structure size. The }(hjhhhNhNubjW)}(h `byte_size`h]h byte_size}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjubhJ rule allows us to override the structure size used for symbol versioning.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(h.The rule fields are expected to be as follows:h]h.The rule fields are expected to be as follows:}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hjhhubj@)}(hhh](jE)}(h`type`: "byte_size"h]h)}(hjoh](jW)}(h`type`h]htype}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjqubh: “byte_size”}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM hjmubah}(h]h ]h"]h$]h&]uh1jDhjjhhhhhNubjE)}(he`target`: The fully qualified name of the target data structure (as shown in **--dump-dies** output).h]h)}(he`target`: The fully qualified name of the target data structure (as shown in **--dump-dies** output).h](jW)}(h`target`h]htarget}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjubhE: The fully qualified name of the target data structure (as shown in }(hjhhhNhNubh)}(h**--dump-dies**h]h --dump-dies}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh output).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM hjubah}(h]h ]h"]h$]h&]uh1jDhjjhhhhhNubjE)}(hK`value`: A positive decimal number indicating the structure size in bytes. h]h)}(hJ`value`: A positive decimal number indicating the structure size in bytes.h](jW)}(h`value`h]hvalue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjubhC: A positive decimal number indicating the structure size in bytes.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jDhjjhhhhhNubeh}(h]h ]h"]h$]h&]jjuh1j?hhhM hjhhubh)}(h