OpenCores
URL https://opencores.org/ocsvn/lxp32/lxp32/trunk

Subversion Repositories lxp32

[/] [lxp32/] [trunk/] [tools/] [src/] [lxp32asm/] [linker.h] - Blame information for rev 9

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 9 ring0_mipt
/*
2
 * Copyright (c) 2016 by Alex I. Kuznetsov.
3
 *
4
 * Part of the LXP32 CPU IP core.
5
 *
6
 * This module defines the Linker class which performs
7
 * linking of LXP32 binary objects.
8
 */
9
 
10
#ifndef LINKER_H_INCLUDED
11
#define LINKER_H_INCLUDED
12
 
13
#include "linkableobject.h"
14
#include "outputwriter.h"
15
 
16
#include <iostream>
17
#include <map>
18
#include <vector>
19
#include <string>
20
#include <set>
21
 
22
class Linker {
23
        struct GlobalSymbolData {
24
                LinkableObject *obj=nullptr;
25
                LinkableObject::Word rva=0;
26
                std::set<const LinkableObject*> refs;
27
        };
28
 
29
        std::vector<LinkableObject*> _objects;
30
        LinkableObject *_entryObject=nullptr;
31
        std::map<std::string,GlobalSymbolData> _globalSymbolTable;
32
 
33
// Various output options
34
        LinkableObject::Word _base=0;
35
        std::size_t _align=4;
36
        std::size_t _imageSize=0;
37
        std::size_t _bytesWritten=0;
38
public:
39
        void addObject(LinkableObject &obj);
40
        void link(OutputWriter &writer);
41
        void setBase(LinkableObject::Word base);
42
        void setAlignment(std::size_t align);
43
        void setImageSize(std::size_t size);
44
        void generateMap(std::ostream &s);
45
private:
46
        void buildSymbolTable();
47
        void placeObjects();
48
        void relocateObject(LinkableObject *obj);
49
        void writeObjects(OutputWriter &writer);
50
        void markAsUsed(const LinkableObject *obj,std::set<const LinkableObject*> &used);
51
};
52
 
53
#endif

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.