Subversion Repositories Kolibri OS

Rev

Rev 7696 | 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;