Rev 7696 | Rev 8097 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 7696 | Rev 7983 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | (* |
1 | (* |
2 | BSD 2-Clause License |
2 | BSD 2-Clause License |
Line 3... | Line 3... | ||
3 | 3 | ||
4 | Copyright (c) 2019, Anton Krotov |
4 | Copyright (c) 2019, Anton Krotov |
5 | All rights reserved. |
5 | All rights reserved. |
Line 140... | Line 140... | ||
140 | 140 | ||
141 | 141 | ||
142 | PROCEDURE fixup (program: BIN.PROGRAM; text, data, bss: INTEGER; amd64: BOOLEAN); |
142 | PROCEDURE fixup (program: BIN.PROGRAM; text, data, bss: INTEGER; amd64: BOOLEAN); |
- | 143 | VAR |
|
143 | VAR |
144 | reloc: BIN.RELOC; |
Line 144... | Line 145... | ||
144 | reloc: BIN.RELOC; |
145 | code: CHL.BYTELIST; |
- | 146 | L, delta, delta0: INTEGER; |
|
- | 147 | ||
145 | L, delta: INTEGER; |
148 | BEGIN |
- | 149 | code := program.code; |
|
146 | 150 | delta0 := 3 - 7 * ORD(amd64); |
|
Line 147... | Line 151... | ||
147 | BEGIN |
151 | reloc := program.rel_list.first(BIN.RELOC); |
148 | reloc := program.rel_list.first(BIN.RELOC); |
152 | |
Line 149... | Line 153... | ||
149 | WHILE reloc # NIL DO |
153 | WHILE reloc # NIL DO |
150 | 154 | ||
151 | L := BIN.get32le(program.code, reloc.offset); |
155 | L := BIN.get32le(code, reloc.offset); |
152 | delta := 3 - reloc.offset - text - 7 * ORD(amd64); |
156 | delta := delta0 - reloc.offset - text; |
153 | 157 | ||
Line 154... | Line 158... | ||
154 | CASE reloc.opcode OF |
158 | CASE reloc.opcode OF |
155 | |BIN.PICDATA: BIN.put32le(program.code, reloc.offset, L + data + delta) |
159 | |BIN.PICDATA: BIN.put32le(code, reloc.offset, L + data + delta) |
156 | |BIN.PICCODE: BIN.put32le(program.code, reloc.offset, BIN.GetLabel(program, L) + text + delta) |
160 | |BIN.PICCODE: BIN.put32le(code, reloc.offset, BIN.GetLabel(program, L) + text + delta) |
Line 157... | Line 161... | ||
157 | |BIN.PICBSS: BIN.put32le(program.code, reloc.offset, L + bss + delta) |
161 | |BIN.PICBSS: BIN.put32le(code, reloc.offset, L + bss + delta) |
158 | END; |
162 | END; |