PERFORCE change 104171 for review
John Birrell
jb at FreeBSD.org
Wed Aug 16 02:09:08 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=104171
Change 104171 by jb at jb_freebsd2 on 2006/08/16 02:08:07
Add pointers for a place to hang copies of the program and section
header arrays cached in host endian format.
Note that the host ELF format may differ from the target one, so the
choice of the 32- or 64-bit versions depends on the target data
type. However the variables in the cached arrays are in host endian
order so that they can be accessed directly.
Free allocated memory when freeing the allocated ELF structure.
Affected files ...
.. //depot/projects/dtrace/src/lib/libelf/_libelf.h#3 edit
.. //depot/projects/dtrace/src/lib/libelf/elf_allocate.c#4 edit
Differences ...
==== //depot/projects/dtrace/src/lib/libelf/_libelf.h#3 (text+ko) ====
@@ -83,8 +83,17 @@
size_t e_rawsize; /* size of uninterpreted bytes */
unsigned int e_version; /* file version */
+ /*
+ * Cached data in host byte order. Pointers are to malloc'ed
+ * memory and the dimensions of the arrays are in the relevant
+ * header.
+ */
Elf32_Ehdr e_eh32; /* 32-bit ELF header */
Elf64_Ehdr e_eh64; /* 64-bit ELF header */
+ Elf32_Phdr *e_ph32; /* Ptr to the 32-bit program header array */
+ Elf64_Phdr *e_ph64; /* Ptr to the 64-bit program header array */
+ Elf32_Shdr *e_sh32; /* Ptr to the 32-bit section header array */
+ Elf64_Shdr *e_sh64; /* Ptr to the 64-bit section header array */
union {
struct { /* ar(1) archives */
==== //depot/projects/dtrace/src/lib/libelf/elf_allocate.c#4 (text+ko) ====
@@ -36,6 +36,7 @@
#include <assert.h>
#include <libelf.h>
#include <stdlib.h>
+#include <string.h>
#include "_libelf.h"
@@ -69,5 +70,13 @@
void
_libelf_release_elf(Elf *e)
{
+ if (e->e_ph32 != NULL)
+ free(e->e_ph32);
+ if (e->e_ph64 != NULL)
+ free(e->e_ph64);
+ if (e->e_sh32 != NULL)
+ free(e->e_sh32);
+ if (e->e_sh64 != NULL)
+ free(e->e_sh64);
free(e);
}
More information about the p4-projects
mailing list