vmlinux.lds.S 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. /* ld script for sparc32/sparc64 kernel */
  2. #include <asm-generic/vmlinux.lds.h>
  3. #include <asm/page.h>
  4. #include <asm/thread_info.h>
  5. #ifdef CONFIG_SPARC32
  6. #define INITIAL_ADDRESS 0x10000 + SIZEOF_HEADERS
  7. #define TEXTSTART 0xf0004000
  8. #define SMP_CACHE_BYTES_SHIFT 5
  9. #else
  10. #define SMP_CACHE_BYTES_SHIFT 6
  11. #define INITIAL_ADDRESS 0x4000
  12. #define TEXTSTART 0x0000000000404000
  13. #endif
  14. #define SMP_CACHE_BYTES (1 << SMP_CACHE_BYTES_SHIFT)
  15. #ifdef CONFIG_SPARC32
  16. OUTPUT_FORMAT("elf32-sparc", "elf32-sparc", "elf32-sparc")
  17. OUTPUT_ARCH(sparc)
  18. ENTRY(_start)
  19. jiffies = jiffies_64 + 4;
  20. #else
  21. /* sparc64 */
  22. OUTPUT_FORMAT("elf64-sparc", "elf64-sparc", "elf64-sparc")
  23. OUTPUT_ARCH(sparc:v9a)
  24. ENTRY(_start)
  25. jiffies = jiffies_64;
  26. #endif
  27. #ifdef CONFIG_SPARC64
  28. ASSERT((swapper_tsb == 0x0000000000408000), "Error: sparc64 early assembler too large")
  29. #endif
  30. SECTIONS
  31. {
  32. #ifdef CONFIG_SPARC64
  33. swapper_pg_dir = 0x0000000000402000;
  34. #endif
  35. . = INITIAL_ADDRESS;
  36. .text TEXTSTART :
  37. {
  38. _text = .;
  39. HEAD_TEXT
  40. TEXT_TEXT
  41. SCHED_TEXT
  42. LOCK_TEXT
  43. KPROBES_TEXT
  44. IRQENTRY_TEXT
  45. *(.gnu.warning)
  46. } = 0
  47. _etext = .;
  48. RO_DATA(PAGE_SIZE)
  49. /* Start of data section */
  50. _sdata = .;
  51. .data1 : {
  52. *(.data1)
  53. }
  54. RW_DATA_SECTION(SMP_CACHE_BYTES, 0, THREAD_SIZE)
  55. /* End of data section */
  56. _edata = .;
  57. .fixup : {
  58. __start___fixup = .;
  59. *(.fixup)
  60. __stop___fixup = .;
  61. }
  62. EXCEPTION_TABLE(16)
  63. NOTES
  64. . = ALIGN(PAGE_SIZE);
  65. __init_begin = ALIGN(PAGE_SIZE);
  66. INIT_TEXT_SECTION(PAGE_SIZE)
  67. __init_text_end = .;
  68. INIT_DATA_SECTION(16)
  69. . = ALIGN(4);
  70. .tsb_ldquad_phys_patch : {
  71. __tsb_ldquad_phys_patch = .;
  72. *(.tsb_ldquad_phys_patch)
  73. __tsb_ldquad_phys_patch_end = .;
  74. }
  75. .tsb_phys_patch : {
  76. __tsb_phys_patch = .;
  77. *(.tsb_phys_patch)
  78. __tsb_phys_patch_end = .;
  79. }
  80. .cpuid_patch : {
  81. __cpuid_patch = .;
  82. *(.cpuid_patch)
  83. __cpuid_patch_end = .;
  84. }
  85. .sun4v_1insn_patch : {
  86. __sun4v_1insn_patch = .;
  87. *(.sun4v_1insn_patch)
  88. __sun4v_1insn_patch_end = .;
  89. }
  90. .sun4v_2insn_patch : {
  91. __sun4v_2insn_patch = .;
  92. *(.sun4v_2insn_patch)
  93. __sun4v_2insn_patch_end = .;
  94. }
  95. .leon_1insn_patch : {
  96. __leon_1insn_patch = .;
  97. *(.leon_1insn_patch)
  98. __leon_1insn_patch_end = .;
  99. }
  100. .swapper_tsb_phys_patch : {
  101. __swapper_tsb_phys_patch = .;
  102. *(.swapper_tsb_phys_patch)
  103. __swapper_tsb_phys_patch_end = .;
  104. }
  105. .swapper_4m_tsb_phys_patch : {
  106. __swapper_4m_tsb_phys_patch = .;
  107. *(.swapper_4m_tsb_phys_patch)
  108. __swapper_4m_tsb_phys_patch_end = .;
  109. }
  110. .popc_3insn_patch : {
  111. __popc_3insn_patch = .;
  112. *(.popc_3insn_patch)
  113. __popc_3insn_patch_end = .;
  114. }
  115. .popc_6insn_patch : {
  116. __popc_6insn_patch = .;
  117. *(.popc_6insn_patch)
  118. __popc_6insn_patch_end = .;
  119. }
  120. .pause_3insn_patch : {
  121. __pause_3insn_patch = .;
  122. *(.pause_3insn_patch)
  123. __pause_3insn_patch_end = .;
  124. }
  125. .sun_m7_2insn_patch : {
  126. __sun_m7_2insn_patch = .;
  127. *(.sun_m7_2insn_patch)
  128. __sun_m7_2insn_patch_end = .;
  129. }
  130. PERCPU_SECTION(SMP_CACHE_BYTES)
  131. . = ALIGN(PAGE_SIZE);
  132. __init_end = .;
  133. BSS_SECTION(0, 0, 0)
  134. _end = . ;
  135. STABS_DEBUG
  136. DWARF_DEBUG
  137. DISCARDS
  138. }