Menu

[r3929]: / trunk / ld / ld_input.h  Maximize  Restore  History

Download this file

122 lines (113 with data), 5.4 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
/*-
* Copyright (c) 2011-2013 Kai Wang
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id$
*/
struct ld_reloc_entry_head;
struct ld_ehframe_fde_head;
struct ld_section_group {
char *sg_name;
UT_hash_handle hh;
};
struct ld_input_section {
char *is_name; /* section name */
struct ld_input *is_input; /* containing input object */
struct ld_output_section *is_output; /* containing output section */
uint64_t is_off; /* section file offset */
uint64_t is_reloff; /* relative offset in output section */
uint64_t is_addr; /* section vma */
uint64_t is_size; /* section file size */
uint64_t is_shrink; /* section shrinked bytes */
uint64_t is_entsize; /* seciton entry size */
uint64_t is_align; /* section align */
uint64_t is_type; /* section type */
uint64_t is_flags; /* section flags */
uint64_t is_link; /* section link */
uint64_t is_info; /* section info */
uint64_t is_index; /* section index */
unsigned char is_discard; /* dicard section */
unsigned char is_dynrel; /* section holds dynamic relocations */
unsigned char is_pltrel; /* section holds PLT relocations */
unsigned char is_refed; /* should not be gc'ed */
unsigned char is_need_reloc; /* need apply relocation */
void *is_data; /* output section data descriptor */
void *is_ibuf; /* buffer for internal sections */
void *is_ehframe; /* temp buffer for ehframe section. */
struct ld_reloc_entry_head *is_reloc; /* list of relocation entries */
uint64_t is_num_reloc; /* number of reloc entries */
struct ld_input_section *is_tis; /* relocation target */
struct ld_input_section *is_ris; /* relocation section */
struct ld_ehframe_fde_head *is_fde; /* list of FDE */
STAILQ_ENTRY(ld_input_section) is_next; /* next section */
STAILQ_ENTRY(ld_input_section) is_gc_next; /* next gc search */
UT_hash_handle hh; /* hash handle (internal section) */
};
STAILQ_HEAD(ld_input_section_head, ld_input_section);
enum ld_input_type {
LIT_UNKNOWN,
LIT_RELOCATABLE,
LIT_DSO,
};
struct ld_symver_verdef_head;
struct ld_input {
char *li_name; /* input object name */
char *li_fullname; /* input object and archive name */
char *li_soname; /* input object DT_SONAME. */
Elf *li_elf; /* input object ELF descriptor */
enum ld_input_type li_type; /* input object kind */
struct ld_file *li_file; /* containing file */
size_t li_shnum; /* num of sections in ELF object */
struct ld_input_section *li_is; /* input section list */
struct ld_input_section *li_istbl; /* internal section hash table */
struct ld_archive_member *li_lam; /* archive member */
struct ld_symbol_head *li_local; /* local symbol list */
struct ld_symbol **li_symindex; /* symbol index table */
size_t li_symnum; /* number of symbols */
char **li_vername; /* version name array */
size_t li_vername_sz; /* version name array size */
uint16_t *li_versym; /* symbol version array */
size_t li_versym_sz; /* symbol version array size */
int li_dso_refcnt; /* symbol reference count (DSO) */
struct ld_symver_verdef_head *li_verdef; /* version definition */
STAILQ_ENTRY(ld_input) li_next; /* next input object */
};
void ld_input_init(struct ld *);
void ld_input_add_symbol(struct ld *, struct ld_input *,
struct ld_symbol *);
struct ld_input_section *ld_input_add_internal_section(struct ld *,
const char *);
struct ld_input_section *ld_input_find_internal_section(struct ld *,
const char *);
void ld_input_alloc_internal_section_buffers(struct ld *);
struct ld_input *ld_input_alloc(struct ld *, struct ld_file *, const char *);
void ld_input_alloc_common_symbol(struct ld *, struct ld_symbol *);
void *ld_input_get_section_rawdata(struct ld *, struct ld_input_section *);
void ld_input_cleanup(struct ld *);
char *ld_input_get_fullname(struct ld *, struct ld_input *);
void ld_input_init_sections(struct ld *, struct ld_input *, Elf *);
void ld_input_link_objects(struct ld *);
void ld_input_load(struct ld *, struct ld_input *);
void ld_input_unload(struct ld *, struct ld_input *);
uint64_t ld_input_reserve_ibuf(struct ld_input_section *, uint64_t);
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.