forked from 0xGlitchbyte/TinyNightmare64
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsausage.ld
88 lines (74 loc) · 2.24 KB
/
sausage.ld
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
/*
ROM spec file
Main memory map
0x80000000 exception vectors, ...
0x80000400 zbuffer (size 320*240*2)
0x80025c00 codesegment
:
0x8038F800 cfb 16b 3buffer (size 320*240*2*3)
Copyright (C) 1997-1999, NINTENDO Co,Ltd.
*/
OUTPUT_ARCH (mips)
#include <nusys.h>
#define BEGIN_SEG(name, addr) \
_##name##SegmentStart = ADDR(.name); \
_##name##SegmentRomStart = __romPos; \
.name addr : AT(__romPos)
#define END_SEG(name) \
_##name##SegmentEnd = ADDR(.name) + SIZEOF(.name); \
_##name##SegmentRomEnd = __romPos + SIZEOF(.name); \
__romPos += SIZEOF(.name);
#define BEGIN_NOLOAD(name) \
_##name##SegmentBssStart = ADDR(.name.noload); \
.name.noload (NOLOAD) :
#define END_NOLOAD(name) \
_##name##SegmentBssEnd = ADDR(.name.noload) + SIZEOF(.name.noload); \
_##name##SegmentBssSize = SIZEOF(.name.noload);
SECTIONS
{
__romPos = 0;
BEGIN_SEG(boot, 0x04000000)
{
asm/rom_header.o(.text);
boot.6102.o(.data);
}
END_SEG(boot)
BEGIN_SEG(code, NU_SPEC_BOOT_ADDR) SUBALIGN(16)
{
/* text */
asm/entry.o(.text);
codesegment.o(.text);
/usr/lib/n64/PR/rspboot.o(.text);
/usr/lib/n64/PR/gspF3DEX2.fifo.o(.text);
/usr/lib/n64/PR/gspL3DEX2.fifo.o(.text);
/usr/lib/n64/PR/gspF3DEX2.Rej.fifo.o(.text);
/usr/lib/n64/PR/gspF3DEX2.NoN.fifo.o(.text);
/usr/lib/n64/PR/gspF3DLX2.Rej.fifo.o(.text);
/usr/lib/n64/PR/gspS2DEX2.fifo.o(.text);
/* data */
codesegment.o(.data*);
/usr/lib/n64/PR/rspboot.o(.data*);
/usr/lib/n64/PR/gspF3DEX2.fifo.o(.data*);
/usr/lib/n64/PR/gspL3DEX2.fifo.o(.data*);
/usr/lib/n64/PR/gspF3DEX2.Rej.fifo.o(.data*);
/usr/lib/n64/PR/gspF3DEX2.NoN.fifo.o(.data*);
/usr/lib/n64/PR/gspF3DLX2.Rej.fifo.o(.data*);
/usr/lib/n64/PR/gspS2DEX2.fifo.o(.data*);
/* rodata */
codesegment.o(.rodata*);
}
END_SEG(code)
BEGIN_NOLOAD(code)
{
codesegment.o(COMMON);
codesegment.o(.scommon*);
codesegment.o(.bss*);
. = ALIGN(0x8);
}
END_NOLOAD(code)
/* Discard everything not specifically mentioned above. */
/DISCARD/ :
{
*(*);
}
}