summaryrefslogtreecommitdiffstats
path: root/bsps/powerpc/motorola_powerpc/bootloader/ppcboot.lds
blob: 501acc40dc26949e7cc62c98fa9e74d8e3f6508e (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
OUTPUT_ARCH(powerpc)
OUTPUT_FORMAT ("elf32-powerpc", "elf32-powerpc", "elf32-powerpc")
/* Do we need any of these for elf?
   __DYNAMIC = 0;    */
SECTIONS
{
  .text :
  {
    /* We have to build the header by hand, painful since ppcboot
	format support is very poor in binutils. 
	objdump -b ppcboot zImage --all-headers can be used to check. */
    /* The following line can be added as a branch to use the same image
     * for netboot as for prepboots, the only problem is that objdump
     * did not in this case recognize the format since it insisted
     * in checking the x86 code area held only zeroes. 
     */
    LONG(0x48000000+start);
    . = 0x1be; BYTE(0x80); BYTE(0)
    BYTE(2); BYTE(0); BYTE(0x41); BYTE(1);
    BYTE(0x12); BYTE(0x4f); LONG(0);
    BYTE(((_edata + 0x1ff)>>9)&0xff); 
    BYTE(((_edata + 0x1ff)>>17)&0xff); 
    BYTE(((_edata + 0x1ff)>>25)&0xff);
    . = 0x1fe;
    BYTE(0x55);
    BYTE(0xaa);
    BYTE(start&0xff);
    BYTE((start>>8)&0xff);
    BYTE((start>>16)&0xff);
    BYTE((start>>24)&0xff);
    BYTE(_edata&0xff);
    BYTE((_edata>>8)&0xff);
    BYTE((_edata>>16)&0xff);
    BYTE((_edata>>24)&0xff);
    BYTE(0); /* flags */
    BYTE(0); /* os_id */
    BYTE(0x4C); BYTE(0x69); BYTE(0x6e); 
    BYTE(0x75); BYTE(0x78); /* Partition name */
    . = 0x400;
    *(.text)
    *(.text*)
    *(.sdata2)
    *(.sdata2*)
    *(.rodata)
    *(.rodata*)
  }
/*  . = ALIGN(16); */
  .image :
  {
    rtems.gz(*)
    . = ALIGN(4);
    *.gz(*)
  }
  /* Read-write section, merged into data segment: */
  /* . = ALIGN(4096); */
  .reloc   :
  {
    *(.got)
    _GOT2_TABLE_ = .;
    *(.got2)
    _FIXUP_TABLE_ = .;
    *(.fixup)
    _FIXUP_END_ = .;
  }

  .handlers : 
  {
    *(.exception)
  }

  .data    :
  {
    *(.data)
    *(.data*)
    *(.sdata)
    *(.sdata*)
    . = ALIGN(4);
    _data_end = .;
  }
  .bss :
  {
    *(.sbss)
    *(.sbss*)
    *(.bss)
    *(.bss*)
    *(COMMON)
    . = ALIGN(4);
    _bss_end = .;
  }
  .abs 0 : {
    __got2_entries = ABSOLUTE((_FIXUP_TABLE_ - _GOT2_TABLE_) >>2);
    __fixup_entries = ABSOLUTE((_FIXUP_END_ - _FIXUP_TABLE_)>>2);
    _edata = ABSOLUTE(_data_end);
    PROVIDE(_binary_initrd_gz_start = ABSOLUTE(0));
    PROVIDE(_binary_initrd_gz_end = ABSOLUTE(0));
    _rtems_gz_size = ABSOLUTE(_binary_rtems_gz_end - _binary_rtems_gz_start);
    _rtems_size = ABSOLUTE(__rtems_end - __rtems_start);
    __bss_words = ABSOLUTE(SIZEOF(.bss)>>2);
    __size = ABSOLUTE(_bss_end);
  }

  /DISCARD/ : 
  {
    *(.comment*)
    *(.debug*)
  }
}