Changeset 6677acb in mainline


Ignore:
Timestamp:
2024-01-14T15:09:08Z (4 months ago)
Author:
Jiří Zárevúcky <zarevucky.jiri@…>
Branches:
master
Children:
3b68542
Parents:
5907aa4
Message:

Emit .text/.data/.eh_frame sections in kernel ELF files

Gives tools like objdump an easier time interpreting contents of
the file, and allows kernel to find .eh_frame_hdr since the linker
emits a program header for it when it's present under the standard
name.

Location:
kernel/arch
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/amd64/_link.ld.in

    r5907aa4 r6677acb  
    2323        }
    2424
    25         .mapped (PA2KA(BOOT_OFFSET) + SIZEOF_HEADERS + SIZEOF(.unmapped)) : AT (BOOT_OFFSET + SIZEOF_HEADERS + SIZEOF(.unmapped)) {
     25        .text (PA2KA(BOOT_OFFSET) + SIZEOF_HEADERS + SIZEOF(.unmapped)) : AT (BOOT_OFFSET + SIZEOF_HEADERS + SIZEOF(.unmapped)) {
    2626                ktext_start = .;
    2727                *(.text .text.*);
    2828                ktext_end = .;
     29        }
    2930
     31        /* stack unwinding data */
     32        .eh_frame_hdr : {
     33                eh_frame_hdr_start = .;
     34                *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*);
     35                eh_frame_hdr_end = .;
     36        }
     37        .eh_frame : {
     38                eh_frame_start = .;
     39                KEEP(*(.eh_frame .eh_frame.*));
     40                eh_frame_end = .;
     41        }
     42
     43        .data : {
    3044                kdata_start = .;
    31                 *(.data .data.*);              /* initialized data */
    32                 *(.rodata .rodata.*);
    33                 *(.eh_frame .eh_frame.*);      /* stack unwinding data */
    34                 *(.eh_frame_hdr .eh_frame_hdr.*);
    35                 *(COMMON);      /* global variables */
     45                *(.rodata .rodata.*);  /* read-only global variables */
     46                *(.data .data.*);      /* non-zero initialized global variables */
    3647
    37                 /* bss can't be omitted from the ELF image. */
    38                 *(.bss .bss.*);        /* uninitialized static variables */
     48                /*
     49                 * When .bss is not physically present in the ELF file (MemSz > FileSz)
     50                 * the kernel crashes during early boot. Not sure which part of the
     51                 * boot process is to blame, for now just keep .bss packaged with .data
     52                 * so that FileSz == MemSz.
     53                 */
     54
     55                 *(.bss .bss.*);        /* uninitialized global variables */
     56                *(COMMON);             /* non-`static` global variables without an extern declaration */
    3957                kdata_end = .;
    4058        }
  • kernel/arch/arm32/_link.ld.in

    r5907aa4 r6677acb  
    2626        kernel_load_address = .;
    2727        . = . + SIZEOF_HEADERS;
     28
    2829        .text : {
    2930                ktext_start = .;
     
    3132                ktext_end = .;
    3233        }
     34
     35        /* stack unwinding data */
     36        .eh_frame_hdr : {
     37                eh_frame_hdr_start = .;
     38                *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*);
     39                eh_frame_hdr_end = .;
     40        }
     41
     42        .eh_frame : {
     43                eh_frame_start = .;
     44                KEEP(*(.eh_frame .eh_frame.*));
     45                eh_frame_end = .;
     46        }
     47
    3348        .data : {
    3449                kdata_start = .;
     
    3853
    3954                *(.rodata .rodata.*);
    40                 *(.eh_frame .eh_frame.*);       /* stack unwinding data */
    41                 *(.eh_frame_hdr .eh_frame_hdr.*);
    4255                *(.sdata .sdata.*);
    43         }
    44         .sbss : {
    4556                *(.sbss .sbss.*);
    4657                *(.scommon .scommon.*);
     58                kdata_end = .;
    4759        }
    48 
    49         kdata_end = .;
    5060
    5161        .comment 0 : { *(.comment); }
  • kernel/arch/arm64/_link.ld.in

    r5907aa4 r6677acb  
    1919        kernel_load_address = LOAD_ADDRESS_V;
    2020
    21         .image (LOAD_ADDRESS_V + SIZEOF_HEADERS) : AT (LOAD_ADDRESS_P + SIZEOF_HEADERS) {
     21        .text (LOAD_ADDRESS_V + SIZEOF_HEADERS) : AT (LOAD_ADDRESS_P + SIZEOF_HEADERS) {
    2222                . = ALIGN(16);
    2323                ktext_start = .;
     
    2525                *(.text .text.*);
    2626                ktext_end = .;
     27        }
    2728
     29        /* stack unwinding data */
     30        .eh_frame_hdr : {
     31                eh_frame_hdr_start = .;
     32                *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*);
     33                eh_frame_hdr_end = .;
     34        }
     35
     36        .eh_frame : {
     37                eh_frame_start = .;
     38                KEEP(*(.eh_frame .eh_frame.*));
     39                eh_frame_end = .;
     40        }
     41
     42        .data : {
    2843                kdata_start = .;
    2944                KEEP(*(K_DATA_START))
     45                *(.rodata .rodata.*);
    3046                *(.data .data.*);                       /* initialized data */
    3147                *(.bss .bss.*);                        /* uninitialized static variables */
    3248                *(COMMON);                      /* global variables */
    33 
    34                 *(.rodata .rodata.*);
    35                 *(.eh_frame .eh_frame.*);       /* stack unwinding data */
    36                 *(.eh_frame_hdr .eh_frame_hdr.*);
    37 
    3849                kdata_end = .;
    3950        }
  • kernel/arch/ia32/_link.ld.in

    r5907aa4 r6677acb  
    2222        }
    2323
    24         .mapped (PA2KA(BOOT_OFFSET) + SIZEOF_HEADERS + SIZEOF(.unmapped)): AT (BOOT_OFFSET + SIZEOF_HEADERS + SIZEOF(.unmapped)) {
     24        .text (PA2KA(BOOT_OFFSET) + SIZEOF_HEADERS + SIZEOF(.unmapped)): AT (BOOT_OFFSET + SIZEOF_HEADERS + SIZEOF(.unmapped)) {
    2525                ktext_start = .;
    2626                *(.text .text.*);
    2727                ktext_end = .;
     28        }
    2829
     30        /* stack unwinding data */
     31        .eh_frame_hdr : {
     32                eh_frame_hdr_start = .;
     33                *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*);
     34                eh_frame_hdr_end = .;
     35        }
     36        .eh_frame : {
     37                eh_frame_start = .;
     38                KEEP(*(.eh_frame .eh_frame.*));
     39                eh_frame_end = .;
     40        }
     41
     42        .data : {
    2943                kdata_start = .;
    30                 *(.data .data.*);               /* initialized data */
    31                 *(.rodata .rodata.*);
    32                 *(.eh_frame .eh_frame.*);       /* stack unwinding data */
    33                 *(.eh_frame_hdr .eh_frame_hdr.*);
    34                 *(COMMON);              /* global variables */
     44                *(.rodata .rodata.*);  /* read-only global variables */
     45                *(.data .data.*);      /* non-zero initialized global variables */
    3546
    36                 /* bss can't be omitted from the ELF image. */
    37                 *(.bss .bss.*);                /* uninitialized static variables */
     47                /*
     48                 * When .bss is not physically present in the ELF file (MemSz > FileSz)
     49                 * the kernel crashes during early boot. Not sure which part of the
     50                 * boot process is to blame, for now just keep .bss packaged with .data
     51                 * so that FileSz == MemSz.
     52                 */
     53
     54                 *(.bss .bss.*);        /* uninitialized global variables */
     55                *(COMMON);             /* non-`static` global variables without an extern declaration */
    3856                kdata_end = .;
    3957        }
  • kernel/arch/ia64/_link.ld.in

    r5907aa4 r6677acb  
    1515        kernel_load_address = LOAD_ADDRESS_V;
    1616
    17         .image (LOAD_ADDRESS_V + SIZEOF_HEADERS): AT (LOAD_ADDRESS_P + SIZEOF_HEADERS) {
     17        .text (LOAD_ADDRESS_V + SIZEOF_HEADERS): AT (LOAD_ADDRESS_P + SIZEOF_HEADERS) {
    1818                . = ALIGN(16);
    1919                ktext_start = .;
     
    2121                *(.text .text.*)
    2222                ktext_end = .;
     23        }
    2324
     25        /* stack unwinding data */
     26        .eh_frame_hdr : {
     27                eh_frame_hdr_start = .;
     28                *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*);
     29                eh_frame_hdr_end = .;
     30        }
     31
     32        .eh_frame : {
     33                eh_frame_start = .;
     34                KEEP(*(.eh_frame .eh_frame.*));
     35                eh_frame_end = .;
     36        }
     37       
     38        .data : {
    2439                kdata_start = .;
    2540                KEEP(*(K_DATA_START));
    2641                *(.rodata .rodata.*);
    27                 *(.eh_frame .eh_frame.*);       /* stack unwinding data */
    28                 *(.eh_frame_hdr .eh_frame_hdr.*);
    2942                *(.opd)
    3043                *(.data .data.*)
  • kernel/arch/mips32/_link.ld.in

    r5907aa4 r6677acb  
    3333                ktext_end = .;
    3434        }
     35
     36        /* stack unwinding data */
     37        .eh_frame_hdr : {
     38                eh_frame_hdr_start = .;
     39                *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*);
     40                eh_frame_hdr_end = .;
     41        }
     42
     43        .eh_frame : {
     44                eh_frame_start = .;
     45                KEEP(*(.eh_frame .eh_frame.*));
     46                eh_frame_end = .;
     47        }
     48
    3549        .data : {
    3650                kdata_start = .;
    3751                *(.data .data.*);                       /* initialized data */
    3852                *(.rodata .rodata.*);
    39                 *(.eh_frame .eh_frame.*);       /* stack unwinding data */
    40                 *(.eh_frame_hdr .eh_frame_hdr.*);
    4153                *(.sdata .sdata.*);
    4254                *(.reginfo);
     
    4658                *(COMMON);                      /* global variables */
    4759        }
     60
    4861        _gp = . + 0x8000;
    4962        .lit8 : { *(.lit8) }
  • kernel/arch/ppc32/_link.ld.in

    r5907aa4 r6677acb  
    2525        }
    2626
    27         .mapped PA2KA(BOOT_OFFSET): AT (BOOT_OFFSET) {
     27        .text PA2KA(BOOT_OFFSET): AT (BOOT_OFFSET) {
    2828                ktext_start = .;
    2929                KEEP(*(K_TEXT_START));
    3030                *(.text .text.*);
    3131                ktext_end = .;
     32        }
    3233
     34        /* stack unwinding data */
     35        .eh_frame_hdr : {
     36                eh_frame_hdr_start = .;
     37                *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*);
     38                eh_frame_hdr_end = .;
     39        }
     40
     41        .eh_frame : {
     42                eh_frame_start = .;
     43                KEEP(*(.eh_frame .eh_frame.*));
     44                eh_frame_end = .;
     45        }
     46
     47        .data : {
    3348                kdata_start = .;
    3449                KEEP(*(K_DATA_START));
    3550                *(.rodata .rodata.*);
    36                 *(.eh_frame .eh_frame.*);       /* stack unwinding data */
    37                 *(.eh_frame_hdr .eh_frame_hdr.*);
    3851                *(.data .data.*);       /* initialized data */
    3952                *(.sdata .sdata.*);
  • kernel/arch/riscv64/_link.ld.in

    r5907aa4 r6677acb  
    1616        kernel_load_address = PA2KA(BOOT_OFFSET);
    1717
    18         .image (PA2KA(BOOT_OFFSET) + SIZEOF_HEADERS) : AT (BOOT_OFFSET + SIZEOF_HEADERS) {
     18        .text (PA2KA(BOOT_OFFSET) + SIZEOF_HEADERS) : AT (BOOT_OFFSET + SIZEOF_HEADERS) {
    1919                ktext_start = .;
    2020                KEEP(*(K_TEXT_START));
    2121                *(.text .text.*);
    2222                ktext_end = .;
     23        }
    2324
     25        /* stack unwinding data */
     26        .eh_frame_hdr : {
     27                eh_frame_hdr_start = .;
     28                *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*);
     29                eh_frame_hdr_end = .;
     30        }
     31
     32        .eh_frame : {
     33                eh_frame_start = .;
     34                KEEP(*(.eh_frame .eh_frame.*));
     35                eh_frame_end = .;
     36        }
     37
     38        .data : {
    2439                kdata_start = .;
    2540                *(.data .data.*);                       /* initialized data */
    2641                *(.rodata .rodata.*);
    27                 *(.eh_frame .eh_frame.*);       /* stack unwinding data */
    28                 *(.eh_frame_hdr .eh_frame_hdr.*);
    2942                *(.sdata .sdata.*);
    3043                *(.sbss .sbss.*);
  • kernel/arch/sparc64/_link.ld.in

    r5907aa4 r6677acb  
    1414        kernel_load_address = VMA;
    1515
    16         .image (VMA + SIZEOF_HEADERS): AT (LMA + SIZEOF_HEADERS) {
     16        .text (VMA + SIZEOF_HEADERS): AT (LMA + SIZEOF_HEADERS) {
    1717                ktext_start = .;
    1818                KEEP(*(K_TEXT_START));
    1919                *(.text .text.*);
    2020                ktext_end = .;
     21        }
    2122
     23        /* stack unwinding data */
     24        .eh_frame_hdr : {
     25                eh_frame_hdr_start = .;
     26                *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*);
     27                eh_frame_hdr_end = .;
     28        }
     29
     30        .eh_frame : {
     31                eh_frame_start = .;
     32                KEEP(*(.eh_frame .eh_frame.*));
     33                eh_frame_end = .;
     34        }
     35
     36        .data : {
    2237                kdata_start = .;
    2338                KEEP(*(K_DATA_START));
    2439                *(.rodata .rodata.*);
    25                 *(.eh_frame .eh_frame.*);       /* stack unwinding data */
    26                 *(.eh_frame_hdr .eh_frame_hdr.*);
    2740                *(.data .data.*);                   /* initialized data */
    2841                *(.sdata .sdata.*);
Note: See TracChangeset for help on using the changeset viewer.