Mercurial > hg > index.cgi
annotate lwlink/link.c @ 425:9f0448022f1f
Fix address overflows in SREC and IHEX file formats
Thanks to hider <stego@satx.rr.com> for pointing out an overflow that caused
16 bit addresses to be output as 5 hex digits in cases where an address
counter wrapped. Simply mask the addresses down to 16 bits.
author | William Astle <lost@l-w.ca> |
---|---|
date | Thu, 03 Nov 2016 21:36:17 -0600 |
parents | 221b5f58d8ad |
children | 9c6204534ab8 |
rev | line source |
---|---|
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
1 /* |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
2 link.c |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
3 Copyright © 2009 William Astle |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
4 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
5 This file is part of LWLINK. |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
6 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
7 LWLINK is free software: you can redistribute it and/or modify it under the |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
8 terms of the GNU General Public License as published by the Free Software |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
9 Foundation, either version 3 of the License, or (at your option) any later |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
10 version. |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
11 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
12 This program is distributed in the hope that it will be useful, but WITHOUT |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
15 more details. |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
16 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
17 You should have received a copy of the GNU General Public License along with |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
18 this program. If not, see <http://www.gnu.org/licenses/>. |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
19 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
20 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
21 Resolve section and symbol addresses; handle incomplete references |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
22 */ |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
23 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
24 #include <stdio.h> |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
25 #include <stdlib.h> |
2
7317fbe024af
Clean up insane number of compiler warnings under -Wall
lost@l-w.ca
parents:
0
diff
changeset
|
26 #include <string.h> |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
27 |
8
fdc11ef4115b
Switched lwlink to lw_cmdline from argp and also brought in lw_alloc and lw_string to replace util.c
lost@l-w.ca
parents:
2
diff
changeset
|
28 #include <lw_alloc.h> |
234
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
29 #include <lw_string.h> |
8
fdc11ef4115b
Switched lwlink to lw_cmdline from argp and also brought in lw_alloc and lw_string to replace util.c
lost@l-w.ca
parents:
2
diff
changeset
|
30 |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
31 #include "expr.h" |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
32 #include "lwlink.h" |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
33 |
386
221b5f58d8ad
Port remainder of tools to Windows
William Astle <lost@l-w.ca>
parents:
325
diff
changeset
|
34 #ifdef _MSC_VER |
221b5f58d8ad
Port remainder of tools to Windows
William Astle <lost@l-w.ca>
parents:
325
diff
changeset
|
35 #include <lw_win.h> // windows build |
221b5f58d8ad
Port remainder of tools to Windows
William Astle <lost@l-w.ca>
parents:
325
diff
changeset
|
36 #endif |
221b5f58d8ad
Port remainder of tools to Windows
William Astle <lost@l-w.ca>
parents:
325
diff
changeset
|
37 |
148 | 38 void check_os9(void); |
39 | |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
40 struct section_list *sectlist = NULL; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
41 int nsects = 0; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
42 static int nforced = 0; |
157
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
43 static int resolveonly = 0; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
44 |
235
e3741cf53e00
Fix error messages related to undefined symbols in lwlink
William Astle <lost@l-w.ca>
parents:
234
diff
changeset
|
45 int quietsym = 1; |
e3741cf53e00
Fix error messages related to undefined symbols in lwlink
William Astle <lost@l-w.ca>
parents:
234
diff
changeset
|
46 |
234
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
47 symlist_t *symlist = NULL; |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
48 |
236
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
49 sectopt_t *section_opts = NULL; |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
50 |
315
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
51 void check_section_name(char *name, int *base, fileinfo_t *fn, int down) |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
52 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
53 int sn; |
325
6821f4855702
Fix bug with section padding and downward allocation.
William Astle <lost@l-w.ca>
parents:
315
diff
changeset
|
54 sectopt_t *so; |
6821f4855702
Fix bug with section padding and downward allocation.
William Astle <lost@l-w.ca>
parents:
315
diff
changeset
|
55 |
157
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
56 // fprintf(stderr, "Considering sections in %s (%d) for %s\n", fn -> filename, fn -> forced, name); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
57 if (fn -> forced == 0) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
58 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
59 |
325
6821f4855702
Fix bug with section padding and downward allocation.
William Astle <lost@l-w.ca>
parents:
315
diff
changeset
|
60 for (so = section_opts; so; so = so -> next) |
6821f4855702
Fix bug with section padding and downward allocation.
William Astle <lost@l-w.ca>
parents:
315
diff
changeset
|
61 if (!strcmp(so -> name, name)) |
6821f4855702
Fix bug with section padding and downward allocation.
William Astle <lost@l-w.ca>
parents:
315
diff
changeset
|
62 break; |
6821f4855702
Fix bug with section padding and downward allocation.
William Astle <lost@l-w.ca>
parents:
315
diff
changeset
|
63 |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
64 for (sn = 0; sn < fn -> nsections; sn++) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
65 { |
157
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
66 // fprintf(stderr, " Considering section %s\n", fn -> sections[sn].name); |
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
67 if (!strcmp(name, (char *)(fn -> sections[sn].name))) |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
68 { |
157
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
69 if (fn -> sections[sn].flags & SECTION_CONST) |
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
70 continue; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
71 // we have a match |
157
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
72 // fprintf(stderr, " Found\n"); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
73 sectlist = lw_realloc(sectlist, sizeof(struct section_list) * (nsects + 1)); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
74 sectlist[nsects].ptr = &(fn -> sections[sn]); |
325
6821f4855702
Fix bug with section padding and downward allocation.
William Astle <lost@l-w.ca>
parents:
315
diff
changeset
|
75 |
6821f4855702
Fix bug with section padding and downward allocation.
William Astle <lost@l-w.ca>
parents:
315
diff
changeset
|
76 |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
77 fn -> sections[sn].processed = 1; |
315
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
78 if (down) |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
79 { |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
80 *base -= fn -> sections[sn].codesize; |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
81 fn -> sections[sn].loadaddress = *base; |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
82 } |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
83 else |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
84 { |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
85 fn -> sections[sn].loadaddress = *base; |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
86 *base += fn -> sections[sn].codesize; |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
87 } |
325
6821f4855702
Fix bug with section padding and downward allocation.
William Astle <lost@l-w.ca>
parents:
315
diff
changeset
|
88 if (down && so && so -> aftersize) |
6821f4855702
Fix bug with section padding and downward allocation.
William Astle <lost@l-w.ca>
parents:
315
diff
changeset
|
89 { |
6821f4855702
Fix bug with section padding and downward allocation.
William Astle <lost@l-w.ca>
parents:
315
diff
changeset
|
90 sectlist[nsects].ptr -> afterbytes = so -> afterbytes; |
6821f4855702
Fix bug with section padding and downward allocation.
William Astle <lost@l-w.ca>
parents:
315
diff
changeset
|
91 sectlist[nsects].ptr -> aftersize = so -> aftersize; |
6821f4855702
Fix bug with section padding and downward allocation.
William Astle <lost@l-w.ca>
parents:
315
diff
changeset
|
92 sectlist[nsects].ptr -> loadaddress -= so -> aftersize; |
6821f4855702
Fix bug with section padding and downward allocation.
William Astle <lost@l-w.ca>
parents:
315
diff
changeset
|
93 *base -= so -> aftersize; |
6821f4855702
Fix bug with section padding and downward allocation.
William Astle <lost@l-w.ca>
parents:
315
diff
changeset
|
94 so -> aftersize = 0; |
6821f4855702
Fix bug with section padding and downward allocation.
William Astle <lost@l-w.ca>
parents:
315
diff
changeset
|
95 } |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
96 nsects++; |
157
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
97 // fprintf(stderr, "Adding section %s (%s)\n",fn -> sections[sn].name, fn -> filename); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
98 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
99 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
100 for (sn = 0; sn < fn -> nsubs; sn++) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
101 { |
315
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
102 check_section_name(name, base, fn -> subs[sn], down); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
103 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
104 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
105 |
315
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
106 void add_matching_sections(char *name, int yesflags, int noflags, int *base, int down); |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
107 void check_section_flags(int yesflags, int noflags, int *base, fileinfo_t *fn, int down) |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
108 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
109 int sn; |
236
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
110 sectopt_t *so; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
111 |
157
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
112 // fprintf(stderr, "Considering sections in %s (%d) for %x/%x\n", fn -> filename, fn -> forced, yesflags, noflags); |
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
113 |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
114 if (fn -> forced == 0) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
115 return; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
116 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
117 for (sn = 0; sn < fn -> nsections; sn++) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
118 { |
157
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
119 // ignore "constant" sections - they're added during the file resolve stage |
156
fc8386b13399
Added 'constant' sections to object file handling for lwasm and lwlink
lost@l-w.ca
parents:
155
diff
changeset
|
120 if (fn -> sections[sn].flags & SECTION_CONST) |
fc8386b13399
Added 'constant' sections to object file handling for lwasm and lwlink
lost@l-w.ca
parents:
155
diff
changeset
|
121 continue; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
122 // ignore if the noflags tell us to |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
123 if (noflags && (fn -> sections[sn].flags & noflags)) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
124 continue; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
125 // ignore unless the yesflags tell us not to |
2
7317fbe024af
Clean up insane number of compiler warnings under -Wall
lost@l-w.ca
parents:
0
diff
changeset
|
126 if (yesflags && ((fn -> sections[sn].flags & yesflags) == 0)) |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
127 continue; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
128 // ignore it if already processed |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
129 if (fn -> sections[sn].processed) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
130 continue; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
131 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
132 // we have a match - now collect *all* sections of the same name! |
157
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
133 // fprintf(stderr, " Found\n"); |
315
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
134 add_matching_sections((char *)(fn -> sections[sn].name), 0, 0, base, down); |
236
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
135 |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
136 /* handle "after padding" */ |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
137 for (so = section_opts; so; so = so -> next) |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
138 if (!strcmp(so -> name, (char *)(fn -> sections[sn].name))) |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
139 break; |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
140 if (so) |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
141 { |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
142 if (so -> aftersize) |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
143 { |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
144 sectlist[nsects - 1].ptr -> afterbytes = so -> afterbytes; |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
145 sectlist[nsects - 1].ptr -> aftersize = so -> aftersize; |
315
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
146 if (down) |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
147 { |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
148 sectlist[nsects - 1].ptr -> loadaddress -= so -> aftersize; |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
149 *base -= so -> aftersize; |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
150 } |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
151 else |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
152 { |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
153 *base += so -> aftersize; |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
154 } |
236
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
155 } |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
156 } |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
157 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
158 // and then continue looking for sections |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
159 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
160 for (sn = 0; sn < fn -> nsubs; sn++) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
161 { |
315
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
162 check_section_flags(yesflags, noflags, base, fn -> subs[sn], down); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
163 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
164 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
165 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
166 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
167 |
315
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
168 void add_matching_sections(char *name, int yesflags, int noflags, int *base, int down) |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
169 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
170 int fn; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
171 if (name) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
172 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
173 // named section |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
174 // look for all instances of a section by the specified name |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
175 // and resolve base addresses and add to the list |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
176 for (fn = 0; fn < ninputfiles; fn++) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
177 { |
315
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
178 check_section_name(name, base, inputfiles[fn], down); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
179 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
180 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
181 else |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
182 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
183 // wildcard section |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
184 // named section |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
185 // look for all instances of a section by the specified name |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
186 // and resolve base addresses and add to the list |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
187 for (fn = 0; fn < ninputfiles; fn++) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
188 { |
315
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
189 check_section_flags(yesflags, noflags, base, inputfiles[fn], down); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
190 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
191 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
192 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
193 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
194 // work out section load order and resolve base addresses for each section |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
195 // make a list of sections to load in order |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
196 void resolve_sections(void) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
197 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
198 int laddr = 0; |
315
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
199 int growdown = 0; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
200 int ln, sn, fn; |
236
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
201 sectopt_t *so; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
202 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
203 for (ln = 0; ln < linkscript.nlines; ln++) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
204 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
205 if (linkscript.lines[ln].loadat >= 0) |
315
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
206 { |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
207 laddr = linkscript.lines[ln].loadat; |
315
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
208 growdown = linkscript.lines[ln].growsdown; |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
209 } |
238
91f91557dc9e
Removed extraneous debug message.
William Astle <lost@l-w.ca>
parents:
236
diff
changeset
|
210 //fprintf(stderr, "Adding section %s\n", linkscript.lines[ln].sectname); |
315
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
211 add_matching_sections(linkscript.lines[ln].sectname, linkscript.lines[ln].yesflags, linkscript.lines[ln].noflags, &laddr, growdown); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
212 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
213 if (linkscript.lines[ln].sectname) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
214 { |
236
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
215 char *sname = linkscript.lines[ln].sectname; |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
216 /* handle "after padding" */ |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
217 for (so = section_opts; so; so = so -> next) |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
218 if (!strcmp(so -> name, sname)) |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
219 break; |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
220 if (so) |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
221 { |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
222 if (so -> aftersize) |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
223 { |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
224 sectlist[nsects - 1].ptr -> afterbytes = so -> afterbytes; |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
225 sectlist[nsects - 1].ptr -> aftersize = so -> aftersize; |
315
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
226 if (growdown) |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
227 { |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
228 sectlist[nsects-1].ptr -> loadaddress -= so -> aftersize; |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
229 laddr -= so -> aftersize; |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
230 } |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
231 else |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
232 { |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
233 laddr += so -> aftersize; |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
234 } |
236
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
235 } |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
236 } |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
237 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
238 else |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
239 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
240 // wildcard section |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
241 // look for all sections not yet processed that match flags |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
242 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
243 int f = 0; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
244 int fn0, sn0; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
245 char *sname; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
246 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
247 // named section |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
248 // look for all instances of a section by the specified name |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
249 // and resolve base addresses and add to the list |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
250 for (fn0 = 0; fn0 < ninputfiles; fn0++) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
251 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
252 for (sn0 = 0; sn0 < inputfiles[fn0] -> nsections; sn0++) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
253 { |
156
fc8386b13399
Added 'constant' sections to object file handling for lwasm and lwlink
lost@l-w.ca
parents:
155
diff
changeset
|
254 // ignore "constant" sections |
fc8386b13399
Added 'constant' sections to object file handling for lwasm and lwlink
lost@l-w.ca
parents:
155
diff
changeset
|
255 if (inputfiles[fn0] -> sections[sn0].flags & SECTION_CONST) |
fc8386b13399
Added 'constant' sections to object file handling for lwasm and lwlink
lost@l-w.ca
parents:
155
diff
changeset
|
256 continue; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
257 // ignore if the "no flags" bit says to |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
258 if (linkscript.lines[ln].noflags && (inputfiles[fn0] -> sections[sn0].flags & linkscript.lines[ln].noflags)) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
259 continue; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
260 // ignore unless the yes flags tell us not to |
2
7317fbe024af
Clean up insane number of compiler warnings under -Wall
lost@l-w.ca
parents:
0
diff
changeset
|
261 if (linkscript.lines[ln].yesflags && ((inputfiles[fn0] -> sections[sn0].flags & linkscript.lines[ln].yesflags) == 0)) |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
262 continue; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
263 if (inputfiles[fn0] -> sections[sn0].processed == 0) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
264 { |
2
7317fbe024af
Clean up insane number of compiler warnings under -Wall
lost@l-w.ca
parents:
0
diff
changeset
|
265 sname = (char *)(inputfiles[fn0] -> sections[sn0].name); |
236
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
266 fprintf(stderr, "Adding sectoin %s\n", sname); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
267 for (fn = 0; fn < ninputfiles; fn++) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
268 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
269 for (sn = 0; sn < inputfiles[fn] -> nsections; sn++) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
270 { |
2
7317fbe024af
Clean up insane number of compiler warnings under -Wall
lost@l-w.ca
parents:
0
diff
changeset
|
271 if (!strcmp(sname, (char *)(inputfiles[fn] -> sections[sn].name))) |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
272 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
273 // we have a match |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
274 sectlist = lw_realloc(sectlist, sizeof(struct section_list) * (nsects + 1)); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
275 sectlist[nsects].ptr = &(inputfiles[fn] -> sections[sn]); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
276 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
277 inputfiles[fn] -> sections[sn].processed = 1; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
278 if (!f && linkscript.lines[ln].loadat >= 0) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
279 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
280 f = 1; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
281 sectlist[nsects].forceaddr = 1; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
282 laddr = linkscript.lines[ln].loadat; |
315
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
283 growdown = linkscript.lines[ln].growsdown; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
284 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
285 else |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
286 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
287 sectlist[nsects].forceaddr = 0; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
288 } |
315
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
289 if (growdown) |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
290 { |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
291 laddr -= inputfiles[fn] -> sections[sn].codesize; |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
292 inputfiles[fn] -> sections[sn].loadaddress = laddr; |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
293 } |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
294 else |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
295 { |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
296 inputfiles[fn] -> sections[sn].loadaddress = laddr; |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
297 laddr += inputfiles[fn] -> sections[sn].codesize; |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
298 } |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
299 nsects++; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
300 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
301 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
302 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
303 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
304 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
305 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
306 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
307 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
308 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
309 // theoretically, all the base addresses are set now |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
310 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
311 |
234
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
312 /* run through all sections and generate any synthetic symbols */ |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
313 void generate_symbols(void) |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
314 { |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
315 int sn; |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
316 char *lastsect = NULL; |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
317 char sym[256]; |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
318 int len; |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
319 symlist_t *se; |
315
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
320 int lowaddr; |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
321 |
234
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
322 for (sn = 0; sn < nsects; sn++) |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
323 { |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
324 if (!lastsect || strcmp(lastsect, (char *)(sectlist[sn].ptr -> name))) |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
325 { |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
326 if (lastsect && linkscript.lensympat) |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
327 { |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
328 /* handle length symbol */ |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
329 se = lw_alloc(sizeof(symlist_t)); |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
330 se -> val = len; |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
331 snprintf(sym, 255, linkscript.lensympat, lastsect); |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
332 se -> sym = lw_strdup(sym); |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
333 se -> next = symlist; |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
334 symlist = se; |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
335 } |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
336 if (lastsect && linkscript.basesympat) |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
337 { |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
338 se = lw_alloc(sizeof(symlist_t)); |
315
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
339 se -> val = lowaddr; |
234
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
340 snprintf(sym, 255, linkscript.basesympat, lastsect); |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
341 se -> sym = lw_strdup(sym); |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
342 se -> next = symlist; |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
343 symlist = se; |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
344 } |
315
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
345 lastsect = (char *)(sectlist[sn].ptr -> name); |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
346 len = 0; |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
347 lowaddr = sectlist[sn].ptr -> loadaddress; |
234
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
348 } |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
349 len += sectlist[sn].ptr -> codesize; |
315
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
350 if (sectlist[sn].ptr -> loadaddress < lowaddr) |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
351 lowaddr = sectlist[sn].ptr -> loadaddress; |
234
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
352 } |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
353 if (lastsect && linkscript.lensympat) |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
354 { |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
355 /* handle length symbol */ |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
356 se = lw_alloc(sizeof(symlist_t)); |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
357 se -> val = len; |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
358 snprintf(sym, 255, linkscript.lensympat, lastsect); |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
359 se -> sym = lw_strdup(sym); |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
360 se -> next = symlist; |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
361 symlist = se; |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
362 } |
315
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
363 if (lastsect && linkscript.basesympat) |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
364 { |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
365 se = lw_alloc(sizeof(symlist_t)); |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
366 se -> val = lowaddr; |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
367 snprintf(sym, 255, linkscript.basesympat, lastsect); |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
368 se -> sym = lw_strdup(sym); |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
369 se -> next = symlist; |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
370 symlist = se; |
fcd103148aa6
Add ability to load sections downward instead of upward
William Astle <lost@l-w.ca>
parents:
264
diff
changeset
|
371 } |
234
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
372 } |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
373 |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
374 lw_expr_stack_t *find_external_sym_recurse(char *sym, fileinfo_t *fn) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
375 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
376 int sn; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
377 lw_expr_stack_t *r; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
378 lw_expr_term_t *term; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
379 symtab_t *se; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
380 int val; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
381 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
382 for (sn = 0; sn < fn -> nsections; sn++) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
383 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
384 for (se = fn -> sections[sn].exportedsyms; se; se = se -> next) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
385 { |
157
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
386 // fprintf(stderr, " Considering %s\n", se -> sym); |
2
7317fbe024af
Clean up insane number of compiler warnings under -Wall
lost@l-w.ca
parents:
0
diff
changeset
|
387 if (!strcmp(sym, (char *)(se -> sym))) |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
388 { |
157
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
389 // fprintf(stderr, " Match (%d)\n", fn -> sections[sn].processed); |
156
fc8386b13399
Added 'constant' sections to object file handling for lwasm and lwlink
lost@l-w.ca
parents:
155
diff
changeset
|
390 // if the section was not previously processed and is CONSTANT, force it in |
fc8386b13399
Added 'constant' sections to object file handling for lwasm and lwlink
lost@l-w.ca
parents:
155
diff
changeset
|
391 // otherwise error out if it is not being processed |
fc8386b13399
Added 'constant' sections to object file handling for lwasm and lwlink
lost@l-w.ca
parents:
155
diff
changeset
|
392 if (fn -> sections[sn].processed == 0) |
fc8386b13399
Added 'constant' sections to object file handling for lwasm and lwlink
lost@l-w.ca
parents:
155
diff
changeset
|
393 { |
fc8386b13399
Added 'constant' sections to object file handling for lwasm and lwlink
lost@l-w.ca
parents:
155
diff
changeset
|
394 if (fn -> sections[sn].flags & SECTION_CONST) |
fc8386b13399
Added 'constant' sections to object file handling for lwasm and lwlink
lost@l-w.ca
parents:
155
diff
changeset
|
395 { |
fc8386b13399
Added 'constant' sections to object file handling for lwasm and lwlink
lost@l-w.ca
parents:
155
diff
changeset
|
396 // add to section list |
fc8386b13399
Added 'constant' sections to object file handling for lwasm and lwlink
lost@l-w.ca
parents:
155
diff
changeset
|
397 sectlist = lw_realloc(sectlist, sizeof(struct section_list) * (nsects + 1)); |
fc8386b13399
Added 'constant' sections to object file handling for lwasm and lwlink
lost@l-w.ca
parents:
155
diff
changeset
|
398 sectlist[nsects].ptr = &(fn -> sections[sn]); |
fc8386b13399
Added 'constant' sections to object file handling for lwasm and lwlink
lost@l-w.ca
parents:
155
diff
changeset
|
399 fn -> sections[sn].processed = 1; |
fc8386b13399
Added 'constant' sections to object file handling for lwasm and lwlink
lost@l-w.ca
parents:
155
diff
changeset
|
400 fn -> sections[sn].loadaddress = 0; |
fc8386b13399
Added 'constant' sections to object file handling for lwasm and lwlink
lost@l-w.ca
parents:
155
diff
changeset
|
401 nsects++; |
fc8386b13399
Added 'constant' sections to object file handling for lwasm and lwlink
lost@l-w.ca
parents:
155
diff
changeset
|
402 } |
fc8386b13399
Added 'constant' sections to object file handling for lwasm and lwlink
lost@l-w.ca
parents:
155
diff
changeset
|
403 else |
fc8386b13399
Added 'constant' sections to object file handling for lwasm and lwlink
lost@l-w.ca
parents:
155
diff
changeset
|
404 { |
157
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
405 if (resolveonly == 0) |
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
406 { |
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
407 fprintf(stderr, "Symbol %s found in section %s (%s) which is not going to be included\n", sym, fn -> sections[sn].name, fn -> filename); |
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
408 continue; |
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
409 } |
156
fc8386b13399
Added 'constant' sections to object file handling for lwasm and lwlink
lost@l-w.ca
parents:
155
diff
changeset
|
410 } |
fc8386b13399
Added 'constant' sections to object file handling for lwasm and lwlink
lost@l-w.ca
parents:
155
diff
changeset
|
411 } |
155
1571e150f1fd
Fixed error where external references within a library file were not resolved when linking
lost@l-w.ca
parents:
149
diff
changeset
|
412 // fprintf(stderr, "Found symbol %s in %s\n", sym, fn -> filename); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
413 if (!(fn -> forced)) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
414 { |
155
1571e150f1fd
Fixed error where external references within a library file were not resolved when linking
lost@l-w.ca
parents:
149
diff
changeset
|
415 // fprintf(stderr, " Forced\n"); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
416 fn -> forced = 1; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
417 nforced = 1; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
418 } |
156
fc8386b13399
Added 'constant' sections to object file handling for lwasm and lwlink
lost@l-w.ca
parents:
155
diff
changeset
|
419 if (fn -> sections[sn].flags & SECTION_CONST) |
fc8386b13399
Added 'constant' sections to object file handling for lwasm and lwlink
lost@l-w.ca
parents:
155
diff
changeset
|
420 val = se -> offset; |
fc8386b13399
Added 'constant' sections to object file handling for lwasm and lwlink
lost@l-w.ca
parents:
155
diff
changeset
|
421 else |
fc8386b13399
Added 'constant' sections to object file handling for lwasm and lwlink
lost@l-w.ca
parents:
155
diff
changeset
|
422 val = se -> offset + fn -> sections[sn].loadaddress; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
423 r = lw_expr_stack_create(); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
424 term = lw_expr_term_create_int(val & 0xffff); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
425 lw_expr_stack_push(r, term); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
426 lw_expr_term_free(term); |
156
fc8386b13399
Added 'constant' sections to object file handling for lwasm and lwlink
lost@l-w.ca
parents:
155
diff
changeset
|
427 |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
428 return r; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
429 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
430 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
431 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
432 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
433 for (sn = 0; sn < fn -> nsubs; sn++) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
434 { |
157
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
435 // fprintf(stderr, "Looking in %s\n", fn -> subs[sn] -> filename); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
436 r = find_external_sym_recurse(sym, fn -> subs[sn]); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
437 if (r) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
438 { |
155
1571e150f1fd
Fixed error where external references within a library file were not resolved when linking
lost@l-w.ca
parents:
149
diff
changeset
|
439 // fprintf(stderr, "Found symbol %s in %s\n", sym, fn -> filename); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
440 if (!(fn -> forced)) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
441 { |
155
1571e150f1fd
Fixed error where external references within a library file were not resolved when linking
lost@l-w.ca
parents:
149
diff
changeset
|
442 // fprintf(stderr, " Forced\n"); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
443 nforced = 1; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
444 fn -> forced = 1; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
445 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
446 return r; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
447 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
448 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
449 return NULL; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
450 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
451 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
452 // resolve all incomplete references now |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
453 // anything that is unresolvable at this stage will throw an error |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
454 // because we know the load address of every section now |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
455 lw_expr_stack_t *resolve_sym(char *sym, int symtype, void *state) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
456 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
457 section_t *sect = state; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
458 lw_expr_term_t *term; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
459 int val = 0, i, fn; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
460 lw_expr_stack_t *s; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
461 symtab_t *se; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
462 fileinfo_t *fp; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
463 |
155
1571e150f1fd
Fixed error where external references within a library file were not resolved when linking
lost@l-w.ca
parents:
149
diff
changeset
|
464 // fprintf(stderr, "Looking up %s\n", sym); |
1571e150f1fd
Fixed error where external references within a library file were not resolved when linking
lost@l-w.ca
parents:
149
diff
changeset
|
465 |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
466 if (symtype == 1) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
467 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
468 // local symbol |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
469 if (!sym) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
470 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
471 val = sect -> loadaddress; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
472 goto out; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
473 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
474 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
475 // start with this section |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
476 for (se = sect -> localsyms; se; se = se -> next) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
477 { |
2
7317fbe024af
Clean up insane number of compiler warnings under -Wall
lost@l-w.ca
parents:
0
diff
changeset
|
478 if (!strcmp((char *)(se -> sym), sym)) |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
479 { |
156
fc8386b13399
Added 'constant' sections to object file handling for lwasm and lwlink
lost@l-w.ca
parents:
155
diff
changeset
|
480 if (sect -> flags & SECTION_CONST) |
fc8386b13399
Added 'constant' sections to object file handling for lwasm and lwlink
lost@l-w.ca
parents:
155
diff
changeset
|
481 val = se -> offset; |
fc8386b13399
Added 'constant' sections to object file handling for lwasm and lwlink
lost@l-w.ca
parents:
155
diff
changeset
|
482 else |
fc8386b13399
Added 'constant' sections to object file handling for lwasm and lwlink
lost@l-w.ca
parents:
155
diff
changeset
|
483 val = se -> offset + sect -> loadaddress; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
484 goto out; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
485 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
486 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
487 // not in this section - check all sections in this file |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
488 for (i = 0; i < sect -> file -> nsections; i++) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
489 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
490 for (se = sect -> file -> sections[i].localsyms; se; se = se -> next) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
491 { |
2
7317fbe024af
Clean up insane number of compiler warnings under -Wall
lost@l-w.ca
parents:
0
diff
changeset
|
492 if (!strcmp((char *)(se -> sym), sym)) |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
493 { |
156
fc8386b13399
Added 'constant' sections to object file handling for lwasm and lwlink
lost@l-w.ca
parents:
155
diff
changeset
|
494 if (sect -> file -> sections[i].flags & SECTION_CONST) |
fc8386b13399
Added 'constant' sections to object file handling for lwasm and lwlink
lost@l-w.ca
parents:
155
diff
changeset
|
495 val = se -> offset; |
fc8386b13399
Added 'constant' sections to object file handling for lwasm and lwlink
lost@l-w.ca
parents:
155
diff
changeset
|
496 else |
fc8386b13399
Added 'constant' sections to object file handling for lwasm and lwlink
lost@l-w.ca
parents:
155
diff
changeset
|
497 val = se -> offset + sect -> file -> sections[i].loadaddress; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
498 goto out; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
499 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
500 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
501 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
502 // not found |
235
e3741cf53e00
Fix error messages related to undefined symbols in lwlink
William Astle <lost@l-w.ca>
parents:
234
diff
changeset
|
503 if (!quietsym) |
e3741cf53e00
Fix error messages related to undefined symbols in lwlink
William Astle <lost@l-w.ca>
parents:
234
diff
changeset
|
504 { |
e3741cf53e00
Fix error messages related to undefined symbols in lwlink
William Astle <lost@l-w.ca>
parents:
234
diff
changeset
|
505 symerr = 1; |
e3741cf53e00
Fix error messages related to undefined symbols in lwlink
William Astle <lost@l-w.ca>
parents:
234
diff
changeset
|
506 fprintf(stderr, "Local symbol %s not found in %s:%s\n", sanitize_symbol(sym), sect -> file -> filename, sect -> name); |
e3741cf53e00
Fix error messages related to undefined symbols in lwlink
William Astle <lost@l-w.ca>
parents:
234
diff
changeset
|
507 } |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
508 goto outerr; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
509 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
510 else |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
511 { |
234
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
512 symlist_t *se; |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
513 |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
514 // external symbol |
234
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
515 // first look up synthesized symbols |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
516 for (se = symlist; se; se = se -> next) |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
517 { |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
518 if (!strcmp(se -> sym, sym)) |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
519 { |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
520 val = se -> val; |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
521 goto out; |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
522 } |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
523 } |
d389adbcc4ab
Added section base and length symbols to lwlink
William Astle <lost@l-w.ca>
parents:
157
diff
changeset
|
524 |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
525 // read all files in order until found (or not found) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
526 if (sect) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
527 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
528 for (fp = sect -> file; fp; fp = fp -> parent) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
529 { |
157
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
530 // fprintf(stderr, "Looking in %s\n", fp -> filename); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
531 s = find_external_sym_recurse(sym, fp); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
532 if (s) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
533 return s; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
534 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
535 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
536 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
537 for (fn = 0; fn < ninputfiles; fn++) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
538 { |
157
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
539 // fprintf(stderr, "Looking in %s\n", inputfiles[fn] -> filename); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
540 s = find_external_sym_recurse(sym, inputfiles[fn]); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
541 if (s) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
542 return s; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
543 } |
235
e3741cf53e00
Fix error messages related to undefined symbols in lwlink
William Astle <lost@l-w.ca>
parents:
234
diff
changeset
|
544 if (!quietsym) |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
545 { |
235
e3741cf53e00
Fix error messages related to undefined symbols in lwlink
William Astle <lost@l-w.ca>
parents:
234
diff
changeset
|
546 if (sect) |
e3741cf53e00
Fix error messages related to undefined symbols in lwlink
William Astle <lost@l-w.ca>
parents:
234
diff
changeset
|
547 { |
e3741cf53e00
Fix error messages related to undefined symbols in lwlink
William Astle <lost@l-w.ca>
parents:
234
diff
changeset
|
548 fprintf(stderr, "External symbol %s not found in %s:%s\n", sanitize_symbol(sym), sect -> file -> filename, sect -> name); |
e3741cf53e00
Fix error messages related to undefined symbols in lwlink
William Astle <lost@l-w.ca>
parents:
234
diff
changeset
|
549 } |
e3741cf53e00
Fix error messages related to undefined symbols in lwlink
William Astle <lost@l-w.ca>
parents:
234
diff
changeset
|
550 else |
e3741cf53e00
Fix error messages related to undefined symbols in lwlink
William Astle <lost@l-w.ca>
parents:
234
diff
changeset
|
551 { |
e3741cf53e00
Fix error messages related to undefined symbols in lwlink
William Astle <lost@l-w.ca>
parents:
234
diff
changeset
|
552 fprintf(stderr, "External symbol %s not found\n", sym); |
e3741cf53e00
Fix error messages related to undefined symbols in lwlink
William Astle <lost@l-w.ca>
parents:
234
diff
changeset
|
553 } |
e3741cf53e00
Fix error messages related to undefined symbols in lwlink
William Astle <lost@l-w.ca>
parents:
234
diff
changeset
|
554 symerr = 1; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
555 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
556 goto outerr; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
557 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
558 fprintf(stderr, "Shouldn't ever get here!!!\n"); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
559 exit(88); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
560 out: |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
561 s = lw_expr_stack_create(); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
562 term = lw_expr_term_create_int(val & 0xffff); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
563 lw_expr_stack_push(s, term); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
564 lw_expr_term_free(term); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
565 return s; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
566 outerr: |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
567 return NULL; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
568 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
569 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
570 void resolve_references(void) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
571 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
572 int sn; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
573 reloc_t *rl; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
574 int rval; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
575 |
235
e3741cf53e00
Fix error messages related to undefined symbols in lwlink
William Astle <lost@l-w.ca>
parents:
234
diff
changeset
|
576 quietsym = 0; |
e3741cf53e00
Fix error messages related to undefined symbols in lwlink
William Astle <lost@l-w.ca>
parents:
234
diff
changeset
|
577 |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
578 // resolve entry point if required |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
579 // this must resolve to an *exported* symbol and will resolve to the |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
580 // first instance of that symbol |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
581 if (linkscript.execsym) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
582 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
583 lw_expr_stack_t *s; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
584 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
585 s = resolve_sym(linkscript.execsym, 0, NULL); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
586 if (!s) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
587 { |
235
e3741cf53e00
Fix error messages related to undefined symbols in lwlink
William Astle <lost@l-w.ca>
parents:
234
diff
changeset
|
588 fprintf(stderr, "Cannot resolve exec address '%s'\n", linkscript.execsym); |
e3741cf53e00
Fix error messages related to undefined symbols in lwlink
William Astle <lost@l-w.ca>
parents:
234
diff
changeset
|
589 symerr = 1; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
590 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
591 else |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
592 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
593 linkscript.execaddr = lw_expr_get_value(s); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
594 lw_expr_stack_free(s); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
595 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
596 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
597 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
598 for (sn = 0; sn < nsects; sn++) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
599 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
600 for (rl = sectlist[sn].ptr -> incompletes; rl; rl = rl -> next) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
601 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
602 // do a "simplify" on the expression |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
603 rval = lw_expr_reval(rl -> expr, resolve_sym, sectlist[sn].ptr); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
604 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
605 // is it constant? error out if not |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
606 if (rval != 0 || !lw_expr_is_constant(rl -> expr)) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
607 { |
235
e3741cf53e00
Fix error messages related to undefined symbols in lwlink
William Astle <lost@l-w.ca>
parents:
234
diff
changeset
|
608 fprintf(stderr, "Incomplete reference at %s:%s+%02X\n", sectlist[sn].ptr -> file -> filename, sectlist[sn].ptr -> name, rl -> offset); |
e3741cf53e00
Fix error messages related to undefined symbols in lwlink
William Astle <lost@l-w.ca>
parents:
234
diff
changeset
|
609 symerr = 1; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
610 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
611 else |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
612 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
613 // put the value into the relocation address |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
614 rval = lw_expr_get_value(rl -> expr); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
615 if (rl -> flags & RELOC_8BIT) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
616 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
617 sectlist[sn].ptr -> code[rl -> offset] = rval & 0xff; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
618 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
619 else |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
620 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
621 sectlist[sn].ptr -> code[rl -> offset] = (rval >> 8) & 0xff; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
622 sectlist[sn].ptr -> code[rl -> offset + 1] = rval & 0xff; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
623 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
624 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
625 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
626 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
627 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
628 if (symerr) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
629 exit(1); |
148 | 630 |
631 if (outformat == OUTPUT_OS9) | |
632 check_os9(); | |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
633 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
634 |
155
1571e150f1fd
Fixed error where external references within a library file were not resolved when linking
lost@l-w.ca
parents:
149
diff
changeset
|
635 void resolve_files_aux(fileinfo_t *fn) |
1571e150f1fd
Fixed error where external references within a library file were not resolved when linking
lost@l-w.ca
parents:
149
diff
changeset
|
636 { |
1571e150f1fd
Fixed error where external references within a library file were not resolved when linking
lost@l-w.ca
parents:
149
diff
changeset
|
637 int sn; |
1571e150f1fd
Fixed error where external references within a library file were not resolved when linking
lost@l-w.ca
parents:
149
diff
changeset
|
638 reloc_t *rl; |
1571e150f1fd
Fixed error where external references within a library file were not resolved when linking
lost@l-w.ca
parents:
149
diff
changeset
|
639 lw_expr_stack_t *te; |
1571e150f1fd
Fixed error where external references within a library file were not resolved when linking
lost@l-w.ca
parents:
149
diff
changeset
|
640 |
264
346966cffeef
Clean up various warnings when building under -Wall
William Astle <lost@l-w.ca>
parents:
263
diff
changeset
|
641 // int rval; |
155
1571e150f1fd
Fixed error where external references within a library file were not resolved when linking
lost@l-w.ca
parents:
149
diff
changeset
|
642 |
1571e150f1fd
Fixed error where external references within a library file were not resolved when linking
lost@l-w.ca
parents:
149
diff
changeset
|
643 |
1571e150f1fd
Fixed error where external references within a library file were not resolved when linking
lost@l-w.ca
parents:
149
diff
changeset
|
644 if (fn -> forced == 0) |
1571e150f1fd
Fixed error where external references within a library file were not resolved when linking
lost@l-w.ca
parents:
149
diff
changeset
|
645 return; |
1571e150f1fd
Fixed error where external references within a library file were not resolved when linking
lost@l-w.ca
parents:
149
diff
changeset
|
646 |
1571e150f1fd
Fixed error where external references within a library file were not resolved when linking
lost@l-w.ca
parents:
149
diff
changeset
|
647 for (sn = 0; sn < fn -> nsections; sn++) |
1571e150f1fd
Fixed error where external references within a library file were not resolved when linking
lost@l-w.ca
parents:
149
diff
changeset
|
648 { |
1571e150f1fd
Fixed error where external references within a library file were not resolved when linking
lost@l-w.ca
parents:
149
diff
changeset
|
649 for (rl = fn -> sections[sn].incompletes; rl; rl = rl -> next) |
1571e150f1fd
Fixed error where external references within a library file were not resolved when linking
lost@l-w.ca
parents:
149
diff
changeset
|
650 { |
1571e150f1fd
Fixed error where external references within a library file were not resolved when linking
lost@l-w.ca
parents:
149
diff
changeset
|
651 // do a "simplify" on the expression |
1571e150f1fd
Fixed error where external references within a library file were not resolved when linking
lost@l-w.ca
parents:
149
diff
changeset
|
652 te = lw_expr_stack_dup(rl -> expr); |
264
346966cffeef
Clean up various warnings when building under -Wall
William Astle <lost@l-w.ca>
parents:
263
diff
changeset
|
653 lw_expr_reval(te, resolve_sym, &(fn -> sections[sn])); |
155
1571e150f1fd
Fixed error where external references within a library file were not resolved when linking
lost@l-w.ca
parents:
149
diff
changeset
|
654 |
1571e150f1fd
Fixed error where external references within a library file were not resolved when linking
lost@l-w.ca
parents:
149
diff
changeset
|
655 // is it constant? error out if not |
235
e3741cf53e00
Fix error messages related to undefined symbols in lwlink
William Astle <lost@l-w.ca>
parents:
234
diff
changeset
|
656 // incompletes will error out during resolve_references() |
e3741cf53e00
Fix error messages related to undefined symbols in lwlink
William Astle <lost@l-w.ca>
parents:
234
diff
changeset
|
657 //if (rval != 0 || !lw_expr_is_constant(te)) |
e3741cf53e00
Fix error messages related to undefined symbols in lwlink
William Astle <lost@l-w.ca>
parents:
234
diff
changeset
|
658 //{ |
e3741cf53e00
Fix error messages related to undefined symbols in lwlink
William Astle <lost@l-w.ca>
parents:
234
diff
changeset
|
659 // fprintf(stderr, "Incomplete reference at %s:%s+%02X\n", fn -> filename, fn -> sections[sn].name, rl -> offset); |
e3741cf53e00
Fix error messages related to undefined symbols in lwlink
William Astle <lost@l-w.ca>
parents:
234
diff
changeset
|
660 // symerr = 1; |
e3741cf53e00
Fix error messages related to undefined symbols in lwlink
William Astle <lost@l-w.ca>
parents:
234
diff
changeset
|
661 //} |
155
1571e150f1fd
Fixed error where external references within a library file were not resolved when linking
lost@l-w.ca
parents:
149
diff
changeset
|
662 lw_expr_stack_free(te); |
1571e150f1fd
Fixed error where external references within a library file were not resolved when linking
lost@l-w.ca
parents:
149
diff
changeset
|
663 } |
1571e150f1fd
Fixed error where external references within a library file were not resolved when linking
lost@l-w.ca
parents:
149
diff
changeset
|
664 } |
1571e150f1fd
Fixed error where external references within a library file were not resolved when linking
lost@l-w.ca
parents:
149
diff
changeset
|
665 |
1571e150f1fd
Fixed error where external references within a library file were not resolved when linking
lost@l-w.ca
parents:
149
diff
changeset
|
666 // handle any sub files |
1571e150f1fd
Fixed error where external references within a library file were not resolved when linking
lost@l-w.ca
parents:
149
diff
changeset
|
667 for (sn = 0; sn < fn -> nsubs; sn++) |
1571e150f1fd
Fixed error where external references within a library file were not resolved when linking
lost@l-w.ca
parents:
149
diff
changeset
|
668 resolve_files_aux(fn -> subs[sn]); |
1571e150f1fd
Fixed error where external references within a library file were not resolved when linking
lost@l-w.ca
parents:
149
diff
changeset
|
669 } |
1571e150f1fd
Fixed error where external references within a library file were not resolved when linking
lost@l-w.ca
parents:
149
diff
changeset
|
670 |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
671 /* |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
672 This is just a pared down version of the algo for resolving references. |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
673 */ |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
674 void resolve_files(void) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
675 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
676 int fn; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
677 |
157
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
678 resolveonly = 1; |
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
679 |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
680 // resolve entry point if required |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
681 // this must resolve to an *exported* symbol and will resolve to the |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
682 // first instance of that symbol |
157
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
683 // if (linkscript.execsym) |
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
684 // { |
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
685 // lw_expr_stack_t *s; |
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
686 // |
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
687 // s = resolve_sym(linkscript.execsym, 0, NULL); |
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
688 // if (!s) |
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
689 // { |
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
690 // fprintf(stderr, "Cannot resolve exec address '%s'\n", sanitize_symbol(linkscript.execsym)); |
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
691 // symerr = 1; |
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
692 // } |
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
693 // } |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
694 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
695 do |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
696 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
697 nforced = 0; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
698 for (fn = 0; fn < ninputfiles; fn++) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
699 { |
155
1571e150f1fd
Fixed error where external references within a library file were not resolved when linking
lost@l-w.ca
parents:
149
diff
changeset
|
700 resolve_files_aux(inputfiles[fn]); |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
701 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
702 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
703 while (nforced == 1); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
704 |
157
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
705 resolveonly = 0; |
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
706 |
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
707 // if (symerr) |
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
708 // exit(1); |
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
709 |
4682460aed00
Correct bug with handling symbol resolution and constant section handling
lost@l-w.ca
parents:
156
diff
changeset
|
710 symerr = 0; |
0
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
711 // theoretically, all files referenced by other files now have "forced" set to 1 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
712 for (fn = 0; fn < ninputfiles; fn++) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
713 { |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
714 if (inputfiles[fn] -> forced == 1) |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
715 continue; |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
716 |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
717 fprintf(stderr, "Warning: %s (%d) does not resolve any symbols\n", inputfiles[fn] -> filename, fn); |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
718 } |
2c24602be78f
Initial import from lwtools 3.0.1 version, with new hand built build system and file reorganization
lost@l-w.ca
parents:
diff
changeset
|
719 } |
148 | 720 void find_section_by_name_once_aux(char *name, fileinfo_t *fn, section_t **rval, int *found); |
721 void find_section_by_name_once_aux(char *name, fileinfo_t *fn, section_t **rval, int *found) | |
722 { | |
723 int sn; | |
724 | |
725 if (fn -> forced == 0) | |
726 return; | |
727 | |
728 for (sn = 0; sn < fn -> nsections; sn++) | |
729 { | |
730 if (!strcmp(name, (char *)(fn -> sections[sn].name))) | |
731 { | |
732 (*found)++; | |
733 *rval = &(fn -> sections[sn]); | |
734 } | |
735 } | |
736 for (sn = 0; sn < fn -> nsubs; sn++) | |
737 { | |
738 find_section_by_name_once_aux(name, fn -> subs[sn], rval, found); | |
739 } | |
740 } | |
741 | |
742 section_t *find_section_by_name_once(char *name) | |
743 { | |
744 int fn; | |
745 int found = 0; | |
746 section_t *rval = NULL; | |
747 | |
748 for (fn = 0; fn < ninputfiles; fn++) | |
749 { | |
750 find_section_by_name_once_aux(name, inputfiles[fn], &rval, &found); | |
751 } | |
752 if (found != 1) | |
753 { | |
754 rval = NULL; | |
149
729a9c70934e
Fixed crash and bogus warning with os9 module target
lost@l-w.ca
parents:
148
diff
changeset
|
755 if (found > 1) |
729a9c70934e
Fixed crash and bogus warning with os9 module target
lost@l-w.ca
parents:
148
diff
changeset
|
756 fprintf(stderr, "Warning: multiple instances of section %s found; ignoring all of them which is probably not what you want\n", name); |
148 | 757 } |
758 return rval; | |
759 } | |
760 | |
258
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
761 void foreach_section_aux(char *name, fileinfo_t *fn, void (*fnp)(section_t *s, void *arg), void *arg) |
148 | 762 { |
258
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
763 int sn; |
148 | 764 |
258
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
765 if (fn -> forced == 0) |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
766 return; |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
767 |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
768 for (sn = 0; sn < fn -> nsections; sn++) |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
769 { |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
770 if (!strcmp(name, (char *)(fn -> sections[sn].name))) |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
771 { |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
772 (*fnp)(&(fn -> sections[sn]), arg); |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
773 } |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
774 } |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
775 for (sn = 0; sn < fn -> nsubs; sn++) |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
776 { |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
777 foreach_section_aux(name, fn -> subs[sn], fnp, arg); |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
778 } |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
779 } |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
780 void foreach_section(char *name, void (*fnp)(section_t *s, void *arg), void *arg) |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
781 { |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
782 int fn; |
148 | 783 |
258
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
784 for (fn = 0; fn < ninputfiles; fn++) |
148 | 785 { |
258
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
786 foreach_section_aux(name, inputfiles[fn], fnp, arg); |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
787 } |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
788 } |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
789 |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
790 struct check_os9_aux_s |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
791 { |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
792 int typeseen; |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
793 int attrseen; |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
794 int langseen; |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
795 int revseen; |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
796 int nameseen; |
262
7de7b14ebaee
Add support for os9 module edition byte
William Astle <lost@l-w.ca>
parents:
258
diff
changeset
|
797 int edseen; |
258
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
798 }; |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
799 |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
800 void check_os9_aux(section_t *s, void *arg) |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
801 { |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
802 struct check_os9_aux_s *st = arg; |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
803 symtab_t *sym; |
148 | 804 |
805 // this section is special | |
806 // several symbols may be defined as LOCAL symbols: | |
807 // type: module type | |
808 // lang: module language | |
809 // attr: module attributes | |
810 // rev: module revision | |
262
7de7b14ebaee
Add support for os9 module edition byte
William Astle <lost@l-w.ca>
parents:
258
diff
changeset
|
811 // ed: module edition |
148 | 812 // |
813 // the symbols are not case sensitive | |
814 // | |
815 // any unrecognized symbols are ignored | |
816 | |
817 // the contents of the actual data to the first NUL | |
818 // is assumed to be the module name unless it is an empty string | |
819 if (s -> codesize > 0 && (s -> flags & SECTION_BSS) == 0 && s -> code[0] != 0) | |
820 { | |
821 linkscript.name = (char *)(s -> code); | |
258
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
822 st -> nameseen++; |
148 | 823 } |
824 | |
149
729a9c70934e
Fixed crash and bogus warning with os9 module target
lost@l-w.ca
parents:
148
diff
changeset
|
825 for (sym = s -> localsyms; sym; sym = sym -> next) |
148 | 826 { |
827 char *sm = (char *)(sym -> sym); | |
828 if (!strcasecmp(sm, "type")) | |
829 { | |
830 linkscript.modtype = sym -> offset; | |
258
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
831 st -> typeseen++; |
148 | 832 } |
833 else if (!strcasecmp(sm, "lang")) | |
834 { | |
835 linkscript.modlang = sym -> offset; | |
258
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
836 st -> langseen++; |
148 | 837 } |
838 else if (!strcasecmp(sm, "attr")) | |
839 { | |
257
d5374e80dd04
Fix handling of attr override for os9 output
William Astle <lost@l-w.ca>
parents:
238
diff
changeset
|
840 linkscript.modattr = sym -> offset; |
258
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
841 st -> attrseen++; |
148 | 842 } |
843 else if (!strcasecmp(sm, "rev")) | |
844 { | |
845 linkscript.modrev = sym -> offset; | |
258
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
846 st -> revseen++; |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
847 } |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
848 else if (!strcasecmp(sm, "stack")) |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
849 { |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
850 linkscript.stacksize += sym -> offset; |
148 | 851 } |
263
8dd8c3bdca7c
Fix stupid error with ' vs " handling os9 edition
William Astle <lost@l-w.ca>
parents:
262
diff
changeset
|
852 else if (!strcasecmp(sm, "edition")) |
262
7de7b14ebaee
Add support for os9 module edition byte
William Astle <lost@l-w.ca>
parents:
258
diff
changeset
|
853 { |
7de7b14ebaee
Add support for os9 module edition byte
William Astle <lost@l-w.ca>
parents:
258
diff
changeset
|
854 linkscript.edition = sym -> offset; |
7de7b14ebaee
Add support for os9 module edition byte
William Astle <lost@l-w.ca>
parents:
258
diff
changeset
|
855 st -> edseen++; |
7de7b14ebaee
Add support for os9 module edition byte
William Astle <lost@l-w.ca>
parents:
258
diff
changeset
|
856 } |
148 | 857 } |
258
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
858 } |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
859 |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
860 void check_os9(void) |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
861 { |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
862 struct check_os9_aux_s st = { 0 }; |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
863 |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
864 linkscript.name = outfile; |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
865 foreach_section("__os9", check_os9_aux, &st); |
148 | 866 if (linkscript.modtype > 15) |
867 linkscript.modtype = linkscript.modtype >> 4; | |
868 | |
869 if (linkscript.modattr > 15) | |
870 linkscript.modattr = linkscript.modattr >> 4; | |
871 | |
872 linkscript.modlang &= 15; | |
873 linkscript.modtype &= 15; | |
874 linkscript.modrev &= 15; | |
875 linkscript.modattr &= 15; | |
258
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
876 |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
877 if (st.attrseen > 1 || st.typeseen > 1 || |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
878 st.langseen > 1 || st.revseen > 1 || |
264
346966cffeef
Clean up various warnings when building under -Wall
William Astle <lost@l-w.ca>
parents:
263
diff
changeset
|
879 st.nameseen > 1 || st.edseen > 1 |
258
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
880 ) |
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
881 { |
262
7de7b14ebaee
Add support for os9 module edition byte
William Astle <lost@l-w.ca>
parents:
258
diff
changeset
|
882 fprintf(stderr, "Warning: multiple instances of __os9 found with duplicate settings of type, lang, attr, rev, edition, or module name.\n"); |
258
ebda5c96665e
Improved stack handling for os9 target in lwlink
William Astle <lost@l-w.ca>
parents:
257
diff
changeset
|
883 } |
148 | 884 } |
236
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
885 |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
886 void resolve_padding(void) |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
887 { |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
888 int sn; |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
889 |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
890 for (sn = 0; sn < nsects; sn++) |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
891 { |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
892 if (sectlist[sn].ptr -> afterbytes) |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
893 { |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
894 unsigned char *t; |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
895 |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
896 t = lw_alloc(sectlist[sn].ptr -> codesize + sectlist[sn].ptr -> aftersize); |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
897 memmove(t, sectlist[sn].ptr -> code, sectlist[sn].ptr -> codesize); |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
898 sectlist[sn].ptr -> code = t; |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
899 memmove(sectlist[sn].ptr -> code + sectlist[sn].ptr -> codesize, sectlist[sn].ptr -> afterbytes, sectlist[sn].ptr -> aftersize); |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
900 sectlist[sn].ptr -> codesize += sectlist[sn].ptr -> aftersize; |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
901 } |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
902 } |
ce1fdc8d6568
Added ability to add padding after a section when linking.
William Astle <lost@l-w.ca>
parents:
235
diff
changeset
|
903 } |