diff options
author | Per Fogelstrom <pefo@cvs.openbsd.org> | 1996-09-24 20:04:46 +0000 |
---|---|---|
committer | Per Fogelstrom <pefo@cvs.openbsd.org> | 1996-09-24 20:04:46 +0000 |
commit | c65b2523a1b82b54c46f855ef0c1142a4c2cdda9 (patch) | |
tree | d9eb2cf75e6494ee49486008e7a94e622dc6bf8e /sys/arch/arc | |
parent | 46f7fd6a6cf87bd8c7c26ce08d977fc3af6ee5f3 (diff) |
Kernel links now with in tree ld. Needs a ld script though. This script may
be cleaned up (optimized) but works. And if it's not broken, don't fix it :-)
Diffstat (limited to 'sys/arch/arc')
-rw-r--r-- | sys/arch/arc/conf/Makefile.arc | 8 | ||||
-rw-r--r-- | sys/arch/arc/conf/ld.script | 117 |
2 files changed, 121 insertions, 4 deletions
diff --git a/sys/arch/arc/conf/Makefile.arc b/sys/arch/arc/conf/Makefile.arc index 501d8261246..50cb27c99e6 100644 --- a/sys/arch/arc/conf/Makefile.arc +++ b/sys/arch/arc/conf/Makefile.arc @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile.arc,v 1.5 1996/09/24 19:37:26 pefo Exp $ +# $OpenBSD: Makefile.arc,v 1.6 1996/09/24 20:04:45 pefo Exp $ # @(#)Makefile.arc 8.2 (Berkeley) 2/16/94 # @@ -26,7 +26,7 @@ AS?= as CC?= cc CPP?= cpp -LD= ld.ok # XXX TEMPORARY +LD?= ld STRIP?= strip -d TOUCH?= touch -f -c @@ -93,9 +93,9 @@ SYSTEM_LD= -@if [ X${DEBUG} = X-g ]; \ then strip=-X; \ else strip=-x; \ fi; \ - echo ${LD} $$strip -N -o $@ -e start -Ttext 80100000 \ + echo ${LD} $$strip -o $@ -e start -T ../../conf/ld.script \ '$${SYSTEM_OBJ}' vers.o; \ - ${LD} $$strip -N -o $@ -e start -Ttext 80100000 \ + ${LD} $$strip -o $@ -e start -T ../../conf/ld.script \ ${SYSTEM_OBJ} vers.o # SYSTEM_LD_TAIL= chmod 755 $@; \ diff --git a/sys/arch/arc/conf/ld.script b/sys/arch/arc/conf/ld.script new file mode 100644 index 00000000000..3dab94bb62f --- /dev/null +++ b/sys/arch/arc/conf/ld.script @@ -0,0 +1,117 @@ +OUTPUT_FORMAT("elf32-littlemips", "elf32-bigmips", + "elf32-littlemips") +OUTPUT_ARCH(mips) +ENTRY(_start) +SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/mips-arc-openbsd1.2/lib); +/* Do we need any of these for elf? + __DYNAMIC = 0; */ +SECTIONS +{ + /* Read-only sections, merged into text segment: */ + . = 0x80100000 + SIZEOF_HEADERS; + .interp : { *(.interp) } + .reginfo : { *(.reginfo) } + .dynamic : { *(.dynamic) } + .dynstr : { *(.dynstr) } + .dynsym : { *(.dynsym) } + .hash : { *(.hash) } + .rel.text : { *(.rel.text) } + .rela.text : { *(.rela.text) } + .rel.data : { *(.rel.data) } + .rela.data : { *(.rela.data) } + .rel.rodata : { *(.rel.rodata) } + .rela.rodata : { *(.rela.rodata) } + .rel.got : { *(.rel.got) } + .rela.got : { *(.rela.got) } + .rel.ctors : { *(.rel.ctors) } + .rela.ctors : { *(.rela.ctors) } + .rel.dtors : { *(.rel.dtors) } + .rela.dtors : { *(.rela.dtors) } + .rel.init : { *(.rel.init) } + .rela.init : { *(.rela.init) } + .rel.fini : { *(.rel.fini) } + .rela.fini : { *(.rela.fini) } + .rel.bss : { *(.rel.bss) } + .rela.bss : { *(.rela.bss) } + .rel.plt : { *(.rel.plt) } + .rela.plt : { *(.rela.plt) } + .rodata : { *(.rodata) } + .rodata1 : { *(.rodata1) } + .init : { *(.init) } =0 + .text : + { + _ftext = . ; + *(.text) + *(.stub) + /* .gnu.warning sections are handled specially by elf32.em. */ + *(.gnu.warning) + } =0 + _etext = .; + PROVIDE (etext = .); + .fini : { *(.fini) } =0 + /* Adjust the address for the data segment. We want to adjust up to + the same address within the page on the next page up. It would + be more correct to do this: + . = .; + The current expression does not correctly handle the case of a + text segment ending precisely at the end of a page; it causes the + data segment to skip a page. The above expression does not have + this problem, but it will currently (2/95) cause BFD to allocate + a single segment, combining both text and data, for this case. + This will prevent the text segment from being shared among + multiple executions of the program; I think that is more + important than losing a page of the virtual address space (note + that no actual memory is lost; the page which is skipped can not + be referenced). */ + . = ALIGN(4096) ; + .data : + { + _fdata = . ; + *(.data) + CONSTRUCTORS + } + .data1 : { *(.data1) } + .ctors : { *(.ctors) } + .dtors : { *(.dtors) } + _gp = ALIGN(16) + 0x7ff0; + .got : + { + *(.got.plt) *(.got) + } + /* We want the small data sections together, so single-instruction offsets + can access them all, and initialized data all before uninitialized, so + we can shorten the on-disk segment size. */ + .sdata : { *(.sdata) } + .lit8 : { *(.lit8) } + .lit4 : { *(.lit4) } + _edata = .; + PROVIDE (edata = .); + __bss_start = .; + _fbss = .; + .sbss : { *(.sbss) *(.scommon) } + .bss : + { + *(.dynbss) + *(.bss) + *(COMMON) + } + _end = . ; + PROVIDE (end = .); + /* These are needed for ELF backends which have not yet been + converted to the new style linker. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + /* DWARF debug sections. + Symbols in the .debug DWARF section are relative to the beginning of the + section so we begin .debug at 0. It's not clear yet what needs to happen + for the others. */ + .debug 0 : { *(.debug) } + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + .debug_sfnames 0 : { *(.debug_sfnames) } + .line 0 : { *(.line) } + /* These must appear regardless of . */ + .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) } + .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) } +} |