annotate packages/services/loader/current/include/loader.hxx @ 208:e0c0827131d1 ecos

Merge from eCos master repository on 2002-05-20-20:11:54-BST
author jlarmour
date Mon, 20 May 2002 22:19:26 +0000
parents 022f1e506033
children d2c90368aeef
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
184
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
1 #ifndef CYGONCE_LOADER_LOADER_HXX
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
2 #define CYGONCE_LOADER_LOADER_HXX
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
3
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
4 //==========================================================================
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
5 //
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
6 // loader.hxx
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
7 //
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
8 // ELF dynamic loader definitions
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
9 //
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
10 //==========================================================================
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 184
diff changeset
11 //####ECOSGPLCOPYRIGHTBEGIN####
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 184
diff changeset
12 // -------------------------------------------
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 184
diff changeset
13 // This file is part of eCos, the Embedded Configurable Operating System.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 184
diff changeset
14 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 184
diff changeset
15 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 184
diff changeset
16 // eCos is free software; you can redistribute it and/or modify it under
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 184
diff changeset
17 // the terms of the GNU General Public License as published by the Free
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 184
diff changeset
18 // Software Foundation; either version 2 or (at your option) any later version.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 184
diff changeset
19 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 184
diff changeset
20 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 184
diff changeset
21 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 184
diff changeset
22 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 184
diff changeset
23 // for more details.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 184
diff changeset
24 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 184
diff changeset
25 // You should have received a copy of the GNU General Public License along
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 184
diff changeset
26 // with eCos; if not, write to the Free Software Foundation, Inc.,
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 184
diff changeset
27 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 184
diff changeset
28 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 184
diff changeset
29 // As a special exception, if other files instantiate templates or use macros
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 184
diff changeset
30 // or inline functions from this file, or you compile this file and link it
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 184
diff changeset
31 // with other works to produce a work based on this file, this file does not
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 184
diff changeset
32 // by itself cause the resulting work to be covered by the GNU General Public
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 184
diff changeset
33 // License. However the source code for this file must still be made available
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 184
diff changeset
34 // in accordance with section (3) of the GNU General Public License.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 184
diff changeset
35 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 184
diff changeset
36 // This exception does not invalidate any other reasons why a work based on
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 184
diff changeset
37 // this file might be covered by the GNU General Public License.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 184
diff changeset
38 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 184
diff changeset
39 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 184
diff changeset
40 // at http://sources.redhat.com/ecos/ecos-license
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 184
diff changeset
41 // -------------------------------------------
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 184
diff changeset
42 //####ECOSGPLCOPYRIGHTEND####
184
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
43 //==========================================================================
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
44 //#####DESCRIPTIONBEGIN####
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
45 //
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
46 // Author(s): nickg
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
47 // Contributors: nickg
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
48 // Date: 2000-11-15
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
49 // Purpose: Define ELF dynamic loader
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
50 // Description: The classes defined here collectively implement the
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
51 // internal API of the ELF dynamic loader.
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
52 // Usage: #include <cyg/loader/loader.hxx>
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
53 //
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
54 //####DESCRIPTIONEND####
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
55 //
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
56 //==========================================================================
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
57
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
58 #include <pkgconf/system.h>
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
59
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
60 #ifndef CYG_LOADER_DYNAMIC_LD
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
61
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
62 #include <cyg/loader/elf.h> // ELF data structures
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
63
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
64 #ifdef __cplusplus
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
65
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
66 #include <cyg/kernel/ktypes.h>
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
67 #include <cyg/infra/cyg_ass.h> // assertion macros
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
68
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
69 #include <cyg/infra/clist.hxx>
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
70
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
71 // -------------------------------------------------------------------------
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
72 // Forward definitions
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
73
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
74 class Cyg_LoaderStream;
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
75 class Cyg_LoaderMemBlock;
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
76 class Cyg_LoaderMemAlloc;
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
77 class Cyg_LoadObject_Base;
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
78 class Cyg_LoadObject_Proc;
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
79 class Cyg_LoadObject;
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
80 class Cyg_Loader;
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
81
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
82 // -------------------------------------------------------------------------
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
83 // Error codes
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
84
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
85 #define CYG_LOADERR_NOERROR 0 // No error
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
86 #define CYG_LOADERR_NOT_ELF 1 // Not ELF format file
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
87 #define CYG_LOADERR_INVALID_CLASS 2 // Not expected file class
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
88 #define CYG_LOADERR_INVALID_BYTEORDER 3 // Not expected byte order
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
89 #define CYG_LOADERR_INVALID_VERSION 4 // Not expected ELF version
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
90 #define CYG_LOADERR_INVALID_MACHINE 5 // Not expected machine type
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
91 #define CYG_LOADERR_NO_MEMORY 6 // No memory
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
92 #define CYG_LOADERR_EOF 7 // End of input stream
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
93 #define CYG_LOADERR_SEEK 8 // Cannot seek to stream position
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
94 #define CYG_LOADERR_INVALID_RELOC 9 // Invalid or unexpected relocation
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
95 #define CYG_LOADERR_NO_HASHTABLE 10 // No hash table in ELF file
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
96 #define CYG_LOADERR_NO_SYMTAB 11 // No symbol table in ELF file
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
97 #define CYG_LOADERR_NO_STRTAB 12 // No srting table in ELF file
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
98 #define CYG_LOADERR_NO_SYMBOL 13 // Symbol not found
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
99
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
100 // -------------------------------------------------------------------------
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
101 // Value for undefined or otherwise invalid symbol addresses.
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
102
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
103 #define CYG_LOADER_NULLSYMADDR 0
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
104
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
105 // -------------------------------------------------------------------------
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
106 // Loader Stream base class.
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
107 // This defines the interface to data streams that are ELF dynamic executable
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
108 // files.
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
109
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
110 class Cyg_LoaderStream
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
111 {
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
112 public:
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
113
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
114 Cyg_LoaderStream(); // Constructor
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
115
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
116 virtual ~Cyg_LoaderStream(); // Destructor
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
117
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
118
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
119 // The following functions are virtual and are supplied by a
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
120 // derived class to access to data stream.
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
121
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
122 virtual cyg_code get_byte(CYG_BYTE *val); // Get a byte from the stream
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
123
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
124 virtual cyg_code get_data(CYG_BYTE *addr, CYG_ADDRWORD size);
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
125
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
126 virtual cyg_code seek(CYG_ADDRWORD pos); // seek to given position
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
127
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
128 // The following functions all make use of the virtual functions
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
129 // to access the data stream.
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
130
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
131 cyg_code get_word16(CYG_WORD16 *val); // get a 16 bit value
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
132
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
133 cyg_code get_word32(CYG_WORD32 *val); // get a 32 bit value
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
134
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
135 cyg_code get_word64(CYG_WORD64 *val); // get a 64 bit value
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
136 };
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
137
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
138 // -------------------------------------------------------------------------
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
139 // Memory allocation object. All memory allocated by the Loader is described
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
140 // by one of these.
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
141
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
142 struct Cyg_LoaderMemBlock
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
143 : public Cyg_DNode_T<Cyg_LoaderMemBlock>
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
144 {
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
145 void *address; // data address
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
146 cyg_int32 size; // block size
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
147 cyg_int32 alignment; // block alignment
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
148 Cyg_LoaderMemAlloc *mem; // allocator used
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
149 CYG_ADDRESS actual_address; // allocator specific actual address for block
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
150 CYG_WORD32 actual_size; // allocator specific actual size for block
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
151
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
152 // Convenience free() function
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
153 void free();
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
154 };
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
155
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
156 // -------------------------------------------------------------------------
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
157 // Memory allocator base class
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
158 // This defines the interface to a memory allocator used by the loader.
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
159
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
160 class Cyg_LoaderMemAlloc
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
161 {
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
162
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
163 public:
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
164
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
165 Cyg_LoaderMemAlloc();
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
166
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
167 virtual ~Cyg_LoaderMemAlloc();
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
168
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
169 // The following functions are virtual so that alternative memory
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
170 // allocators may be implemented. The default behaviour of this
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
171 // class is to use malloc/realloc/free to support these functions.
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
172
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
173 // Allocate memory of the supplied size and alignment.
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
174 // size - size in bytes
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
175 // alignment - alignment expressed as a power of 2
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
176 // defaults to 8 byte alignment
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
177 virtual Cyg_LoaderMemBlock *alloc( cyg_int32 size,
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
178 cyg_int32 alignment = 8);
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
179
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
180 // Reallocate block
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
181 // block - block to reallocate
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
182 // size - new size in bytes
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
183 // alignment - new alignment, -1 if old alignment is to be used.
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
184 virtual Cyg_LoaderMemBlock *realloc( Cyg_LoaderMemBlock *block,
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
185 cyg_int32 size,
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
186 cyg_int32 alignment = -1);
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
187
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
188 // Free a previously allocated memory segment.
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
189 virtual void free( Cyg_LoaderMemBlock *block );
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
190
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
191 };
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
192
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
193 // -------------------------------------------------------------------------
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
194 // Cyg_LoaderMemBlock convenience free() function implementation.
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
195
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
196 inline void Cyg_LoaderMemBlock::free() { mem->free(this); };
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
197
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
198 // -------------------------------------------------------------------------
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
199 // A loaded object
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
200
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
201 class Cyg_LoadObject_Base
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
202 : public Cyg_DNode_T<Cyg_LoadObject>
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
203 {
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
204 friend class Cyg_Loader;
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
205
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
206 protected:
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
207 // The following fields come from the constructor arguments
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
208
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
209 cyg_uint32 mode; // mode flags
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
210
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
211 Cyg_LoaderMemAlloc *memalloc; // Memory allocator
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
212
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
213
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
214 // The following fields are derived from the ELF header
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
215
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
216 Elf32_Word e_type; // File type
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
217
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
218 Elf32_Addr e_entry; // Executable entry point
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
219
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
220
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
221
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
222 // The following fields are derived from the PT_DYNAMIC segment in
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
223 // the program header. These fields are named after the DT_ tags
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
224 // that their values are derived from.
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
225
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
226 Elf32_Word flags; // flags from DT_FLAGS
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
227
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
228 Elf32_Word soname; // name of module, if defined
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
229
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
230 Elf_Hash *hash; // address of hash table
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
231 Elf32_Word *bucket; // derived bucket array address
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
232 Elf32_Word *chain; // derived chain array address
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
233
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
234 // String table
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
235 unsigned char *strtab; // address of table
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
236 Elf32_Word strsize; // size of table in bytes
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
237
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
238 // Symbol table
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
239 Elf32_Sym *symtab; // address of table
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
240 Elf32_Word syment; // size of entry
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
241
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
242 // PTL and GOT
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
243 Elf32_Addr pltgot; // address of PLT and/or GOT
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
244
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
245 // PLT relocation entries
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
246 Elf32_Addr jmprel; // address of relocation table
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
247 Elf32_Word pltrelsz; // size of jmprel table in bytes
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
248 Elf32_Word pltrel; // type of table entries: DT_REL
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
249 // or DT_RELA
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
250
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
251 // Relocation table with implicit addends
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
252 Elf32_Rel *rel; // table address
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
253 Elf32_Word relsize; // table size in bytes
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
254 Elf32_Word relent; // size of entry
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
255
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
256 // Relocation table with explicit addends
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
257 Elf32_Rela *rela; // table address
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
258 Elf32_Word relasize; // table size in bytes
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
259 Elf32_Word relaent; // size of entry
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
260
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
261 // Init and Fini support
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
262 Elf32_Addr init; // address of init function
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
263 Elf32_Addr fini; // address of fini function
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
264 Elf32_Addr *init_array; // address of init array
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
265 Elf32_Word init_array_sz; // size of init array
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
266 Elf32_Addr *fini_array; // address of fini array
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
267 Elf32_Word fini_array_sz; // size of fini array
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
268 Elf32_Addr *pre_init_array; // address of pre_init array
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
269 Elf32_Word pre_init_array_sz; // size of pre_init array
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
270
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
271 Elf32_Dyn *dynamic; // address of _DYNAMIC section
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
272
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
273 CYG_ADDRESS base; // base address used in address and
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
274 // relocation calcualtions
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
275
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
276 Cyg_CList_T<Cyg_LoaderMemBlock> segs; // chain of loaded segments
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
277
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
278 cyg_code error; // most recent error code
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
279
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
280
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
281 // private functions
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
282
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
283 void parse_dynamic( Elf32_Dyn *dynamic );
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
284
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
285 // Translate a symbol from its symbol table index into its
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
286 // actual address
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
287
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
288 CYG_ADDRESS get_sym_addr_from_ix( Elf32_Word sym );
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
289
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
290 // Get a symbol from this object's symbol table.
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
291 Elf32_Sym *get_sym( Elf32_Word ix );
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
292
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
293 // Get a name from this object's string table.
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
294 char *get_name( Elf32_Word offset );
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
295
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
296 // Look up the name in the hash table and return its symbol
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
297 // table entry, or NULL if not found.
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
298 Elf32_Sym *hash_lookup( const char *name );
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
299
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
300
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
301 // Look up the name in the hash table and return its absolute
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
302 // address or CYG_LOADER_NULLSYMADDR if it is not found.
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
303 CYG_ADDRESS hash_lookup_addr( const char *name );
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
304
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
305 // Standard ELF-defined hash function for symbol table.
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
306 static unsigned long elf_hash( const unsigned char *name );
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
307
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
308 public:
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
309
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
310 // Constructor - reads and allocates the executable.
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
311
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
312 Cyg_LoadObject_Base();
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
313
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
314 Cyg_LoadObject_Base( Cyg_LoaderStream& stream,
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
315 cyg_uint32 mode,
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
316 Cyg_LoaderMemAlloc *mem );
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
317
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
318 ~Cyg_LoadObject_Base(); // Destructor
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
319
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
320 inline cyg_code get_error() { return error; };
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
321
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
322 // Translate a symbol into its address.
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
323 void *symbol( const char *name );
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
324
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
325 // Start this executable running
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
326 cyg_code exec(int argc, char **argv, char **envv);
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
327 };
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
328
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
329 #endif // __cplusplus
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
330
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
331 #endif // CYG_LOADER_DYNAMIC_LD
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
332
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
333 // -------------------------------------------------------------------------
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
334 // All the following files should have suitable ifdefs so that only
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
335 // one actually provides content.
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
336
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
337 #include <cyg/loader/mips_elf.h> // MIPS ELF support
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
338 #include <cyg/loader/arm_elf.h> // ARM ELF support
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
339 #include <cyg/loader/i386_elf.h> // i386 ELF support
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
340 #include <cyg/loader/ppc_elf.h> // PowerPC ELF support
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
341 //#include <cyg/loader/sparc_elf.h> // Sparc ELF support
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
342 //#include <cyg/loader/sh_elf.h> // SH ELF support
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
343
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
344 // -------------------------------------------------------------------------
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
345
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
346 #ifndef CYG_LOADER_DYNAMIC_LD
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
347
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
348 #ifdef __cplusplus
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
349
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
350 class Cyg_LoadObject :
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
351 public Cyg_LoadObject_Proc
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
352 {
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
353 Cyg_LoaderMemBlock *block;
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
354
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
355 public:
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
356
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
357 inline Cyg_LoadObject()
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
358 : Cyg_LoadObject_Proc()
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
359 {
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
360 };
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
361
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
362 inline Cyg_LoadObject( Cyg_LoaderStream& stream,
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
363 cyg_uint32 mode,
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
364 Cyg_LoaderMemAlloc *mem,
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
365 Cyg_LoaderMemBlock *ablock = NULL)
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
366 : Cyg_LoadObject_Proc( stream, mode, mem )
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
367 {
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
368 block = ablock;
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
369 };
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
370
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
371 inline ~Cyg_LoadObject() {};
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
372
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
373 Cyg_LoaderMemBlock *get_block() { return block; };
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
374
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
375 // Apply dynamic relocations to the executable
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
376 void relocate();
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
377
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
378 // Apply PLT relocations
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
379 void relocate_plt();
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
380 };
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
381
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
382 // -------------------------------------------------------------------------
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
383 // Main loader class
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
384
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
385 class Cyg_Loader
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
386 {
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
387 // current error code.
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
388 cyg_code error;
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
389
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
390 // Default memory allocator.
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
391 Cyg_LoaderMemAlloc *mem_default;
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
392
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
393 // Load object for main program
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
394 Cyg_LoadObject *main;
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
395
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
396 // List of loaded executables, including the main
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
397 // program and all libraries.
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
398 Cyg_CList_T<Cyg_LoadObject> loadlist;
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
399
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
400 public:
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
401
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
402 Cyg_Loader( Cyg_LoaderMemAlloc *mem); // Constructor
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
403
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
404 ~Cyg_Loader(); // Destructor
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
405
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
406
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
407 // Load an object and all its dependencies.
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
408 cyg_code load( Cyg_LoaderStream& stream,
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
409 cyg_uint32 mode,
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
410 Cyg_LoadObject **object);
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
411
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
412 // Close an object and remove it from memory
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
413 cyg_code close( Cyg_LoadObject *object );
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
414
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
415 // Translate current error code into a string.
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
416 const char *error_string( );
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
417
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
418 // Look up a symbol
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
419 Elf32_Sym *hash_lookup( const char *name );
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
420
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
421 // look up a named symbol in loadlist and return its
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
422 // address relocated to its load address.
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
423 CYG_ADDRESS hash_lookup_addr( const char *name );
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
424
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
425 // Static pointer to loader object
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
426 static Cyg_Loader *loader;
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
427 };
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
428
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
429 //==========================================================================
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
430 // Memory based loader stream
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
431
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
432 class Cyg_LoaderStream_Mem
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
433 : public Cyg_LoaderStream
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
434 {
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
435 CYG_ADDRESS base;
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
436 CYG_ADDRESS pos;
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
437 CYG_ADDRESS end;
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
438
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
439 public:
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
440
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
441 Cyg_LoaderStream_Mem( const void *addr, cyg_int32 size );
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
442
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
443 ~Cyg_LoaderStream_Mem(); // Destructor
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
444
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
445 cyg_code get_byte(CYG_BYTE *val); // Get a byte from the stream
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
446
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
447 cyg_code get_data(CYG_BYTE *addr, CYG_ADDRWORD size);
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
448
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
449 cyg_code seek(CYG_ADDRWORD pos); // seek to given position
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
450
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
451 };
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
452
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
453 //==========================================================================
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
454 // Fileio based loader stream
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
455
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
456 #ifdef CYGPKG_IO_FILEIO
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
457
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
458 class Cyg_LoaderStream_File
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
459 : public Cyg_LoaderStream
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
460 {
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
461 int fd;
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
462
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
463 public:
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
464
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
465 Cyg_LoaderStream_File( int afd );
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
466
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
467 ~Cyg_LoaderStream_File(); // Destructor
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
468
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
469 cyg_code get_byte(CYG_BYTE *val); // Get a byte from the stream
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
470
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
471 cyg_code get_data(CYG_BYTE *addr, CYG_ADDRWORD size);
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
472
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
473 cyg_code seek(CYG_ADDRWORD pos); // seek to given position
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
474
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
475 };
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
476
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
477 #endif
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
478
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
479 // -------------------------------------------------------------------------
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
480
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
481 #endif // __cplusplus
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
482
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
483 #endif // CYG_LOADER_DYNAMIC_LD
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
484
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
485 // -------------------------------------------------------------------------
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
486 #endif // ifndef CYGONCE_LOADER_LOADER_HXX
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents:
diff changeset
487 // EOF loader.hxx