• Kai Germaschewski's avatar
    Consolidate read-only sections in arch/*/vmlinux.lds.S · d6699e96
    Kai Germaschewski authored
    It's annoying having to touch 20+ arch vmlinux.lds.S file for every
    new section introduced, just because they all duplicate the same
    statements. Since we preprocess vmlinux.lds.S anyway, let's
    #include <asm-generic/vmlinux.lds.h> and share the common statements.
    
    This is a first step in consolidating most of the read-only sections.
    d6699e96
vmlinux.lds.S 2.61 KB
#include <linux/config.h>
#include <asm-generic/vmlinux.lds.h>

OUTPUT_FORMAT("elf64-alpha")
ENTRY(__start)
PHDRS { kernel PT_LOAD ; }
jiffies = jiffies_64;
SECTIONS
{
#ifdef CONFIG_ALPHA_LEGACY_START_ADDRESS
  . = 0xfffffc0000310000;
#else
  . = 0xfffffc0000810000;
#endif

  .text : {
	_text = .;
	*(.text)
	_etext = .;
  } :kernel

  /* Exception table */
  __ex_table ALIGN(16) : {
	__start___ex_table = .;
	*(__ex_table)
	__stop___ex_table = .;
  }

  RODATA

  /* Startup code */
  .init.text ALIGN(8192) : {
	__init_begin = .;
	*(.init.text)
  }
  .init.data : { *(.init.data) }

  .init.setup ALIGN(16): {
	__setup_start = .;
	*(.init.setup)
	__setup_end = .;
  }

  __param ALIGN(8): {
	__start___param = .;
	*(__param)
	__stop___param = .;
  }

  .initcall.init ALIGN(8): {
	__initcall_start = .;
	*(.initcall1.init) 
	*(.initcall2.init) 
	*(.initcall3.init) 
	*(.initcall4.init) 
	*(.initcall5.init) 
	*(.initcall6.init) 
	*(.initcall7.init)
	__initcall_end = .;
  }

  .init.ramfs ALIGN(8192): {
	__initramfs_start = .;
	*(.init.ramfs)
	__initramfs_end = .;
  }

  .data.percpu ALIGN(64): {
	__per_cpu_start = .;
	*(.data.percpu)
	__per_cpu_end = .;
  }

  /* The initial task and kernel stack */
  .data.init_thread ALIGN(2*8192) : {
	__init_end = .;
	*(.data.init_thread)
  }

  /* Global data */
  .data.page_aligned ALIGN(8192) : {
	_data = .;
	*(.data.page_aligned) 
  }
  .data.cacheline_aligned : { *(.data.cacheline_aligned) }
  .data : { *(.data) CONSTRUCTORS }
  .got : { *(.got) }
  .sdata : {
	*(.sdata)
	_edata = .;
  }

  .sbss : {
	__bss_start = .;
	*(.sbss) *(.scommon)
  }
  .bss : {
	*(.bss) *(COMMON)
	__bss_stop = .;
	_end = .;
  }

  .mdebug 0 : { *(.mdebug) }
  .note 0 : { *(.note) }
  .comment 0 : { *(.comment) }

  /* DWARF 1 */
  .debug          0 : { *(.debug) }
  .line           0 : { *(.line) }
  /* GNU DWARF 1 extensions */
  .debug_srcinfo  0 : { *(.debug_srcinfo) }
  .debug_sfnames  0 : { *(.debug_sfnames) }
  /* DWARF 1.1 and DWARF 2 */
  .debug_aranges  0 : { *(.debug_aranges) }
  .debug_pubnames 0 : { *(.debug_pubnames) }
  /* DWARF 2 */
  .debug_info     0 : { *(.debug_info) }
  .debug_abbrev   0 : { *(.debug_abbrev) }
  .debug_line     0 : { *(.debug_line) }
  .debug_frame    0 : { *(.debug_frame) }
  .debug_str      0 : { *(.debug_str) }
  .debug_loc      0 : { *(.debug_loc) }
  .debug_macinfo  0 : { *(.debug_macinfo) }
  /* SGI/MIPS DWARF 2 extensions */
  .debug_weaknames 0 : { *(.debug_weaknames) }
  .debug_funcnames 0 : { *(.debug_funcnames) }
  .debug_typenames 0 : { *(.debug_typenames) }
  .debug_varnames  0 : { *(.debug_varnames) }

  /DISCARD/ : { *(.exit.text) *(.exit.data) *(.exitcall.exit) }
}