链接描述文件中的语法错误

时间:2016-09-01 10:53:15

标签: gcc assembly linker linker-errors linker-scripts

我在第8行有一个语法错误 我已阅读有关语法的GNU docs并设法解决语法错误但遇到了不兼容问题 这是我的剧本:

ENTRY (loader)
OUTPUT ("kernel.bin")

addr = 0x100000;
SECTIONS
{
        .text addr: 
        ALIGN(0x1000)
        {
            *(.text*);
            *(.rodata*);
        }

        .data:
        ALIGN(0x1000)
        {
            *(.data*);
        }

        .bss:
        ALIGN(0x1000)
        {
            *(.bss*);
        }
}

请原谅我,因为我只想尝试使用Hello World样本启动OSDeving

2 个答案:

答案 0 :(得分:1)

在将内核移动到上半部分之前,这是我的链接器脚本的样子:

OUTPUT_FORMAT("elf32-i386","elf32-i386","elf32-i386")
OUTPUT_ARCH(i386)

ENTRY(entry)
SECTIONS
{
    . = 0x00100000;
    start = .;
    .text : 
    {
        *(.text)
        . = ALIGN(4096);
    }

    .data :
    {
        *(.data)
        *(.rodata)
        . = ALIGN(4096);
    }

    .bss :
    {
        *(.bss)
        *(stack_bottom)
        *(stack_top)
        . = ALIGN(4096);
    }
    end = .;
    kernel_end = .;
}

我认为问题是“。text”和冒号之间缺乏空间。我曾经给过我一个不同项目的错误。 如果您想指定每个部分的位置,请执行以下操作:

.text : AT(ADDR(.text) - 0xC0000000)
    {
        *(.text)
        . = ALIGN(4096);
    }

答案 1 :(得分:0)

尝试为这样的部分分配地址:

ENTRY (loader)
OUTPUT ("kernel.bin")

SECTIONS
{
        . = 0x100000;
        .text: 
        ALIGN(0x1000)
        {
            *(.text*);
            *(.rodata*);
        }

        .data:
        ALIGN(0x1000)
        {
            *(.data*);
        }

        .bss:
        ALIGN(0x1000)
        {
            *(.bss*);
        }
}