mirror of
https://github.com/rui314/mold.git
synced 2024-09-22 02:20:51 +03:00
Support global functions as exception handlers
Fixes a crash while building Gentoo's dev-lang/luajit-2.0.5-r3 package.
This commit is contained in:
parent
1d16374763
commit
2a5a15c858
@ -364,24 +364,24 @@ void ObjectFile<E>::read_ehframe(Context<E> &ctx, InputSection<E> &isec) {
|
||||
fdes[i].cie_idx = find_cie(fdes[i].input_offset + 4 - cie_offset);
|
||||
}
|
||||
|
||||
auto get_isec = [&](const FdeRecord<E> &fde) -> InputSection<E> * {
|
||||
return get_section(elf_syms[rels[fde.rel_idx].r_sym]);
|
||||
};
|
||||
|
||||
// We assume that FDEs for the same input sections are contiguous
|
||||
// in `fdes` vector.
|
||||
std::stable_sort(fdes.begin() + fdes_begin, fdes.end(),
|
||||
[&](const FdeRecord<E> &a, const FdeRecord<E> &b) {
|
||||
InputSection<E> *x = this->symbols[rels[a.rel_idx].r_sym]->input_section;
|
||||
InputSection<E> *y = this->symbols[rels[b.rel_idx].r_sym]->input_section;
|
||||
return x->get_priority() < y->get_priority();
|
||||
return get_isec(a)->get_priority() < get_isec(b)->get_priority();
|
||||
});
|
||||
|
||||
// Associate FDEs to input sections.
|
||||
for (i64 i = fdes_begin; i < fdes.size();) {
|
||||
InputSection<E> *isec =
|
||||
this->symbols[rels[fdes[i].rel_idx].r_sym]->input_section;
|
||||
InputSection<E> *isec = get_isec(fdes[i]);
|
||||
assert(isec->fde_begin == -1);
|
||||
isec->fde_begin = i++;
|
||||
|
||||
while (i < fdes.size() &&
|
||||
isec == this->symbols[rels[fdes[i].rel_idx].r_sym]->input_section)
|
||||
while (i < fdes.size() && isec == get_isec(fdes[i]))
|
||||
i++;
|
||||
isec->fde_end = i;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user