1
私のx86-64カーネルでは、.rodata
ELFセクションを読み取り専用としてマップしようとしています。しかし、すべての文字列リテラルは、ファイル固有のセクションに格納されます。 .rodata.str1.8
。 GCCが.rodata
にすべての文字列を格納するオプションはありますか?.rodata.str.x
をld
,objdump
などを使用して.rodata
に連結することはできますか?GCCは.rodataにすべての文字列を格納します
ENTRY(_start)
SECTIONS {
. = 0xC0100000;
kernel_memory_start = .;
.boot ALIGN(8) :
{
*(.multiboot)
}
.text ALIGN(4K) : AT(ADDR(.text) - 0xC0000000)
{
kernel_text_start = .;
*(.text)
}
kernel_text_end = .;
.rodata ALIGN(4K) : AT(ADDR(.rodata) - 0xC0000000)
{
kernel_rodata_start = .;
*(.rodata)
}
kernel_rodata_end = .;
.data ALIGN(4K) : AT(ADDR(.data) - 0xC0000000)
{
kernel_data_start = .;
*(.data)
}
kernel_data_end = .;
.bss ALIGN(4K) : AT(ADDR(.bss) - 0xC0000000)
{
kernel_bss_start = .;
*(.bss)
}
kernel_bss_end = .;
kernel_memory_end = .;
}
コンパイラフラグ:
gcc -ffreestanding -mcmodel=large -fno-pic -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-3dnow -mno-80387 -fno-unwind-tables ...
リンカフラグ:あなたのリンカファイルで
ld -nostdlib -n ...
はこの何あなたのリンカスクリプトではありません(rodata *。)すべきだ! –
[Ie.] –
おそらくあなたは今何をしているのかを説明する適切な[mcve]を提供してください。 –