2017-12-23 32 views
1

私のx86-64カーネルでは、.rodata ELFセクションを読み取り専用としてマップしようとしています。しかし、すべての文字列リテラルは、ファイル固有のセクションに格納されます。 .rodata.str1.8。 GCCが.rodataにすべての文字列を格納するオプションはありますか?.rodata.str.xld,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 ... 
+0

はこの何あなたのリンカスクリプトではありません(rodata *。)すべきだ! –

+1

[Ie.] –

+1

おそらくあなたは今何をしているのかを説明する適切な[mcve]を提供してください。 –

答えて

2

、使用*

関連する問題