PERFORCE change 108891 for review
John Birrell
jb at FreeBSD.org
Wed Nov 1 06:55:01 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=108891
Change 108891 by jb at jb_freebsd8 on 2006/11/01 06:53:52
IFlibbsdelf
Affected files ...
.. //depot/projects/dtrace/src/lib/libelf/Makefile#14 integrate
.. //depot/projects/dtrace/src/lib/libelf/_libelf.h#9 integrate
.. //depot/projects/dtrace/src/lib/libelf/elf_data.c#2 integrate
.. //depot/projects/dtrace/src/lib/libelf/elf_getdata.3#3 integrate
.. //depot/projects/dtrace/src/lib/libelf/elf_getscn.3#2 integrate
.. //depot/projects/dtrace/src/lib/libelf/elf_getshnum.3#1 branch
.. //depot/projects/dtrace/src/lib/libelf/elf_getshstrndx.3#1 branch
.. //depot/projects/dtrace/src/lib/libelf/elf_scn.c#3 integrate
.. //depot/projects/dtrace/src/lib/libelf/elf_shnum.c#1 branch
.. //depot/projects/dtrace/src/lib/libelf/elf_shstrndx.c#1 branch
.. //depot/projects/dtrace/src/lib/libelf/elf_update.3#4 integrate
.. //depot/projects/dtrace/src/lib/libelf/elf_update.c#4 integrate
.. //depot/projects/dtrace/src/lib/libelf/gelf_getmove.3#1 branch
.. //depot/projects/dtrace/src/lib/libelf/gelf_getsyminfo.3#1 branch
.. //depot/projects/dtrace/src/lib/libelf/gelf_newphdr.3#3 integrate
.. //depot/projects/dtrace/src/lib/libelf/gelf_update.c#3 integrate
.. //depot/projects/dtrace/src/lib/libelf/libelf.c#5 integrate
.. //depot/projects/dtrace/src/lib/libelf/libelf.h#10 integrate
.. //depot/projects/dtrace/src/lib/libelf/libelf_align.c#1 branch
.. //depot/projects/dtrace/src/lib/libelf/libelf_allocate.c#5 integrate
.. //depot/projects/dtrace/src/lib/libelf/libelf_convert.m4#10 integrate
.. //depot/projects/dtrace/src/lib/libelf/libelf_data.c#2 integrate
.. //depot/projects/dtrace/src/lib/libelf/libelf_fsize.m4#5 integrate
.. //depot/projects/dtrace/src/lib/libelf/libelf_msize.m4#4 integrate
.. //depot/projects/dtrace/src/lib/libelf/libelf_phdr.c#3 integrate
Differences ...
==== //depot/projects/dtrace/src/lib/libelf/Makefile#14 (text+ko) ====
@@ -18,6 +18,8 @@
elf_next.c \
elf_rand.c \
elf_rawfile.c \
+ elf_shnum.c \
+ elf_shstrndx.c \
elf_scn.c \
elf_strptr.c \
elf_update.c \
@@ -35,6 +37,7 @@
gelf_update.c \
gelf_xlate.c \
libelf.c \
+ libelf_align.c \
libelf_allocate.c \
libelf_ar.c \
libelf_checksum.c \
@@ -66,6 +69,8 @@
elf_getdata.3 \
elf_getident.3 \
elf_getscn.3 \
+ elf_getshnum.3 \
+ elf_getshstrndx.3 \
elf_hash.3 \
elf_kind.3 \
elf_memory.3 \
@@ -81,22 +86,18 @@
gelf_getclass.3 \
gelf_getdyn.3 \
gelf_getehdr.3 \
+ gelf_getmove.3 \
gelf_getphdr.3 \
gelf_getrel.3 \
gelf_getrela.3 \
gelf_getshdr.3 \
gelf_getsym.3 \
+ gelf_getsyminfo.3 \
gelf_newehdr.3 \
gelf_newphdr.3 \
gelf_update_ehdr.3 \
gelf_xlatetof.3
-MLINKS+= \
- gelf.3 gelf_getmove.3 \
- gelf.3 gelf_getsyminfo.3 \
- gelf.3 gelf_update_move.3 \
- gelf.3 gelf_update_syminfo.3
-
MLINKS+= \
elf_errmsg.3 elf_errno.3 \
elf_flagdata.3 elf_flagehdr.3 \
@@ -109,10 +110,13 @@
elf_getscn.3 elf_ndxscn.3 \
elf_getscn.3 elf_newscn.3 \
elf_getscn.3 elf_nextscn.3 \
+ elf_getshstrndx.3 elf_setshstrndx.3 \
gelf_getdyn.3 gelf_update_dyn.3 \
+ gelf_getmove.3 gelf_update_move.3 \
gelf_getrel.3 gelf_update_rel.3 \
gelf_getrela.3 gelf_update_rela.3 \
gelf_getsym.3 gelf_update_sym.3 \
+ gelf_getsyminfo.3 gelf_update_syminfo.3 \
gelf_update_ehdr.3 gelf_update_phdr.3 \
gelf_update_ehdr.3 gelf_update_shdr.3 \
gelf_xlatetof.3 gelf_xlatetom.3
==== //depot/projects/dtrace/src/lib/libelf/_libelf.h#9 (text+ko) ====
@@ -146,11 +146,14 @@
int _libelf_dump64(Elf *_elf, const char *_name, const char *_outfile,
unsigned int _flags);
void *_libelf_ehdr(Elf *_e, int _elfclass, int _allocate);
+int _libelf_falign(Elf_Type _t, int _elfclass);
size_t _libelf_fsize(Elf_Type _t, int _elfclass, unsigned int _version,
size_t count);
void (*_libelf_get_translator(Elf_Type _t, int _direction, int _elfclass))
(char *_dst, char *_src, int _cnt, int _byteswap);
void *_libelf_getphdr(Elf *_e, int _elfclass);
+int _libelf_getshnum(void *_eh, int _elfclass, size_t *_shnum);
+int _libelf_getshstrndx(void *_eh, int _elfclass, size_t *_shstrndx);
void _libelf_init_elf(Elf *_e, Elf_Kind _kind);
int _libelf_malign(Elf_Type _t, int _elfclass);
size_t _libelf_msize(Elf_Type _t, int _elfclass, unsigned int _version);
@@ -158,6 +161,8 @@
Elf_Data *_libelf_release_data(Elf_Data *_d);
Elf *_libelf_release_elf(Elf *_e);
Elf_Scn *_libelf_release_scn(Elf_Scn *_s);
+int _libelf_setshnum(void *_eh, int _elfclass, size_t _shnum);
+int _libelf_setshstrndx(void *_eh, int _elfclass, size_t _shstrndx);
Elf_Data *_libelf_xlate(Elf_Data *_d, const Elf_Data *_s,
unsigned int _encoding, int _elfclass, int _direction);
int _libelf_xlate_shtype(size_t _sht);
==== //depot/projects/dtrace/src/lib/libelf/elf_data.c#2 (text+ko) ====
@@ -140,26 +140,24 @@
return (NULL);
}
- if (e->e_cmd == ELF_C_READ) {
- LIBELF_SET_ERROR(MODE, 0);
- return (NULL);
- }
-
if ((d = malloc(sizeof(Elf_Data))) == NULL) {
LIBELF_SET_ERROR(RESOURCE, errno);
return (NULL);
}
STAILQ_INSERT_TAIL(&s->s_data, d, d_next);
+ d->d_flags = 0;
d->d_scn = s;
+ d->d_align = 1;
d->d_buf = NULL;
d->d_off = (off_t) -1;
- d->d_align = 1;
d->d_size = 0;
d->d_type = ELF_T_BYTE;
d->d_version = LIBELF_PRIVATE(version);
+ (void) elf_flagscn(s, ELF_C_SET, ELF_F_DIRTY);
+
return (d);
}
==== //depot/projects/dtrace/src/lib/libelf/elf_getdata.3#3 (text+ko) ====
@@ -145,10 +145,6 @@
.Ar data
was not associated with section descriptor
.Ar scn .
-.It Bq Er ELF_E_MODE
-Section descriptor
-.Ar scn
-was not associated with a file opened for writing.
.It Bq Er ELF_E_RESOURCE
An out of memory condition was detected.
.El
==== //depot/projects/dtrace/src/lib/libelf/elf_getscn.3#2 (text+ko) ====
@@ -79,10 +79,6 @@
.Dv ( SHN_UNDEF )
on the first call to
.Fn elf_newscn .
-Function
-.Fn elf_newscn
-is only valid for ELF descriptors opened for writing or for reading
-and writing.
.Pp
Function
.Fn elf_nextscn
@@ -133,10 +129,10 @@
.Ar scn
was not associated with ELF descriptor
.Ar elf .
-.It Bq Er ELF_E_MODE
-ELF descriptor
+.It Bq Er ELF_E_CLASS
+Descriptor
.Ar elf
-was not opened for writing.
+was of an unknown ELF class.
.El
.Sh SEE ALSO
.Xr elf 3 ,
@@ -144,4 +140,4 @@
.Xr elf_flagscn 3 ,
.Xr elf_getdata 3 ,
.Xr elf_getshdr 3 ,
-.Xr gelf 3+.Xr gelf 3
==== //depot/projects/dtrace/src/lib/libelf/elf_scn.c#3 (text+ko) ====
@@ -163,12 +163,16 @@
uint16_t *pshnum;
Elf_Scn *scn;
- if (e == NULL || e->e_kind != ELF_K_ELF ||
- ((ec = e->e_class) != ELFCLASS32 && ec != ELFCLASS64)) {
+ if (e == NULL || e->e_kind != ELF_K_ELF) {
LIBELF_SET_ERROR(ARGUMENT, 0);
return (NULL);
}
+ if ((ec = e->e_class) != ELFCLASS32 && ec != ELFCLASS64) {
+ LIBELF_SET_ERROR(CLASS, 0);
+ return (NULL);
+ }
+
if ((ehdr = _libelf_ehdr(e, ec, 0)) == NULL)
return (NULL);
@@ -195,13 +199,13 @@
assert(*pshnum == 0);
if ((scn = _libelf_allocate_scn(e, SHN_UNDEF)) == NULL)
return (NULL);
- *pshnum++;
+ (*pshnum)++;
}
if ((scn = _libelf_allocate_scn(e, *pshnum)) == NULL)
return (NULL);
- *pshnum++;
+ (*pshnum)++;
(void) elf_flagscn(scn, ELF_C_SET, ELF_F_DIRTY);
==== //depot/projects/dtrace/src/lib/libelf/elf_update.3#4 (text+ko) ====
@@ -131,7 +131,7 @@
This value must be a power of two.
.It Va sh_entsize
Set to the size of each entry, for sections containing fixed size
-elements.
+elements, or set to zero for sections without fixed size elements.
For section contents of types known to the library, the application
may leave this field as zero.
.It Va sh_flags
@@ -205,13 +205,7 @@
.Vt Elf_Data
descriptor contained in argument
.Ar elf
-had a type or version mismatch.
-.It Bq Er ELF_E_DATA
-An
-.Vt Elf_Data
-descriptor contained in argument
-.Ar elf
-specified an alignment incompatible with its containing section.
+specified a type incompatible with its containing section.
.It Bq Er ELF_E_HEADER
The ELF header in argument
.Ar elf
@@ -220,6 +214,12 @@
.It Bq Er ELF_E_IO
An I/O error was encountered.
.It Bq Er ELF_E_LAYOUT
+An
+.Vt Elf_Data
+descriptor contained in argument
+.Ar elf
+specified an alignment incompatible with its containing section.
+.It Bq Er ELF_E_LAYOUT
Argument
.Ar elf
contained section descriptors that overlapped in extent.
==== //depot/projects/dtrace/src/lib/libelf/elf_update.c#4 (text+ko) ====
@@ -88,7 +88,8 @@
* `dirty'. Affected members include `d_align', `d_offset', `d_type',
* and `d_size'.
* - The section as a whole is `dirty', e.g., it has been allocated
- * using elf_newscn().
+ * using elf_newscn(), or if a new Elf_Data structure was added using
+ * elf_newdata().
*
* Each of these conditions would result in the ELF_F_DIRTY bit being
* set on the section descriptor's `s_flags' field.
@@ -126,7 +127,7 @@
scn_alignment = 0;
if (sh_align == 0)
- sh_align = _libelf_malign(elftype, ec);
+ sh_align = _libelf_falign(elftype, ec);
STAILQ_FOREACH_SAFE(d, &s->s_data, d_next, td) {
if (d->d_type != elftype) {
@@ -138,7 +139,7 @@
return (0);
}
if (d->d_align % sh_align) {
- LIBELF_SET_ERROR(DATA, 0);
+ LIBELF_SET_ERROR(LAYOUT, 0);
return (0);
}
@@ -166,9 +167,16 @@
if (scn_alignment > sh_align)
sh_align = scn_alignment;
- if (sh_entsize == 0)
- sh_entsize = _libelf_fsize(elftype, ec, e->e_version,
- 1);
+ /*
+ * If the section entry size is zero, try and fill in an
+ * appropriate entry size. Per the elf(5) manual page
+ * sections without fixed-size entries should have their
+ * 'sh_entsize' field set to zero.
+ */
+ if (sh_entsize == 0 &&
+ (sh_entsize = _libelf_fsize(elftype, ec, e->e_version,
+ 1)) == 1)
+ sh_entsize = 0;
sh_size = scn_size;
sh_offset = roundup(*rc, sh_align);
@@ -382,7 +390,7 @@
*/
if (phnum) {
fsz = _libelf_fsize(ELF_T_PHDR, ec, eh_version, phnum);
- align = _libelf_malign(ELF_T_PHDR, ec);
+ align = _libelf_falign(ELF_T_PHDR, ec);
if (e->e_flags & ELF_F_LAYOUT) {
/*
@@ -401,7 +409,7 @@
} else
phoff = roundup(rc, align);
- rc = phoff + fsz * phnum;
+ rc = phoff + fsz;
} else
phoff = 0;
@@ -419,7 +427,7 @@
*/
if (shnum) {
fsz = _libelf_fsize(ELF_T_SHDR, ec, eh_version, 1);
- align = _libelf_malign(ELF_T_SHDR, ec);
+ align = _libelf_falign(ELF_T_SHDR, ec);
if (e->e_flags & ELF_F_LAYOUT) {
if (rc < shoff) {
@@ -486,7 +494,7 @@
msz = _libelf_msize(elftype, ec, e->e_version);
sh_off = s->s_offset;
- assert(sh_off % _libelf_malign(elftype, ec) == 0);
+ assert(sh_off % _libelf_falign(elftype, ec) == 0);
/*
* If the section has a `rawdata' descriptor, and the section
@@ -547,13 +555,13 @@
fsz = _libelf_fsize(elftype, ec, e->e_version, nobjects);
dst.d_buf = nf + rc;
- dst.d_size = fsz * nobjects;
+ dst.d_size = fsz;
if (_libelf_xlate(&dst, d, e->e_byteorder, ec, ELF_TOFILE) ==
NULL)
return ((off_t) -1);
- rc += fsz * nobjects;
+ rc += fsz;
}
return ((off_t) rc);
@@ -650,9 +658,9 @@
if (phnum != 0 && phoff != 0) {
assert((unsigned) rc <= phoff);
- fsz = _libelf_fsize(ELF_T_PHDR, ec, e->e_version, 1);
+ fsz = _libelf_fsize(ELF_T_PHDR, ec, e->e_version, phnum);
- assert(phoff % _libelf_malign(ELF_T_PHDR, ec) == 0);
+ assert(phoff % _libelf_falign(ELF_T_PHDR, ec) == 0);
assert(fsz > 0);
src.d_version = dst.d_version = e->e_version;
@@ -672,12 +680,13 @@
(void) memset(newfile + rc,
LIBELF_PRIVATE(fillchar), phoff - rc);
- rc = phoff;
dst.d_buf = newfile + rc;
if (_libelf_xlate(&dst, &src, e->e_byteorder, ec, ELF_TOFILE) ==
NULL)
goto error;
+
+ rc = phoff + fsz;
}
/*
@@ -701,7 +710,7 @@
rc = shoff;
- assert(rc % _libelf_malign(ELF_T_SHDR, ec) == 0);
+ assert(rc % _libelf_falign(ELF_T_SHDR, ec) == 0);
src.d_type = ELF_T_SHDR;
src.d_size = _libelf_msize(ELF_T_SHDR, ec, e->e_version);
==== //depot/projects/dtrace/src/lib/libelf/gelf_newphdr.3#3 (text+ko) ====
@@ -43,8 +43,13 @@
.Ft "void *"
.Fn gelf_newphdr "Elf *elf" "size_t count"
.Sh DESCRIPTION
-These functions allocate an ELF program header
+These functions allocate an ELF Program Header table
for an ELF descriptor.
+.Vt Elf32_Phdr
+and
+.Vt Elf64_Phdr
+descriptors are described further in
+.Xr elf 5 .
.Pp
Functions
.Fn elf32_newphdr
@@ -56,18 +61,13 @@
and
.Vt Elf64_Phdr
descriptors respectively,
-ignoring any existing program header table
+discarding any existing program header table
already present in the ELF descriptor
.Ar elf .
A value of zero for argument
.Ar count
may be used to delete an existing program header table
from an ELF descriptor.
-.Vt Elf32_Phdr
-and
-.Vt Elf64_Phdr
-descriptors are described in
-.Xr elf 5 .
.Pp
Function
.Fn gelf_newphdr
@@ -80,7 +80,7 @@
elements depending on the ELF class of ELF descriptor
.Ar elf .
.Pp
-The functions set the
+The functions set the
.Va e_phnum
field of the executable header for ELF descriptor
.Ar elf
@@ -89,6 +89,17 @@
and also set the
.Dv ELF_F_DIRTY
bit on the program header table.
+All members of the returned array of Phdr structures
+will be initialized to zero.
+.Pp
+After a successful call to these functions, the pointer returned
+by a prior call to
+.Fn elf32_getphdr
+or
+.Fn elf64_getphdr
+on the same descriptor
+.Ar elf
+will no longer be valid.
.Sh RETURN VALUES
The functions a valid pointer if successful, or NULL in case an error
was encountered.
@@ -110,8 +121,7 @@
.It Bq Er ELF_E_RESOURCE
An out of memory condition was detected.
.It Bq Er ELF_E_SEQUENCE
-An executable header was not allocated
-for writable ELF descriptor
+An executable header was not allocated for ELF descriptor
.Ar elf
before using these APIs.
.El
==== //depot/projects/dtrace/src/lib/libelf/gelf_update.c#3 (text+ko) ====
==== //depot/projects/dtrace/src/lib/libelf/libelf.c#5 (text+ko) ====
@@ -46,65 +46,6 @@
};
-struct memalign {
- int ma32;
- int ma64;
-};
-
-#ifdef __GNUC__
-#define ALIGNMENT(N) { \
- .ma32 = __alignof__(Elf32_##N), \
- .ma64 = __alignof__(Elf64_##N) \
- }
-#define ALIGN64(V) { \
- .ma32 = 0, \
- .ma64 = __alignof__(Elf64_##V) \
- }
-#else
-#error Need the __alignof__ builtin.
-#endif
-#define UNSUPPORTED() { \
- .ma32 = 0, \
- .ma64 = 0 \
- }
-
-static struct memalign memalign[ELF_T_NUM] = {
- [ELF_T_ADDR] = ALIGNMENT(Addr),
- [ELF_T_BYTE] = { .ma32 = 1, .ma64 = 1 },
- [ELF_T_CAP] = ALIGNMENT(Cap),
- [ELF_T_DYN] = ALIGNMENT(Dyn),
- [ELF_T_EHDR] = ALIGNMENT(Ehdr),
- [ELF_T_HALF] = ALIGNMENT(Half),
- [ELF_T_MOVE] = ALIGNMENT(Move),
- [ELF_T_MOVEP] = UNSUPPORTED(),
- [ELF_T_NOTE] = ALIGNMENT(Nhdr),
- [ELF_T_OFF] = ALIGNMENT(Off),
- [ELF_T_PHDR] = ALIGNMENT(Phdr),
- [ELF_T_REL] = ALIGNMENT(Rel),
- [ELF_T_RELA] = ALIGNMENT(Rela),
- [ELF_T_SHDR] = ALIGNMENT(Shdr),
- [ELF_T_SWORD] = ALIGNMENT(Sword),
- [ELF_T_SXWORD] = ALIGN64(Sxword),
- [ELF_T_SYMINFO] = ALIGNMENT(Syminfo),
- [ELF_T_SYM] = ALIGNMENT(Sym),
-#if __FreeBSD_version >= 700009
- [ELF_T_VDEF] = ALIGNMENT(Verdef),
- [ELF_T_VNEED] = ALIGNMENT(Verneed),
-#endif
- [ELF_T_WORD] = ALIGNMENT(Word),
- [ELF_T_XWORD] = ALIGN64(Xword)
-};
-
-int
-_libelf_malign(Elf_Type t, int elfclass)
-{
- if (t >= ELF_T_NUM || (int) t < 0)
- return (0);
-
- return (elfclass == ELFCLASS32 ? memalign[t].ma32 :
- memalign[t].ma64);
-}
-
#if defined(LIBELF_TEST_HOOKS)
int
_libelf_get_elf_class(Elf *elf)
==== //depot/projects/dtrace/src/lib/libelf/libelf.h#10 (text+ko) ====
@@ -106,9 +106,9 @@
* `Public' members that are part of the ELF(3) API.
*/
uint64_t d_align;
+ void *d_buf;
uint64_t d_off;
uint64_t d_size;
- void *d_buf;
Elf_Type d_type;
unsigned int d_version;
@@ -233,6 +233,7 @@
off_t elf_rand(Elf *_elf, off_t _off);
Elf_Data *elf_rawdata(Elf_Scn *_scn, Elf_Data *_data);
char *elf_rawfile(Elf *_elf, size_t *_size);
+int elf_setshstrndx(Elf *_elf, size_t _shnum);
char *elf_strptr(Elf *_elf, size_t _section, size_t _offset);
off_t elf_update(Elf *_elf, Elf_Cmd _cmd);
unsigned int elf_version(unsigned int _version);
==== //depot/projects/dtrace/src/lib/libelf/libelf_allocate.c#5 (text+ko) ====
@@ -165,7 +165,7 @@
STAILQ_INIT(&s->s_data);
STAILQ_INIT(&s->s_rawdata);
- STAILQ_INSERT_HEAD(&e->e_u.e_elf.e_scn, s, s_next);
+ STAILQ_INSERT_TAIL(&e->e_u.e_elf.e_scn, s, s_next);
return (s);
}
==== //depot/projects/dtrace/src/lib/libelf/libelf_convert.m4#10 (text+ko) ====
@@ -223,7 +223,7 @@
include(SRCDIR`/elf_types.m4')
/*
- * `IGNORE'_XXX flags turn off generation of template code.
+ * `IGNORE'_* flags turn off generation of template code.
*/
define(`IGNORE',
@@ -234,11 +234,15 @@
IGNORE(NOTE)
ifelse(eval(OSRELDATE < 700009),1,
- `IGNORE(VDEF)
- IGNORE(VNEED)',
+ `IGNORE(CAP)
+ IGNORE(MOVE)
+ IGNORE(SYMINFO)
+ IGNORE(VDEF)
+ IGNORE(VNEED)
+ define(`IGNORE_LWORD', 1)',
`')
-define(IGNORE_BYTE, 1)
+define(IGNORE_BYTE, 1) /* 'lator, leave 'em bytes alone */
define(IGNORE_SXWORD32, 1)
define(IGNORE_XWORD32, 1)
@@ -481,9 +485,6 @@
(void) memcpy(dst, src, count);
}
-#define libelf_cvt_BYTE_tom libelf_cvt_BYTE_tox
-#define libelf_cvt_BYTE_tof libelf_cvt_BYTE_tox
-
MAKE_TYPE_CONVERTERS(ELF_TYPE_LIST)
struct converters {
@@ -498,7 +499,9 @@
`ifdef(`IGNORE_'$1$2,
`.$3$2 = NULL',
`ifdef(`BASE_'$1,
- `.$3$2 = libelf_cvt_$1_$3',
+ `ifdef(`IGNORE_'$1,
+ `.$3$2 = NULL',
+ `.$3$2 = libelf_cvt_$1_$3')',
`ifdef(`SIZEDEP_'$1,
`.$3$2 = libelf_cvt_$1$2_$3',
`.$3$2 = libelf_cvt$2_$1_$3')')')')
@@ -518,6 +521,13 @@
static struct converters cvt[ELF_T_NUM] = {
CONVERTER_NAMES(ELF_TYPE_LIST)
+
+ [ELF_T_BYTE] = {
+ .tof32 = libelf_cvt_BYTE_tox,
+ .tom32 = libelf_cvt_BYTE_tox,
+ .tof64 = libelf_cvt_BYTE_tox,
+ .tom64 = libelf_cvt_BYTE_tox
+ }
};
void (*_libelf_get_translator(Elf_Type t, int direction, int elfclass))
==== //depot/projects/dtrace/src/lib/libelf/libelf_data.c#2 (text+ko) ====
@@ -66,12 +66,16 @@
case SHT_SYMTAB:
return (ELF_T_SYM);
#if __FreeBSD_version > 700009
- case SHT_GNU_verdef:
+ case SHT_GNU_verdef: /* == SHT_SUNW_verdef */
return (ELF_T_VDEF);
- case SHT_GNU_verneed:
+ case SHT_GNU_verneed: /* == SHT_SUNW_verneed */
return (ELF_T_VNEED);
- case SHT_GNU_versym:
- return (ELF_T_SYM);
+ case SHT_GNU_versym: /* == SHT_SUNW_versym */
+ return (-1); /* XXX */
+ case SHT_SUNW_move:
+ return (ELF_T_MOVE);
+ case SHT_SUNW_syminfo:
+ return (ELF_T_SYMINFO);
#endif
default:
return (-1);
==== //depot/projects/dtrace/src/lib/libelf/libelf_fsize.m4#5 (text+ko) ====
@@ -55,7 +55,11 @@
define(`SXWORD_SIZE32', 0)
ifelse(eval(OSRELDATE < 700009),1,
- `define(`VDEF_SIZE', 0)
+ `define(`CAP_SIZE', 0)
+ define(`LWORD_SIZE', 0)
+ define(`MOVE_SIZE', 0)
+ define(`SYMINFO_SIZE', 0)
+ define(`VDEF_SIZE', 0)
define(`VNEED_SIZE', 0)',`')
/*
==== //depot/projects/dtrace/src/lib/libelf/libelf_msize.m4#4 (text+ko) ====
@@ -58,7 +58,11 @@
define(XWORD_SIZE32, 0)
ifelse(eval(OSRELDATE < 700009),1,
- `define(`VDEF_SIZE', 0)
+ `define(`CAP_SIZE', 0)
+ define(`LWORD_SIZE', 0)
+ define(`MOVE_SIZE', 0)
+ define(`SYMINFO_SIZE', 0)
+ define(`VDEF_SIZE', 0)
define(`VNEED_SIZE', 0)',`')
define(`DEFINE_ELF_MSIZE',
==== //depot/projects/dtrace/src/lib/libelf/libelf_phdr.c#3 (text+ko) ====
@@ -135,7 +135,8 @@
assert(msz > 0);
- if ((nphdr = calloc(count, msz)) == NULL) {
+ nphdr = NULL;
+ if (count > 0 && (nphdr = calloc(count, msz)) == NULL) {
LIBELF_SET_ERROR(RESOURCE, 0);
return (NULL);
}
More information about the p4-projects
mailing list