mirror of
https://github.com/golang/go
synced 2024-11-22 11:04:40 -07:00
5l/6l/8l: add a DT_DEBUG dynamic tag to a dynamic ELF binary
This requires making the .dynamic section writable, as the dynamic linker will change the value of the DT_DEBUG tag at runtime. The DT_DEBUG tag is used by gdb to find all loaded shared libraries. R=rsc CC=golang-dev https://golang.org/cl/5189044
This commit is contained in:
parent
0b534bc9c3
commit
a55de2ba61
@ -232,7 +232,7 @@ doelf(void)
|
|||||||
/* define dynamic elf table */
|
/* define dynamic elf table */
|
||||||
s = lookup(".dynamic", 0);
|
s = lookup(".dynamic", 0);
|
||||||
s->reachable = 1;
|
s->reachable = 1;
|
||||||
s->type = SELFROSECT;
|
s->type = SELFSECT; // writable
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* .dynamic table
|
* .dynamic table
|
||||||
@ -251,6 +251,7 @@ doelf(void)
|
|||||||
elfwritedynent(s, DT_PLTREL, DT_REL);
|
elfwritedynent(s, DT_PLTREL, DT_REL);
|
||||||
elfwritedynentsymsize(s, DT_PLTRELSZ, lookup(".rel.plt", 0));
|
elfwritedynentsymsize(s, DT_PLTRELSZ, lookup(".rel.plt", 0));
|
||||||
elfwritedynentsym(s, DT_JMPREL, lookup(".rel.plt", 0));
|
elfwritedynentsym(s, DT_JMPREL, lookup(".rel.plt", 0));
|
||||||
|
elfwritedynent(s, DT_DEBUG, 0);
|
||||||
elfwritedynent(s, DT_NULL, 0);
|
elfwritedynent(s, DT_NULL, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -649,7 +649,7 @@ doelf(void)
|
|||||||
/* define dynamic elf table */
|
/* define dynamic elf table */
|
||||||
s = lookup(".dynamic", 0);
|
s = lookup(".dynamic", 0);
|
||||||
s->reachable = 1;
|
s->reachable = 1;
|
||||||
s->type = SELFROSECT;
|
s->type = SELFSECT; // writable
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* .dynamic table
|
* .dynamic table
|
||||||
@ -670,6 +670,8 @@ doelf(void)
|
|||||||
elfwritedynentsymsize(s, DT_PLTRELSZ, lookup(".rela.plt", 0));
|
elfwritedynentsymsize(s, DT_PLTRELSZ, lookup(".rela.plt", 0));
|
||||||
elfwritedynentsym(s, DT_JMPREL, lookup(".rela.plt", 0));
|
elfwritedynentsym(s, DT_JMPREL, lookup(".rela.plt", 0));
|
||||||
|
|
||||||
|
elfwritedynent(s, DT_DEBUG, 0);
|
||||||
|
|
||||||
// Do not write DT_NULL. elfdynhash will finish it.
|
// Do not write DT_NULL. elfdynhash will finish it.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -607,7 +607,7 @@ doelf(void)
|
|||||||
/* define dynamic elf table */
|
/* define dynamic elf table */
|
||||||
s = lookup(".dynamic", 0);
|
s = lookup(".dynamic", 0);
|
||||||
s->reachable = 1;
|
s->reachable = 1;
|
||||||
s->type = SELFROSECT;
|
s->type = SELFSECT; // writable
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* .dynamic table
|
* .dynamic table
|
||||||
@ -627,6 +627,8 @@ doelf(void)
|
|||||||
elfwritedynentsymsize(s, DT_PLTRELSZ, lookup(".rel.plt", 0));
|
elfwritedynentsymsize(s, DT_PLTRELSZ, lookup(".rel.plt", 0));
|
||||||
elfwritedynentsym(s, DT_JMPREL, lookup(".rel.plt", 0));
|
elfwritedynentsym(s, DT_JMPREL, lookup(".rel.plt", 0));
|
||||||
|
|
||||||
|
elfwritedynent(s, DT_DEBUG, 0);
|
||||||
|
|
||||||
// Do not write DT_NULL. elfdynhash will finish it.
|
// Do not write DT_NULL. elfdynhash will finish it.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user