summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/m68k/gen68360/startup/linkcmds.prom
blob: ef1c3ee6e21b1bfd8b2d7b29ed19d0d4436fd08e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
/*
 * This file contains GNU linker directives for a generic MC68360 board.
 * These linker directives are for producing a PROM version..
 * To create the PROM image from the linkter output you must use objcopy
 * (--adjust-section-vma) to place the data segment at the end of the text
 * segment in the PROM.  The start-up code takes care of copying this region
 * to RAM.
 *
 * Saskatchewan Accelerator Laboratory
 * University of Saskatchewan
 * Saskatoon, Saskatchewan, CANADA
 * eric@skatter.usask.ca
 * 
 *  $Id$
 */

/*
 * a.out format doesn't handle prom images very well
 */
OUTPUT_FORMAT(coff-m68k)

/*
 * Declare on-board memory
 */
MEMORY {
          ram : ORIGIN = 0x00000000, LENGTH = 4M
          rom : ORIGIN = 0xFF000000, LENGTH = 1M
        dpram : ORIGIN = 0xFE000000, LENGTH = 8k
}

/*
 * Declare some sizes
 */
HeapSize = DEFINED(HeapSize) ? HeapSize : 0x10000;
StackSize = DEFINED(StackSize) ? StackSize : 0x1000;

/*
 * Declare low-order three octets of Ethernet address
 */
ETHERNET_ADDRESS = DEFINED(ETHERNET_ADDRESS) ? ETHERNET_ADDRESS : 0xDEAD12;

/*
 * Load objects
 */
SECTIONS {
        /*
         * Boot PROM
         */
        rom : {
                _RomBase = .;
                __RomBase = .;
        } >rom

        /*
         * Dynamic RAM
         */
        ram : {
                _RamBase = .;
                __RamBase = .;
        } >ram

        /*
         * Text, data and bss segments
         */
        .text : {
                CREATE_OBJECT_SYMBOLS
                *(.text)
                . = ALIGN (16);
                etext = .;
                _etext = .;
        } >rom 
        .data : {
                copy_start = .;
                *(.data)
                . = ALIGN (16);
                _edata = .;
                copy_end = .;
        } >ram
        .bss : {
                M68Kvec = .;
                _M68Kvec = .;
                . += (256 * 4);
                clear_start = .;
                *(.bss)
                *(COMMON)
                . = ALIGN (16);
                _end = .;

                _HeapStart = .;
                __HeapStart = .;
                . += HeapSize;
                . += StackSize;
                . = ALIGN (16);
                stack_init = .;
                clear_end = .;

                _WorkspaceBase = .;
                __WorkspaceBase = .;
        } >ram

        /*
         * On-chip memory/peripherals
         */
        dpram : {
                m360 = .;
                _m360 = .;
                . += (8 * 1024);

        } >dpram

}