mirror of
https://github.com/rui314/mold.git
synced 2024-12-28 02:44:48 +03:00
temporary
This commit is contained in:
parent
a87d9986f9
commit
0d5570bd42
44
main.cc
44
main.cc
@ -335,39 +335,25 @@ static void scan_rels(ArrayRef<ObjectFile *> files) {
|
|||||||
|
|
||||||
tbb::parallel_for_each(files, [&](ObjectFile *file) { file->scan_relocations(); });
|
tbb::parallel_for_each(files, [&](ObjectFile *file) { file->scan_relocations(); });
|
||||||
|
|
||||||
u32 got_offset = 0;
|
|
||||||
u32 gotplt_offset = 0;
|
|
||||||
u32 plt_offset = 0;
|
|
||||||
u32 relplt_offset = 0;
|
|
||||||
u32 dynsym_offset = 0;
|
|
||||||
u32 dynstr_offset = 0;
|
|
||||||
|
|
||||||
for (ObjectFile *file : files) {
|
for (ObjectFile *file : files) {
|
||||||
file->got_offset = got_offset;
|
file->got_offset = out::got.shdr.sh_size;
|
||||||
got_offset += file->got_size;
|
out::got.shdr.sh_size += file->got_size;
|
||||||
|
|
||||||
file->gotplt_offset = gotplt_offset;
|
file->gotplt_offset = out::gotplt.shdr.sh_size;
|
||||||
gotplt_offset += file->gotplt_size;
|
out::gotplt.shdr.sh_size += file->gotplt_size;
|
||||||
|
|
||||||
file->plt_offset = plt_offset;
|
file->plt_offset = out::plt.shdr.sh_size;
|
||||||
plt_offset += file->plt_size;
|
out::plt.shdr.sh_size += file->plt_size;
|
||||||
|
|
||||||
file->relplt_offset = relplt_offset;
|
file->relplt_offset = out::relplt.shdr.sh_size;
|
||||||
relplt_offset += file->relplt_size;
|
out::relplt.shdr.sh_size += file->relplt_size;
|
||||||
|
|
||||||
file->dynsym_offset = dynsym_offset;
|
file->dynsym_offset = out::dynsym.shdr.sh_size;
|
||||||
dynsym_offset += file->dynsym_size;
|
out::dynsym.shdr.sh_size += file->dynsym_size;
|
||||||
|
|
||||||
file->dynstr_offset = dynstr_offset;
|
file->dynstr_offset = out::dynstr.shdr.sh_size;
|
||||||
dynstr_offset += file->dynstr_size;
|
out::dynstr.shdr.sh_size += file->dynstr_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
out::got.shdr.sh_size = got_offset;
|
|
||||||
out::gotplt.shdr.sh_size = gotplt_offset;
|
|
||||||
out::plt.shdr.sh_size = plt_offset;
|
|
||||||
out::relplt.shdr.sh_size = relplt_offset;
|
|
||||||
out::dynsym.shdr.sh_size = dynsym_offset;
|
|
||||||
out::dynstr.shdr.sh_size = dynstr_offset;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void assign_got_offsets(ArrayRef<ObjectFile *> files) {
|
static void assign_got_offsets(ArrayRef<ObjectFile *> files) {
|
||||||
@ -428,6 +414,8 @@ static void write_got(u8 *buf, ArrayRef<ObjectFile *> files) {
|
|||||||
u8 *got = buf + out::got.shdr.sh_offset;
|
u8 *got = buf + out::got.shdr.sh_offset;
|
||||||
u8 *plt = buf + out::plt.shdr.sh_offset;
|
u8 *plt = buf + out::plt.shdr.sh_offset;
|
||||||
u8 *relplt = buf + out::relplt.shdr.sh_offset;
|
u8 *relplt = buf + out::relplt.shdr.sh_offset;
|
||||||
|
u8 *dynsym = buf + out::dynsym.shdr.sh_offset;
|
||||||
|
u8 *dynstr = buf + out::dynstr.shdr.sh_offset;
|
||||||
|
|
||||||
memset(buf + out::gotplt.shdr.sh_offset, 0, out::gotplt.shdr.sh_size);
|
memset(buf + out::gotplt.shdr.sh_offset, 0, out::gotplt.shdr.sh_size);
|
||||||
|
|
||||||
@ -457,6 +445,10 @@ static void write_got(u8 *buf, ArrayRef<ObjectFile *> files) {
|
|||||||
rel->setType(R_X86_64_IRELATIVE, false);
|
rel->setType(R_X86_64_IRELATIVE, false);
|
||||||
rel->r_addend = sym->get_addr();
|
rel->r_addend = sym->get_addr();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (flags & Symbol::NEEDS_DYNSYM) {
|
||||||
|
auto *dsym = (ELF64LE::Sym *)(dynsym + sym->dynsym_offset);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user