зеркало из https://github.com/CryptoPro/go.git
fix divide by zero in old glibc dynamic loader
R=r CC=iant http://go/go-review/1018024
This commit is contained in:
Родитель
74a52ee75f
Коммит
6334b499e8
|
@ -307,14 +307,21 @@ doelf(void)
|
|||
|
||||
/*
|
||||
* hash table - empty for now.
|
||||
* we should have to fill it out with an entry for every
|
||||
* symbol in .dynsym, but it seems to work not to,
|
||||
* which is fine with me.
|
||||
* only entries that other objects need to find when
|
||||
* linking us need to be in this table. right now that
|
||||
* is no entries.
|
||||
*
|
||||
* must have at least 1 bucket, though, to avoid
|
||||
* a divide by zero bug in some copies of the
|
||||
* glibc dynamic loader.
|
||||
*/
|
||||
s = lookup(".hash", 0);
|
||||
s->type = SDATA; // TODO: rodata
|
||||
s->reachable = 1;
|
||||
s->value += 8; // two leading zeros
|
||||
adduint32(s, 1); // nbucket
|
||||
adduint32(s, 1); // nchain
|
||||
adduint32(s, 0); // bucket[0]
|
||||
adduint32(s, 0); // chain[0]
|
||||
|
||||
/* dynamic symbol table - first entry all zeros */
|
||||
s = lookup(".dynsym", 0);
|
||||
|
|
Загрузка…
Ссылка в новой задаче