77 "io/ioutil"
88 "os/exec"
99 "path/filepath"
10+ "strings"
1011 "text/template"
1112)
1213
@@ -21,55 +22,60 @@ MEMORY {
2122SECTIONS {
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
0 commit comments