- Document that the *fsize() functions return a size of 1 for Elf

types that don't have a fixed size.
- The *fsize() functions should return a size of 1, for variable length
  types.
- Redefine symbol ELF_T_LAST to match the current end of the list.

Obtained from:	elftoolchain
MFC after:		1 month
This commit is contained in:
Kai Wang 2010-07-21 10:39:29 +00:00
parent f0f10541db
commit fff07a4233
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=210340
4 changed files with 10 additions and 12 deletions

View File

@ -47,9 +47,8 @@ These functions return the size in bytes of the file representation of
.Ar count
numbers of objects of ELF type
.Ar type .
Argument
.Ar type
must be one that has a fixed size file representation.
For ELF types that are of variable length, these functions return a
size of one byte.
.Pp
Functions
.Fn elf32_fsize
@ -83,10 +82,6 @@ had an unknown ELF class.
Argument
.Ar type
contained an illegal value.
.It Bq Er ELF_E_ARGUMENT
Argument
.Ar type
denoted an ELF type with variable size.
.It Bq Er ELF_E_UNIMPL
Support for ELF type
.Ar type

View File

@ -80,7 +80,7 @@ typedef enum {
} Elf_Type;
#define ELF_T_FIRST ELF_T_ADDR
#define ELF_T_LAST ELF_T_XWORD
#define ELF_T_LAST ELF_T_GNUHASH
/* Commands */
typedef enum {

View File

@ -42,6 +42,10 @@ _libelf_xlate_shtype(uint32_t sht)
return (ELF_T_SYM);
case SHT_FINI_ARRAY:
return (ELF_T_ADDR);
#if __FreeBSD_version >= 800062
case SHT_GNU_HASH:
return (ELF_T_GNUHASH);
#endif
case SHT_GROUP:
return (ELF_T_WORD);
case SHT_HASH:

View File

@ -48,8 +48,8 @@ define(`BYTE_SIZE', 1)
define(`IDENT_SIZE', `EI_NIDENT')
/* Types that have variable length. */
define(`GNUHASH_SIZE', 0)
define(`NOTE_SIZE', 0)
define(`GNUHASH_SIZE', 1)
define(`NOTE_SIZE', 1)
/* Currently unimplemented types. */
define(`MOVEP_SIZE', 0)
@ -145,8 +145,7 @@ _libelf_fsize(Elf_Type t, int ec, unsigned int v, size_t c)
sz = 0;
if (v != EV_CURRENT)
LIBELF_SET_ERROR(VERSION, 0);
else if ((int) t < ELF_T_FIRST || t > ELF_T_LAST ||
t == ELF_T_NOTE || t == ELF_T_GNUHASH)
else if ((int) t < ELF_T_FIRST || t > ELF_T_LAST)
LIBELF_SET_ERROR(ARGUMENT, 0);
else {
sz = ec == ELFCLASS64 ? fsize[t].fsz64 : fsize[t].fsz32;