我正在尝试从链接脚本中获取值,并将其分配给使用类中的位域声明的变量。该类的实例是使用 section (“。data.kinfo”)属性声明的,因此该类包含在elf文件的kinfo部分中。但是,使用arm-none-eabi-gcc 4.8构建的elf文件不包含kinfo部分中的那个vaule。
源代码:
extern word_t _kinfo_descriptor;
class kinfo_t
{
public:
word_t size : 16;
word_t info_desc : 16;
};
kinfo_t kinfo __attribute__((__section__(".data.kinfo"))) = {
0x1, (word_t)&_kinfo_descriptor,
};
链接脚本:
.kinfo . :
{
*(.data.kinfo)
} > ram
_kinfo_descriptor = 0x8200;
kinfo部分:
Disassembly of section .kinfo:
f0021000 <kinfo>:
f0021000: 00000000
我在kinfo部分展示了'f0021000:82000001',但结果只是'00000000'。但是,当我使用1)常量值而不是extern _kinfo_descriptor变量或2)32位变量而不是16位位域时,在这两种情况下,该值被分配给kinfo段而没有任何问题。
例如,根据案例1,
源代码:
extern word_t _kinfo_descriptor;
class kinfo_t
{
public:
word_t size : 16;
word_t info_desc : 16;
};
kinfo_t kinfo __attribute__((__section__(".data.kinfo"))) = {
0x1, 0x8200,
};
kinfo部分:
Disassembly of section .kinfo:
f0021000 <kinfo>:
f0021000: 82000001
根据案例2,
源代码:
extern word_t _kinfo_descriptor;
class kinfo_t
{
public:
word_t size;
word_t info_desc;
};
kinfo_t kinfo __attribute__((__section__(".data.kinfo"))) = {
0x1, (word_t)&_kinfo_descriptor,
};
kinfo sectoin:
Disassembly of section .kinfo:
f0021000 <kinfo>:
f0021000: 00000001
f0021004: 00008200
所以我想知道,是否不可能将链接脚本中声明的变量分配给使用16位bitfield声明的另一个变量?只有在我使用32位变量或常数值时才可以接受吗?正如我所提到的,当前我正在使用来自LINARO的arm-none-eabi-gcc 4.8。
提前致谢