【问题标题】:Why redudant attribute DW_AT_endianity with TAG_variable and TAG_base_type?为什么带有 TAG 变量和 TAG_base_type 的冗余属性 DW_AT_endianity?
【发布时间】:2018-07-27 11:17:03
【问题描述】:

我在阅读 DWARFv4 规范时遇到了属性 DW_AT_endianity。

如果我的理解有误,请纠正我。

根据规范,标签值 TAG_variable 和 TAG_base_type 中的两个都可以具有该属性。

但据我所知,当您创建 TAG_variable 时,您必须传递“类型”,它可以是 TAG_base_type(也可以是其他类型)。 所以我的问题是,如果我们在 TAG_variable 上设置 DW_AT_endianity,为什么 TAG_base_type 也支持该属性。

换句话说,每个变量都是某种类型并且可以具有该属性,那么为什么需要对类型和变量都提供属性支持呢?

【问题讨论】:

    标签: dwarf


    【解决方案1】:

    DW_AT_endianity 属性是 response to a proposed C compiler extension allowing the "creation of data in both big and little endian formats". 似乎该属性适用于基本类型(如this example)或结构/联合(如this one)。正如您所说,对简单变量及其基础类型使用相同的属性是多余的 - 请注意该属性是可选的(请参阅 DWARF 4,第 4.1.12 和 5.1 节)。

    【讨论】:

    • 感谢您的回复,这些链接非常有帮助。你能指导我看一个在 TAG_variable 中使用 DW_AT_endianity 的示例,而不是指向具有该属性的 TAG_type 吗? (提前道歉,我试过但无法使用谷歌找到它。)
    • 刚刚阅读了您的旧答案(在编辑之前发布),这消除了我的困惑,谢谢。
    • @Chirag Patel:请忽略我的答案的第一个版本,因为我给出的示例具有误导性——我引用的 DWARF 问题明确指出,其目的是标记类型 对象。我不知道DW_AT_endianity 用于变量而不是其类型的任何示例,但我认为这没有任何意义。允许数据对象和类型中的属性可能只是反映目标的扩展,以便创建灵活且面向未来的接口。然而,一种语言或编译器是否真正使用了一个特性,这取决于它的作者。
    猜你喜欢
    • 2020-04-23
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-08
    相关资源
    最近更新 更多