Commit 44e51fad authored by Russ Cox's avatar Russ Cox

6l: fix divide by zero in glibc linker.

repeats 8l change http://code.google.com/p/go/source/detail?r=7594e16b5cf9

Fixes #179.

R=iant
https://golang.org/cl/154145
parent 1cdfe9fa
...@@ -320,15 +320,22 @@ doelf(void) ...@@ -320,15 +320,22 @@ doelf(void)
addstring(lookup(".interp", 0), linuxdynld); addstring(lookup(".interp", 0), linuxdynld);
/* /*
* hash table - empty for now. * hash table.
* we should have to fill it out with an entry for every * only entries that other objects need to find when
* symbol in .dynsym, but it seems to work not to, * linking us need to be in the table. right now that is
* which is fine with me. * 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 = lookup(".hash", 0);
s->type = SDATA; // TODO: rodata s->type = SDATA; // TODO: rodata
s->reachable = 1; 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 */ /* dynamic symbol table - first entry all zeros */
s = lookup(".dynsym", 0); s = lookup(".dynsym", 0);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment