summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/powerpc/mcp750/bootloader/ppcboot.lds
blob: 9d46c0a83fa6d8fe90ec9d97d888eb0395711027 (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
OUTPUT_ARCH(powerpc)
OUTPUT_FORMAT(ppcboot)
/* 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)
    *(.sdata2)
    *(.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)
  }

  __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >>2;
  __fixup_entries = (. - _FIXUP_TABLE_)>>2;

  .handlers : 
  {
    *(.exception)
  }

  .data    :
  {
    *(.data)
    *(.sdata)
    . = ALIGN(4);
    _edata = .;
  }
  PROVIDE(_binary_initrd_gz_start = 0);
  PROVIDE(_binary_initrd_gz_end = 0);
  _rtems_gz_size = _binary_rtems_gz_end - _binary_rtems_gz_start;
  _rtems_size = __rtems_end - __rtems_start;
  .bss :
  {
    *(.sbss)
    *(.bss)
    . = ALIGN(4);
  }
  __bss_words = SIZEOF(.bss)>>2;
  __size = . ;
  /DISCARD/ : 
  {
    *(.comment)
  }
}