From owner-p4-projects@FreeBSD.ORG Wed Oct 25 06:51:10 2006 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 64CA116A412; Wed, 25 Oct 2006 06:51:10 +0000 (UTC) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 176E816A407 for ; Wed, 25 Oct 2006 06:51:10 +0000 (UTC) (envelope-from jb@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id D91BF43D5D for ; Wed, 25 Oct 2006 06:51:09 +0000 (GMT) (envelope-from jb@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.6/8.13.6) with ESMTP id k9P6p9r2098146 for ; Wed, 25 Oct 2006 06:51:09 GMT (envelope-from jb@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id k9P6p9IT098139 for perforce@freebsd.org; Wed, 25 Oct 2006 06:51:09 GMT (envelope-from jb@freebsd.org) Date: Wed, 25 Oct 2006 06:51:09 GMT Message-Id: <200610250651.k9P6p9IT098139@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to jb@freebsd.org using -f From: John Birrell To: Perforce Change Reviews Cc: Subject: PERFORCE change 108390 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 25 Oct 2006 06:51:10 -0000 http://perforce.freebsd.org/chv.cgi?CH=108390 Change 108390 by jb@jb_freebsd7 on 2006/10/25 06:51:03 IFlibbsdelf Affected files ... .. //depot/projects/dtrace/src/lib/libelf/elf_types.m4#3 integrate .. //depot/projects/dtrace/src/lib/libelf/gelf_getphdr.3#2 integrate .. //depot/projects/dtrace/src/lib/libelf/libelf.c#4 integrate .. //depot/projects/dtrace/src/lib/libelf/libelf.h#9 integrate .. //depot/projects/dtrace/src/lib/libelf/libelf_convert.m4#9 integrate .. //depot/projects/dtrace/src/lib/libelf/libelf_fsize.m4#4 integrate .. //depot/projects/dtrace/src/lib/libelf/libelf_msize.m4#3 integrate .. //depot/projects/dtrace/src/lib/libelf/libelf_phdr.c#2 integrate Differences ... ==== //depot/projects/dtrace/src/lib/libelf/elf_types.m4#3 (text+ko) ==== @@ -35,6 +35,7 @@ `DYN, Dyn', `EHDR, Ehdr', `HALF, Half', + `LWORD, Lword', `MOVE, Move', `MOVEP, MoveP', `NOTE, Note', @@ -62,7 +63,7 @@ * in the sequence used in the file representation of `NAME'. * * Each member list element comprises a pair containing a field name - * and a basic type. Basic types include IDENT, HALF, WORD, + * and a basic type. Basic types include IDENT, HALF, WORD, LWORD, * ADDR{32,64}, OFF{32,64}, SWORD, XWORD, SXWORD. * * The last element of a member list is the null element: `_,_'. @@ -70,6 +71,16 @@ define(`DEFINE_STRUCT',`define(`$1_DEF',shift($@))dnl') +DEFINE_STRUCT(`Elf32_Cap', + ``c_tag, WORD', + `c_un.c_val, WORD', + `_,_'') + +DEFINE_STRUCT(`Elf64_Cap', + ``c_tag, XWORD', + `c_un.c_val, XWORD', + `_,_'') + DEFINE_STRUCT(`Elf32_Dyn', ``d_tag, SWORD', `d_un.d_ptr, WORD', @@ -114,6 +125,22 @@ `e_shstrndx, HALF', `_,_'') +DEFINE_STRUCT(`Elf32_Move', + ``m_value, LWORD', + `m_info, WORD', + `m_poffset, WORD', + `m_repeat, HALF', + `m_stride, HALF', + `_,_'') + +DEFINE_STRUCT(`Elf64_Move', + ``m_value, LWORD', + `m_info, XWORD', + `m_poffset, XWORD', + `m_repeat, HALF', + `m_stride, HALF', + `_,_'') + DEFINE_STRUCT(`Elf32_Phdr', ``p_type, WORD', `p_offset, OFF', @@ -202,6 +229,16 @@ `st_size, XWORD', `_,_'') +DEFINE_STRUCT(`Elf32_Syminfo', + ``si_boundto, HALF', + `si_flags, HALF', + `_,_'') + +DEFINE_STRUCT(`Elf64_Syminfo', + ``si_boundto, HALF', + `si_flags, HALF', + `_,_'') + DEFINE_STRUCT(`Elf32_Verdaux', ``vda_name, WORD', `vda_next, WORD', ==== //depot/projects/dtrace/src/lib/libelf/gelf_getphdr.3#2 (text+ko) ==== @@ -41,7 +41,7 @@ .Fn elf64_getphdr "Elf *elf" .In gelf.h .Ft "GElf_Phdr *" -.Fn gelf_getehdr "Elf *elf" "int index" "GElf_Phdr *dst" +.Fn gelf_getphdr "Elf *elf" "int index" "GElf_Phdr *dst" .Sh DESCRIPTION These functions retrieve and translate ELF program header information from an ELF descriptor, if this information exists. @@ -104,12 +104,24 @@ Index .Ar index was out of range. +.It Bq Er ELF_E_CLASS +The class of ELF descriptor +.Ar elf +did not match the expected class of the function being called. .It Bq Er ELF_E_HEADER ELF descriptor .Ar elf did not possess an executable header. +.It Bq Er ELF_E_HEADER +ELF descriptor +.Ar elf +had a corrupt executable header. .It Bq Er ELF_E_RESOURCE An out of memory condition was detected. +.It Bq Er ELF_VERSION +ELF descriptor +.Ar elf +was of an unsupported version. .El .Sh SEE ALSO .Xr elf 3 , ==== //depot/projects/dtrace/src/lib/libelf/libelf.c#4 (text+ko) ==== @@ -71,13 +71,13 @@ static struct memalign memalign[ELF_T_NUM] = { [ELF_T_ADDR] = ALIGNMENT(Addr), [ELF_T_BYTE] = { .ma32 = 1, .ma64 = 1 }, - [ELF_T_CAP] = UNSUPPORTED(), + [ELF_T_CAP] = ALIGNMENT(Cap), [ELF_T_DYN] = ALIGNMENT(Dyn), [ELF_T_EHDR] = ALIGNMENT(Ehdr), [ELF_T_HALF] = ALIGNMENT(Half), - [ELF_T_MOVE] = UNSUPPORTED(), + [ELF_T_MOVE] = ALIGNMENT(Move), [ELF_T_MOVEP] = UNSUPPORTED(), - [ELF_T_NOTE] = UNSUPPORTED(), + [ELF_T_NOTE] = ALIGNMENT(Nhdr), [ELF_T_OFF] = ALIGNMENT(Off), [ELF_T_PHDR] = ALIGNMENT(Phdr), [ELF_T_REL] = ALIGNMENT(Rel), @@ -85,7 +85,7 @@ [ELF_T_SHDR] = ALIGNMENT(Shdr), [ELF_T_SWORD] = ALIGNMENT(Sword), [ELF_T_SXWORD] = ALIGN64(Sxword), - [ELF_T_SYMINFO] = UNSUPPORTED(), + [ELF_T_SYMINFO] = ALIGNMENT(Syminfo), [ELF_T_SYM] = ALIGNMENT(Sym), #if __FreeBSD_version >= 700009 [ELF_T_VDEF] = ALIGNMENT(Verdef), ==== //depot/projects/dtrace/src/lib/libelf/libelf.h#9 (text+ko) ==== @@ -58,6 +58,7 @@ ELF_T_DYN, ELF_T_EHDR, ELF_T_HALF, + ELF_T_LWORD, ELF_T_MOVE, ELF_T_MOVEP, ELF_T_NOTE, ==== //depot/projects/dtrace/src/lib/libelf/libelf_convert.m4#9 (text+ko) ==== @@ -74,9 +74,10 @@ (X) = _t; \ } while (0) #define SWAP_ADDR64(X) SWAP_WORD64(X) +#define SWAP_LWORD(X) SWAP_WORD64(X) #define SWAP_OFF64(X) SWAP_WORD64(X) +#define SWAP_SXWORD(X) SWAP_WORD64(X) #define SWAP_XWORD(X) SWAP_WORD64(X) -#define SWAP_SXWORD(X) SWAP_WORD64(X) /* * Write out various integral values. The destination pointer could @@ -124,6 +125,7 @@ (P) = _p + 8; \ } while (0) #define WRITE_ADDR64(P,X) WRITE_WORD64(P,X) +#define WRITE_LWORD(P,X) WRITE_WORD64(P,X) #define WRITE_OFF64(P,X) WRITE_WORD64(P,X) #define WRITE_SXWORD(P,X) WRITE_WORD64(P,X) #define WRITE_XWORD(P,X) WRITE_WORD64(P,X) @@ -186,6 +188,7 @@ (X) = _t; \ } while (0) #define READ_ADDR64(P,X) READ_WORD64(P,X) +#define READ_LWORD(P,X) READ_WORD64(P,X) #define READ_OFF64(P,X) READ_WORD64(P,X) #define READ_SXWORD(P,X) READ_WORD64(P,X) #define READ_XWORD(P,X) READ_WORD64(P,X) @@ -227,11 +230,8 @@ `define(IGNORE_$1`'32, 1) define(IGNORE_$1`'64, 1)') -IGNORE(CAP) -IGNORE(MOVE) IGNORE(MOVEP) IGNORE(NOTE) -IGNORE(SYMINFO) ifelse(eval(OSRELDATE < 700009),1, `IGNORE(VDEF) @@ -250,6 +250,7 @@ define(`BASE_BYTE', 1) define(`BASE_HALF', 1) define(`BASE_WORD', 1) +define(`BASE_LWORD', 1) define(`BASE_SWORD', 1) define(`BASE_XWORD', 1) define(`BASE_SXWORD', 1) ==== //depot/projects/dtrace/src/lib/libelf/libelf_fsize.m4#4 (text+ko) ==== @@ -47,11 +47,8 @@ define(`IDENT_SIZE', `EI_NIDENT') /* Currently unimplemented types */ -define(`CAP_SIZE', 0) -define(`MOVE_SIZE', 0) define(`MOVEP_SIZE', 0) define(`NOTE_SIZE', 0) -define(`SYMINFO_SIZE', 0) /* Overrides for 32 bit types that do not exist */ define(`XWORD_SIZE32', 0) ==== //depot/projects/dtrace/src/lib/libelf/libelf_msize.m4#3 (text+ko) ==== @@ -52,11 +52,8 @@ /* * Unimplemented types. */ -define(CAP_SIZE, 0) -define(MOVE_SIZE, 0) define(MOVEP_SIZE, 0) define(NOTE_SIZE, 0) -define(SYMINFO_SIZE, 0) define(SXWORD_SIZE32, 0) define(XWORD_SIZE32, 0) ==== //depot/projects/dtrace/src/lib/libelf/libelf_phdr.c#2 (text+ko) ==== @@ -82,7 +82,7 @@ assert(fsz > 0); - if ((uint64_t) e->e_rawsize <= (phoff + fsz)) { + if ((uint64_t) e->e_rawsize < (phoff + fsz)) { LIBELF_SET_ERROR(HEADER, 0); return (NULL); }