source: branches/arm/lisp-kernel/linuxppc/elf32ppclinux.x @ 13923

Last change on this file since 13923 was 11580, checked in by gb, 12 years ago

Set executable_start to 64K (not 4K). Some Linux kernels get upset
by the presence of code < 64K, and only calm down if the vm.mmap_min_addr
sysctl variable is set to 0. If we move code out of the low 64K (and
remap_spjump() at startup), the sysctl variable can be set to 4K, which
offers some protection against theoretical exploits.

Disable format warnings.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 7.2 KB
Line 
1OUTPUT_FORMAT("elf32-powerpc", "elf32-powerpc",
2              "elf32-powerpc")
3OUTPUT_ARCH(powerpc:common)
4ENTRY(_start)
5SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/powerpc-linux/lib);
6/* Do we need any of these for elf?
7   __DYNAMIC = 0;    */
8VERSION {default { global : __trampoline_setup ;  } ;}
9SECTIONS
10{
11  PROVIDE (__executable_start = 0x00010000);
12  . = 0x00010000 + SIZEOF_HEADERS;
13  .pad : { pad.o(.text) }
14  .subprims ALIGN(0x1000)    : 
15  {
16   ppc-spjump.o(.text)
17   ppc-spentry.o(.text)   
18   ppc-subprims.o(.text)
19  }
20  /* Read-only sections, merged into text segment: */
21/*  . = 0x10000000; */
22  .interp     : { *(.interp)    }
23  .hash          : { *(.hash)           }
24  .dynsym        : { *(.dynsym)         }
25  .dynstr        : { *(.dynstr)         }
26  .gnu.version   : { *(.gnu.version)    }
27  .gnu.version_d   : { *(.gnu.version_d)        }
28  .gnu.version_r   : { *(.gnu.version_r)        }
29  .rel.init      : { *(.rel.init)       }
30  .rela.init     : { *(.rela.init)      }
31  .rel.text      :
32    {
33      *(.rel.text)
34      *(.rel.text.*)
35      *(.rel.gnu.linkonce.t*)
36    }
37  .rela.text     :
38    {
39      *(.rela.text)
40      *(.rela.text.*)
41      *(.rela.gnu.linkonce.t*)
42    }
43  .rel.fini      : { *(.rel.fini)       }
44  .rela.fini     : { *(.rela.fini)      }
45  .rel.rodata    :
46    {
47      *(.rel.rodata)
48      *(.rel.rodata.*)
49      *(.rel.gnu.linkonce.r*)
50    }
51  .rela.rodata   :
52    {
53      *(.rela.rodata)
54      *(.rela.rodata.*)
55      *(.rela.gnu.linkonce.r*)
56    }
57  .rel.data      :
58    {
59      *(.rel.data)
60      *(.rel.data.*)
61      *(.rel.gnu.linkonce.d*)
62    }
63  .rela.data     :
64    {
65      *(.rela.data)
66      *(.rela.data.*)
67      *(.rela.gnu.linkonce.d*)
68    }
69  .rel.ctors     : { *(.rel.ctors)      }
70  .rela.ctors    : { *(.rela.ctors)     }
71  .rel.dtors     : { *(.rel.dtors)      }
72  .rela.dtors    : { *(.rela.dtors)     }
73  .rel.got       : { *(.rel.got)                }
74  .rela.got      : { *(.rela.got)               }
75  .rel.sdata     :
76    {
77      *(.rel.sdata)
78      *(.rel.sdata.*)
79      *(.rel.gnu.linkonce.s*)
80    }
81  .rela.sdata     :
82    {
83      *(.rela.sdata)
84      *(.rela.sdata.*)
85      *(.rela.gnu.linkonce.s*)
86    }
87  .rel.sbss      : { *(.rel.sbss)               }
88  .rela.sbss     : { *(.rela.sbss)      }
89  .rel.sdata2    : { *(.rel.sdata2)     }
90  .rela.sdata2   : { *(.rela.sdata2)    }
91  .rel.sbss2     : { *(.rel.sbss2)      }
92  .rela.sbss2    : { *(.rela.sbss2)     }
93  .rel.bss       : { *(.rel.bss)                }
94  .rela.bss      : { *(.rela.bss)               }
95  .rel.plt       : { *(.rel.plt)                }
96  .rela.plt      : { *(.rela.plt)               }
97  .init          :
98  {
99    KEEP (*(.init))
100  } =0
101  .text      :
102  {
103    *(.text)
104    *(.text.*)
105    *(.stub)
106    /* .gnu.warning sections are handled specially by elf32.em.  */
107    *(.gnu.warning)
108    *(.gnu.linkonce.t*)
109  } =0
110  .fini      :
111  {
112    KEEP (*(.fini))
113  } =0
114  PROVIDE (__etext = .);
115  PROVIDE (_etext = .);
116  PROVIDE (etext = .);
117  .rodata   : { *(.rodata) *(.rodata.*) *(.gnu.linkonce.r*) }
118  .rodata1   : { *(.rodata1) }
119  .sdata2   : { *(.sdata2) }
120  .sbss2   : { *(.sbss2) }
121  /* Adjust the address for the data segment.  We want to adjust up to
122     the same address within the page on the next page up.  */
123  . = ALIGN(0x10000) + (. & (0x10000 - 1));
124  /* Ensure the __preinit_array_start label is properly aligned.  We
125     could instead move the label definition inside the section, but
126     the linker would then create the section even if it turns out to
127     be empty, which isn't pretty.  */
128  . = ALIGN(32 / 8);
129  PROVIDE (__preinit_array_start = .);
130  .preinit_array     : { *(.preinit_array) }
131  PROVIDE (__preinit_array_end = .);
132  PROVIDE (__init_array_start = .);
133  .init_array     : { *(.init_array) }
134  PROVIDE (__init_array_end = .);
135  PROVIDE (__fini_array_start = .);
136  .fini_array     : { *(.fini_array) }
137  PROVIDE (__fini_array_end = .);
138  .data    :
139  {
140    *(.data)
141    *(.data.*)
142    *(.gnu.linkonce.d*)
143    SORT(CONSTRUCTORS)
144  }
145  .data1   : { *(.data1) }
146  .eh_frame : { *(.eh_frame) }
147  .gcc_except_table : { *(.gcc_except_table) }
148  .got1         : { *(.got1) }
149  .got2         : { *(.got2) }
150  .ctors   :
151  {
152    /* gcc uses crtbegin.o to find the start of
153       the constructors, so we make sure it is
154       first.  Because this is a wildcard, it
155       doesn't matter if the user does not
156       actually link against crtbegin.o; the
157       linker won't look for a file to match a
158       wildcard.  The wildcard also means that it
159       doesn't matter which directory crtbegin.o
160       is in.  */
161    KEEP (*crtbegin.o(.ctors))
162    /* We don't want to include the .ctor section from
163       from the crtend.o file until after the sorted ctors.
164       The .ctor section from the crtend file contains the
165       end of ctors marker and it must be last */
166    KEEP (*(EXCLUDE_FILE (*crtend.o ) .ctors))
167    KEEP (*(SORT(.ctors.*)))
168    KEEP (*(.ctors))
169  }
170   .dtors         :
171  {
172    KEEP (*crtbegin.o(.dtors))
173    KEEP (*(EXCLUDE_FILE (*crtend.o ) .dtors))
174    KEEP (*(SORT(.dtors.*)))
175    KEEP (*(.dtors))
176  }
177  .got            : { *(.got.plt) *(.got) }
178  .dynamic       : { *(.dynamic) }
179  /* We want the small data sections together, so single-instruction offsets
180     can access them all, and initialized data all before uninitialized, so
181     we can shorten the on-disk segment size.  */
182  .sdata     :
183  {
184    PROVIDE (_SDA_BASE_ = .);
185    *(.sdata)
186    *(.sdata.*)
187    *(.gnu.linkonce.s.*)
188  }
189  _edata = .;
190  PROVIDE (edata = .);
191  __bss_start = .;
192  .sbss      :
193  {
194    PROVIDE (__sbss_start = .);
195    PROVIDE (___sbss_start = .);
196    *(.dynsbss)
197    *(.sbss)
198    *(.sbss.*)
199    *(.scommon)
200    PROVIDE (__sbss_end = .);
201    PROVIDE (___sbss_end = .);
202  }
203  .plt      : { *(.plt) }
204  .bss       :
205  {
206   *(.dynbss)
207   *(.bss)
208   *(.bss.*)
209   *(COMMON)
210   /* Align here to ensure that the .bss section occupies space up to
211      _end.  Align after .bss to ensure correct alignment even if the
212      .bss section disappears because there are no input sections.  */
213   . = ALIGN(32 / 8);
214  }
215  . = ALIGN(32 / 8);
216  _end = .;
217  PROVIDE (end = .);
218  /* Stabs debugging sections.  */
219  .stab 0 : { *(.stab) }
220  .stabstr 0 : { *(.stabstr) }
221  .stab.excl 0 : { *(.stab.excl) }
222  .stab.exclstr 0 : { *(.stab.exclstr) }
223  .stab.index 0 : { *(.stab.index) }
224  .stab.indexstr 0 : { *(.stab.indexstr) }
225  .comment 0 : { *(.comment) }
226  /* DWARF debug sections.
227     Symbols in the DWARF debugging sections are relative to the beginning
228     of the section so we begin them at 0.  */
229  /* DWARF 1 */
230  .debug          0 : { *(.debug) }
231  .line           0 : { *(.line) }
232  /* GNU DWARF 1 extensions */
233  .debug_srcinfo  0 : { *(.debug_srcinfo) }
234  .debug_sfnames  0 : { *(.debug_sfnames) }
235  /* DWARF 1.1 and DWARF 2 */
236  .debug_aranges  0 : { *(.debug_aranges) }
237  .debug_pubnames 0 : { *(.debug_pubnames) }
238  /* DWARF 2 */
239  .debug_info     0 : { *(.debug_info) }
240  .debug_abbrev   0 : { *(.debug_abbrev) }
241  .debug_line     0 : { *(.debug_line) }
242  .debug_frame    0 : { *(.debug_frame) }
243  .debug_str      0 : { *(.debug_str) }
244  .debug_loc      0 : { *(.debug_loc) }
245  .debug_macinfo  0 : { *(.debug_macinfo) }
246  /* SGI/MIPS DWARF 2 extensions */
247  .debug_weaknames 0 : { *(.debug_weaknames) }
248  .debug_funcnames 0 : { *(.debug_funcnames) }
249  .debug_typenames 0 : { *(.debug_typenames) }
250  .debug_varnames  0 : { *(.debug_varnames) }
251  /DISCARD/     : { *(.fixup) }
252  /* These must appear regardless of  .  */
253}
Note: See TracBrowser for help on using the repository browser.