1
0
mirror of https://github.com/golang/go synced 2024-11-22 04:54:42 -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:
Ian Lance Taylor 2011-10-04 21:25:11 -07:00
parent 0b534bc9c3
commit a55de2ba61
3 changed files with 8 additions and 3 deletions

View File

@ -232,7 +232,7 @@ doelf(void)
/* define dynamic elf table */
s = lookup(".dynamic", 0);
s->reachable = 1;
s->type = SELFROSECT;
s->type = SELFSECT; // writable
/*
* .dynamic table
@ -251,6 +251,7 @@ doelf(void)
elfwritedynent(s, DT_PLTREL, DT_REL);
elfwritedynentsymsize(s, DT_PLTRELSZ, lookup(".rel.plt", 0));
elfwritedynentsym(s, DT_JMPREL, lookup(".rel.plt", 0));
elfwritedynent(s, DT_DEBUG, 0);
elfwritedynent(s, DT_NULL, 0);
}
}

View File

@ -649,7 +649,7 @@ doelf(void)
/* define dynamic elf table */
s = lookup(".dynamic", 0);
s->reachable = 1;
s->type = SELFROSECT;
s->type = SELFSECT; // writable
/*
* .dynamic table
@ -670,6 +670,8 @@ doelf(void)
elfwritedynentsymsize(s, DT_PLTRELSZ, 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.
}
}

View File

@ -607,7 +607,7 @@ doelf(void)
/* define dynamic elf table */
s = lookup(".dynamic", 0);
s->reachable = 1;
s->type = SELFROSECT;
s->type = SELFSECT; // writable
/*
* .dynamic table
@ -627,6 +627,8 @@ doelf(void)
elfwritedynentsymsize(s, DT_PLTRELSZ, 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.
}
}