mirror of
https://github.com/rui314/mold.git
synced 2024-09-22 10:27:48 +03:00
temporary
This commit is contained in:
parent
437d2b3838
commit
6fd54ac100
7
main.cc
7
main.cc
@ -416,8 +416,11 @@ static void scan_rels() {
|
||||
if (sym->flags & Symbol::NEEDS_GOTTPOFF)
|
||||
out::got->add_gottp_symbol(sym);
|
||||
|
||||
if ((sym->flags & Symbol::NEEDS_TLSGD) || (sym->flags & Symbol::NEEDS_TLSLD))
|
||||
;
|
||||
if (sym->flags & Symbol::NEEDS_TLSGD)
|
||||
out::got->add_tlsgd_symbol(sym);
|
||||
|
||||
if (sym->flags & Symbol::NEEDS_TLSLD)
|
||||
out::got->add_tlsld_symbol(sym);
|
||||
}
|
||||
}
|
||||
|
||||
|
24
mold.h
24
mold.h
@ -199,8 +199,8 @@ public:
|
||||
inline u64 get_got_addr() const;
|
||||
inline u64 get_gotplt_addr() const;
|
||||
inline u64 get_gottp_addr() const;
|
||||
inline u64 get_gotgd_addr() const;
|
||||
inline u64 get_gotld_addr() const;
|
||||
inline u64 get_tlsgd_addr() const;
|
||||
inline u64 get_tlsld_addr() const;
|
||||
inline u64 get_plt_addr() const;
|
||||
|
||||
StringRef name;
|
||||
@ -212,8 +212,8 @@ public:
|
||||
u32 got_idx = -1;
|
||||
u32 gotplt_idx = -1;
|
||||
u32 gottp_idx = -1;
|
||||
u32 gotgd_idx = -1;
|
||||
u32 gotld_idx = -1;
|
||||
u32 tlsgd_idx = -1;
|
||||
u32 tlsld_idx = -1;
|
||||
u32 plt_idx = -1;
|
||||
u32 relplt_idx = -1;
|
||||
u32 dynsym_idx = -1;
|
||||
@ -413,10 +413,14 @@ public:
|
||||
|
||||
void add_symbol(Symbol *sym);
|
||||
void add_gottp_symbol(Symbol *sym);
|
||||
void add_tlsgd_symbol(Symbol *sym);
|
||||
void add_tlsld_symbol(Symbol *sym);
|
||||
void copy_buf() override;
|
||||
|
||||
std::vector<Symbol *> got_syms;
|
||||
std::vector<Symbol *> gottp_syms;
|
||||
std::vector<Symbol *> tlsgd_syms;
|
||||
std::vector<Symbol *> tlsld_syms;
|
||||
};
|
||||
|
||||
class GotPltSection : public OutputChunk {
|
||||
@ -763,14 +767,14 @@ inline u64 Symbol::get_gottp_addr() const {
|
||||
return out::got->shdr.sh_addr + gottp_idx * GOT_SIZE;
|
||||
}
|
||||
|
||||
inline u64 Symbol::get_gotgd_addr() const {
|
||||
assert(gotgd_idx != -1);
|
||||
return out::got->shdr.sh_addr + gotgd_idx * GOT_SIZE;
|
||||
inline u64 Symbol::get_tlsgd_addr() const {
|
||||
assert(tlsgd_idx != -1);
|
||||
return out::got->shdr.sh_addr + tlsgd_idx * GOT_SIZE;
|
||||
}
|
||||
|
||||
inline u64 Symbol::get_gotld_addr() const {
|
||||
assert(gotld_idx != -1);
|
||||
return out::got->shdr.sh_addr + gotld_idx * GOT_SIZE;
|
||||
inline u64 Symbol::get_tlsld_addr() const {
|
||||
assert(tlsld_idx != -1);
|
||||
return out::got->shdr.sh_addr + tlsld_idx * GOT_SIZE;
|
||||
}
|
||||
|
||||
inline u64 Symbol::get_plt_addr() const {
|
||||
|
@ -395,6 +395,18 @@ void GotSection::add_gottp_symbol(Symbol *sym) {
|
||||
gottp_syms.push_back(sym);
|
||||
}
|
||||
|
||||
void GotSection::add_tlsgd_symbol(Symbol *sym) {
|
||||
sym->tlsgd_idx = shdr.sh_size / GOT_SIZE;
|
||||
shdr.sh_size += GOT_SIZE * 2;
|
||||
tlsgd_syms.push_back(sym);
|
||||
}
|
||||
|
||||
void GotSection::add_tlsld_symbol(Symbol *sym) {
|
||||
sym->tlsld_idx = shdr.sh_size / GOT_SIZE;
|
||||
shdr.sh_size += GOT_SIZE;
|
||||
tlsld_syms.push_back(sym);
|
||||
}
|
||||
|
||||
void GotSection::copy_buf() {
|
||||
u64 *buf = (u64 *)(out::buf + shdr.sh_offset);
|
||||
memset(buf, 0, shdr.sh_size);
|
||||
|
Loading…
Reference in New Issue
Block a user