Skip to content

Commit 6a44340

Browse files
committed
Small fixes to spicy.
1 parent e8fd084 commit 6a44340

3 files changed

Lines changed: 48 additions & 41 deletions

File tree

cmd/spicy/main.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,15 +92,14 @@ func main() {
9292
}
9393
defer entry.Close()
9494

95-
var romheader *os.File
9695
var bootstrap *os.File
9796
var font *os.File
9897
out, err := os.Create(fmt.Sprintf("%s.n64", w.Name))
9998
if err != nil {
10099
panic(err)
101100
}
102101
defer out.Close()
103-
rom, err := n64rom.NewRomFile(romheader, bootstrap, font, 0)
102+
rom, err := n64rom.NewBlankRomFile(bootstrap, font, 0)
104103
if err != nil {
105104
panic(err)
106105
}

ld.go

Lines changed: 43 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"io/ioutil"
88
"os/exec"
99
"path/filepath"
10+
"strings"
1011
"text/template"
1112
)
1213

@@ -21,55 +22,60 @@ MEMORY {
2122
SECTIONS {
2223
_RomSize = 0x1050;
2324
_RomStart = _RomSize;
24-
{{range .ObjectSegments -}}
25-
_{{.Name}}SegmentRomStart = _RomSize;
26-
..{{.Name}} {{.Positioning.Address}}:
25+
{{range $index, $seg := .ObjectSegments -}}
26+
_{{$seg.Name}}SegmentRomStart = _RomSize;
27+
..{{$seg.Name}} {{if eq $index 0 }}{{$seg.Positioning.Address}}{{ end }}:
2728
{
28-
_{{.Name}}SegmentStart = .;
29+
_{{$seg.Name}}SegmentStart = .;
2930
. = ALIGN(0x10);
30-
_{{.Name}}SegmentTextStart = .;
31-
{{range .Includes -}}
32-
{{.}} (.text)
31+
_{{$seg.Name}}SegmentTextStart = .;
32+
{{range $seg.Includes -}}
33+
{{.}} (.text)
3334
{{end}}
34-
_{{.Name}}SegmentTextEnd = .;
35-
_{{.Name}}SegmentDataStart = .;
36-
{{range .Includes -}}
37-
{{.}} (.data)
35+
_{{$seg.Name}}SegmentTextEnd = .;
36+
_{{$seg.Name}}SegmentDataStart = .;
37+
{{range $seg.Includes -}}
38+
{{.}} (.data)
3839
{{end}}
39-
{{range .Includes -}}
40-
{{.}} (.rodata)
40+
{{range $seg.Includes -}}
41+
{{.}} (.rodata)
4142
{{end}}
42-
{{range .Includes -}}
43-
{{.}} (.sdata)
43+
{{range $seg.Includes -}}
44+
{{.}} (.sdata)
4445
{{end}}
4546
. = ALIGN(0x10);
46-
_{{.Name}}SegmentDataEnd = .;
47-
} > {{.Name}}.RAM
48-
_RomSize += ( _{{.Name}}SegmentDataEnd - _{{.Name}}SegmentTextStart );
49-
_{{.Name}}SegmentRomEnd = _RomSize;
47+
_{{$seg.Name}}SegmentDataEnd = .;
48+
} > {{$seg.Name}}.RAM
49+
_RomSize += ( _{{$seg.Name}}SegmentDataEnd - _{{$seg.Name}}SegmentTextStart );
50+
_{{$seg.Name}}SegmentRomEnd = _RomSize;
5051
51-
..{{.Name}}.bss ADDR(..{{.Name}}) + SIZEOF(..{{.Name}}) (NOLOAD) :
52+
..{{$seg.Name}}.bss ADDR(..{{$seg.Name}}) + SIZEOF(..{{$seg.Name}}) (NOLOAD) :
5253
{
5354
. = ALIGN(0x10);
54-
_{{.Name}}SegmentBssStart = .;
55-
{{range .Includes -}}
56-
{{.}} (.sbss)
55+
_{{$seg.Name}}SegmentBssStart = .;
56+
{{range $seg.Includes -}}
57+
{{.}} (.sbss)
5758
{{end}}
58-
{{range .Includes -}}
59-
{{.}} (.scommon)
59+
{{range $seg.Includes -}}
60+
{{.}} (.scommon)
6061
{{end}}
61-
{{range .Includes -}}
62-
{{.}} (.bss)
62+
{{range $seg.Includes -}}
63+
{{.}} (.bss)
6364
{{end}}
64-
{{range .Includes -}}
65-
{{.}} (COMMON)
65+
{{range $seg.Includes -}}
66+
{{.}} (COMMON)
6667
{{end}}
6768
. = ALIGN(0x10);
68-
_{{.Name}}SegmentBssEnd = .;
69-
_{{.Name}}SegmentEnd = .;
70-
} > {{.Name}}.bss.RAM
71-
_{{.Name}}SegmentBssSize = ( _{{.Name}}SegmentBssEnd - _{{.Name}}SegmentBssStart );
72-
{{- end}}
69+
_{{$seg.Name}}SegmentBssEnd = .;
70+
_{{$seg.Name}}SegmentEnd = .;
71+
} > {{$seg.Name}}.bss.RAM
72+
_{{$seg.Name}}SegmentBssSize = ( _{{$seg.Name}}SegmentBssEnd - _{{$seg.Name}}SegmentBssStart );
73+
{{ end }}
74+
/DISCARD/ :
75+
{
76+
*(.MIPS.abiflags*)
77+
}
78+
_RomEnd = _RomSize;
7379
}
7480
`
7581
tmpl, err := template.New("test").Parse(t)
@@ -111,7 +117,9 @@ func LinkSpec(w *Wave, ld_command string) error {
111117
if err != nil {
112118
return err
113119
}
114-
cmd := exec.Command(ld_command, "-G 0", "-noinhibit-exec", "-T", ld_path, "-o", fmt.Sprintf("%s.out", name), "-M")
120+
sh := []string{"-nostdinc", "-dT", ld_path, "-o", fmt.Sprintf("%s.out", name), "-M"}
121+
fmt.Printf("About to run %s %s\n", ld_command, strings.Join(sh, " "))
122+
cmd := exec.Command(ld_command, sh...)
115123
var out bytes.Buffer
116124
var errout bytes.Buffer
117125
cmd.Stdout = &out

spec.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -131,11 +131,11 @@ func convertSegmentAst(s *SegmentAst) (*Segment, error) {
131131
seg.Positioning.Address = statement.Value.Int
132132
break
133133
case "after":
134-
if statement.Value.String != "" {
135-
seg.Positioning.AfterSegment = statement.Value.String
136-
} else if statement.Value.MinSegment.First != "" {
134+
if statement.Value.ConstantValue != nil {
135+
seg.Positioning.AfterSegment = statement.Value.ConstantValue.Lhs.Symbol
136+
} else if statement.Value.MinSegment != nil {
137137
seg.Positioning.AfterMinSegment = [2]string{statement.Value.MinSegment.First, statement.Value.MinSegment.Second}
138-
} else if statement.Value.MaxSegment.First != "" {
138+
} else if statement.Value.MaxSegment != nil {
139139
seg.Positioning.AfterMaxSegment = [2]string{statement.Value.MaxSegment.First, statement.Value.MaxSegment.Second}
140140
} else {
141141
return nil, errors.New("some error")

0 commit comments

Comments
 (0)