summaryrefslogtreecommitdiffstats
path: root/rtemstoolkit/elftoolchain/libelf/libelf_convert.m4
diff options
context:
space:
mode:
Diffstat (limited to 'rtemstoolkit/elftoolchain/libelf/libelf_convert.m4')
-rw-r--r--rtemstoolkit/elftoolchain/libelf/libelf_convert.m4242
1 files changed, 122 insertions, 120 deletions
diff --git a/rtemstoolkit/elftoolchain/libelf/libelf_convert.m4 b/rtemstoolkit/elftoolchain/libelf/libelf_convert.m4
index 9b1679a..ec39590 100644
--- a/rtemstoolkit/elftoolchain/libelf/libelf_convert.m4
+++ b/rtemstoolkit/elftoolchain/libelf/libelf_convert.m4
@@ -24,15 +24,13 @@
* SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
-
#include <assert.h>
#include <libelf.h>
#include <string.h>
#include "_libelf.h"
-LIBELF_VCSID("$Id: libelf_convert.m4 1734 2011-08-16 09:55:07Z jkoshy $");
+ELFTC_VCSID("$Id: libelf_convert.m4 3429 2016-03-12 04:12:39Z emaste $");
/* WARNING: GENERATED FROM __file__. */
@@ -143,8 +141,8 @@ define(`SIZEDEP_OFF', 1)
# Generates a pair of conversion functions.
define(`MAKEPRIMFUNCS',`
static int
-libelf_cvt_$1$4_tof(char *dst, size_t dsz, char *src, size_t count,
- int byteswap)
+_libelf_cvt_$1$4_tof(unsigned char *dst, size_t dsz, unsigned char *src,
+ size_t count, int byteswap)
{
Elf$3_$2 t, *s = (Elf$3_$2 *) (uintptr_t) src;
size_t c;
@@ -166,8 +164,8 @@ libelf_cvt_$1$4_tof(char *dst, size_t dsz, char *src, size_t count,
}
static int
-libelf_cvt_$1$4_tom(char *dst, size_t dsz, char *src, size_t count,
- int byteswap)
+_libelf_cvt_$1$4_tom(unsigned char *dst, size_t dsz, unsigned char *src,
+ size_t count, int byteswap)
{
Elf$3_$2 t, *d = (Elf$3_$2 *) (uintptr_t) dst;
size_t c;
@@ -267,8 +265,8 @@ define(`READ_STRUCT',
# `$3': ELF class specifier, one of [`', `32', `64']
define(`MAKECOMPFUNCS', `ifdef(`NOFUNC_'$1$3,`',`
static int
-libelf_cvt_$1$3_tof(char *dst, size_t dsz, char *src, size_t count,
- int byteswap)
+_libelf_cvt_$1$3_tof(unsigned char *dst, size_t dsz, unsigned char *src,
+ size_t count, int byteswap)
{
Elf$3_$2 t, *s;
size_t c;
@@ -288,16 +286,16 @@ libelf_cvt_$1$3_tof(char *dst, size_t dsz, char *src, size_t count,
}
static int
-libelf_cvt_$1$3_tom(char *dst, size_t dsz, char *src, size_t count,
- int byteswap)
+_libelf_cvt_$1$3_tom(unsigned char *dst, size_t dsz, unsigned char *src,
+ size_t count, int byteswap)
{
- Elf$3_$2 t, *d;
- char *s,*s0;
+ Elf$3_$2 t, *d;
+ unsigned char *s,*s0;
size_t fsz;
fsz = elf$3_fsize(ELF_T_$1, (size_t) 1, EV_CURRENT);
d = ((Elf$3_$2 *) (uintptr_t) dst) + (count - 1);
- s0 = (char *) src + (count - 1) * fsz;
+ s0 = src + (count - 1) * fsz;
if (dsz < count * sizeof(Elf$3_$2))
return (0);
@@ -349,9 +347,9 @@ define(`CONV',
`.$3$2 = NULL',
`ifdef(`PRIM_'$1,
`ifdef(`SIZEDEP_'$1,
- `.$3$2 = libelf_cvt_$1$2_$3',
- `.$3$2 = libelf_cvt_$1_$3')',
- `.$3$2 = libelf_cvt_$1$2_$3')')')
+ `.$3$2 = _libelf_cvt_$1$2_$3',
+ `.$3$2 = _libelf_cvt_$1_$3')',
+ `.$3$2 = _libelf_cvt_$1$2_$3')')')
# CONVERTER_NAME(ELFTYPE)
#
@@ -398,8 +396,8 @@ define(`MAKE_VERSION_CONVERTERS',
# conversion function.
define(`MAKE_VERSION_CONVERTER',`
static int
-libelf_cvt_$1$5_tof(char *dst, size_t dsz, char *src, size_t count,
- int byteswap)
+_libelf_cvt_$1$5_tof(unsigned char *dst, size_t dsz, unsigned char *src,
+ size_t count, int byteswap)
{
Elf$5_$2 t;
Elf$5_$3 a;
@@ -407,12 +405,12 @@ libelf_cvt_$1$5_tof(char *dst, size_t dsz, char *src, size_t count,
const size_t auxfsz = FSZ(Elf$5_$3_DEF);
const size_t vermsz = sizeof(Elf$5_$2);
const size_t auxmsz = sizeof(Elf$5_$3);
- char * const dstend = dst + dsz;
- char * const srcend = src + count;
- char *dtmp, *dstaux, *srcaux;
+ unsigned char * const dstend = dst + dsz;
+ unsigned char * const srcend = src + count;
+ unsigned char *dtmp, *dstaux, *srcaux;
Elf$5_Word aux, anext, cnt, vnext;
- for (dtmp = dst, vnext = ~0;
+ for (dtmp = dst, vnext = ~0U;
vnext != 0 && dtmp + verfsz <= dstend && src + vermsz <= srcend;
dtmp += vnext, src += vnext) {
@@ -434,7 +432,7 @@ libelf_cvt_$1$5_tof(char *dst, size_t dsz, char *src, size_t count,
return (0);
/* Process AUX entries. */
- for (anext = ~0, dstaux = dtmp + aux, srcaux = src + aux;
+ for (anext = ~0U, dstaux = dtmp + aux, srcaux = src + aux;
cnt != 0 && anext != 0 && dstaux + auxfsz <= dstend &&
srcaux + auxmsz <= srcend;
dstaux += anext, srcaux += anext, cnt--) {
@@ -462,8 +460,8 @@ libelf_cvt_$1$5_tof(char *dst, size_t dsz, char *src, size_t count,
}
static int
-libelf_cvt_$1$5_tom(char *dst, size_t dsz, char *src, size_t count,
- int byteswap)
+_libelf_cvt_$1$5_tom(unsigned char *dst, size_t dsz, unsigned char *src,
+ size_t count, int byteswap)
{
Elf$5_$2 t, *dp;
Elf$5_$3 a, *ap;
@@ -471,12 +469,12 @@ libelf_cvt_$1$5_tom(char *dst, size_t dsz, char *src, size_t count,
const size_t auxfsz = FSZ(Elf$5_$3_DEF);
const size_t vermsz = sizeof(Elf$5_$2);
const size_t auxmsz = sizeof(Elf$5_$3);
- char * const dstend = dst + dsz;
- char * const srcend = src + count;
- char *dstaux, *s, *srcaux, *stmp;
+ unsigned char * const dstend = dst + dsz;
+ unsigned char * const srcend = src + count;
+ unsigned char *dstaux, *s, *srcaux, *stmp;
Elf$5_Word aux, anext, cnt, vnext;
- for (stmp = src, vnext = ~0;
+ for (stmp = src, vnext = ~0U;
vnext != 0 && stmp + verfsz <= srcend && dst + vermsz <= dstend;
stmp += vnext, dst += vnext) {
@@ -498,7 +496,7 @@ libelf_cvt_$1$5_tom(char *dst, size_t dsz, char *src, size_t count,
return (0);
/* Process AUX entries. */
- for (anext = ~0, dstaux = dst + aux, srcaux = stmp + aux;
+ for (anext = ~0U, dstaux = dst + aux, srcaux = stmp + aux;
cnt != 0 && anext != 0 && dstaux + auxmsz <= dstend &&
srcaux + auxfsz <= srcend;
dstaux += anext, srcaux += anext, cnt--) {
@@ -536,22 +534,23 @@ divert(0)
#define SWAP_IDENT(X) do { (void) (X); } while (0)
#define SWAP_HALF(X) do { \
uint16_t _x = (uint16_t) (X); \
- uint16_t _t = _x & 0xFF; \
- _t <<= 8; _x >>= 8; _t |= _x & 0xFF; \
- (X) = _t; \
+ uint32_t _t = _x & 0xFFU; \
+ _t <<= 8U; _x >>= 8U; _t |= _x & 0xFFU; \
+ (X) = (uint16_t) _t; \
} while (0)
-#define SWAP_WORD(X) do { \
+#define _SWAP_WORD(X, T) do { \
uint32_t _x = (uint32_t) (X); \
uint32_t _t = _x & 0xFF; \
_t <<= 8; _x >>= 8; _t |= _x & 0xFF; \
_t <<= 8; _x >>= 8; _t |= _x & 0xFF; \
_t <<= 8; _x >>= 8; _t |= _x & 0xFF; \
- (X) = _t; \
+ (X) = (T) _t; \
} while (0)
-#define SWAP_ADDR32(X) SWAP_WORD(X)
-#define SWAP_OFF32(X) SWAP_WORD(X)
-#define SWAP_SWORD(X) SWAP_WORD(X)
-#define SWAP_WORD64(X) do { \
+#define SWAP_ADDR32(X) _SWAP_WORD(X, Elf32_Addr)
+#define SWAP_OFF32(X) _SWAP_WORD(X, Elf32_Off)
+#define SWAP_SWORD(X) _SWAP_WORD(X, Elf32_Sword)
+#define SWAP_WORD(X) _SWAP_WORD(X, Elf32_Word)
+#define _SWAP_WORD64(X, T) do { \
uint64_t _x = (uint64_t) (X); \
uint64_t _t = _x & 0xFF; \
_t <<= 8; _x >>= 8; _t |= _x & 0xFF; \
@@ -561,13 +560,13 @@ divert(0)
_t <<= 8; _x >>= 8; _t |= _x & 0xFF; \
_t <<= 8; _x >>= 8; _t |= _x & 0xFF; \
_t <<= 8; _x >>= 8; _t |= _x & 0xFF; \
- (X) = _t; \
+ (X) = (T) _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_ADDR64(X) _SWAP_WORD64(X, Elf64_Addr)
+#define SWAP_LWORD(X) _SWAP_WORD64(X, Elf64_Lword)
+#define SWAP_OFF64(X) _SWAP_WORD64(X, Elf64_Off)
+#define SWAP_SXWORD(X) _SWAP_WORD64(X, Elf64_Sxword)
+#define SWAP_XWORD(X) _SWAP_WORD64(X, Elf64_Xword)
/*
* C macros to write out various integral values.
@@ -578,22 +577,22 @@ divert(0)
* - The destination pointer is incremented after the write.
*/
#define WRITE_BYTE(P,X) do { \
- char *const _p = (char *) (P); \
- _p[0] = (char) (X); \
+ unsigned char *const _p = (unsigned char *) (P); \
+ _p[0] = (unsigned char) (X); \
(P) = _p + 1; \
} while (0)
#define WRITE_HALF(P,X) do { \
uint16_t _t = (X); \
- char *const _p = (char *) (P); \
- const char *const _q = (char *) &_t; \
+ unsigned char *const _p = (unsigned char *) (P); \
+ const unsigned char *const _q = (unsigned char *) &_t; \
_p[0] = _q[0]; \
_p[1] = _q[1]; \
(P) = _p + 2; \
} while (0)
-#define WRITE_WORD(P,X) do { \
- uint32_t _t = (X); \
- char *const _p = (char *) (P); \
- const char *const _q = (char *) &_t; \
+#define WRITE_WORD(P,X) do { \
+ uint32_t _t = (uint32_t) (X); \
+ unsigned char *const _p = (unsigned char *) (P); \
+ const unsigned char *const _q = (unsigned char *) &_t; \
_p[0] = _q[0]; \
_p[1] = _q[1]; \
_p[2] = _q[2]; \
@@ -604,9 +603,9 @@ divert(0)
#define WRITE_OFF32(P,X) WRITE_WORD(P,X)
#define WRITE_SWORD(P,X) WRITE_WORD(P,X)
#define WRITE_WORD64(P,X) do { \
- uint64_t _t = (X); \
- char *const _p = (char *) (P); \
- const char *const _q = (char *) &_t; \
+ uint64_t _t = (uint64_t) (X); \
+ unsigned char *const _p = (unsigned char *) (P); \
+ const unsigned char *const _q = (unsigned char *) &_t; \
_p[0] = _q[0]; \
_p[1] = _q[1]; \
_p[2] = _q[2]; \
@@ -637,41 +636,42 @@ divert(0)
*/
#define READ_BYTE(P,X) do { \
- const char *const _p = \
- (const char *) (P); \
+ const unsigned char *const _p = \
+ (const unsigned char *) (P); \
(X) = _p[0]; \
(P) = (P) + 1; \
} while (0)
#define READ_HALF(P,X) do { \
uint16_t _t; \
- char *const _q = (char *) &_t; \
- const char *const _p = \
- (const char *) (P); \
+ unsigned char *const _q = (unsigned char *) &_t; \
+ const unsigned char *const _p = \
+ (const unsigned char *) (P); \
_q[0] = _p[0]; \
_q[1] = _p[1]; \
(P) = (P) + 2; \
(X) = _t; \
} while (0)
-#define READ_WORD(P,X) do { \
+#define _READ_WORD(P,X,T) do { \
uint32_t _t; \
- char *const _q = (char *) &_t; \
- const char *const _p = \
- (const char *) (P); \
+ unsigned char *const _q = (unsigned char *) &_t; \
+ const unsigned char *const _p = \
+ (const unsigned char *) (P); \
_q[0] = _p[0]; \
_q[1] = _p[1]; \
_q[2] = _p[2]; \
_q[3] = _p[3]; \
(P) = (P) + 4; \
- (X) = _t; \
+ (X) = (T) _t; \
} while (0)
-#define READ_ADDR32(P,X) READ_WORD(P,X)
-#define READ_OFF32(P,X) READ_WORD(P,X)
-#define READ_SWORD(P,X) READ_WORD(P,X)
-#define READ_WORD64(P,X) do { \
+#define READ_ADDR32(P,X) _READ_WORD(P, X, Elf32_Addr)
+#define READ_OFF32(P,X) _READ_WORD(P, X, Elf32_Off)
+#define READ_SWORD(P,X) _READ_WORD(P, X, Elf32_Sword)
+#define READ_WORD(P,X) _READ_WORD(P, X, Elf32_Word)
+#define _READ_WORD64(P,X,T) do { \
uint64_t _t; \
- char *const _q = (char *) &_t; \
- const char *const _p = \
- (const char *) (P); \
+ unsigned char *const _q = (unsigned char *) &_t; \
+ const unsigned char *const _p = \
+ (const unsigned char *) (P); \
_q[0] = _p[0]; \
_q[1] = _p[1]; \
_q[2] = _p[2]; \
@@ -681,13 +681,13 @@ divert(0)
_q[6] = _p[6]; \
_q[7] = _p[7]; \
(P) = (P) + 8; \
- (X) = _t; \
+ (X) = (T) _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)
+#define READ_ADDR64(P,X) _READ_WORD64(P, X, Elf64_Addr)
+#define READ_LWORD(P,X) _READ_WORD64(P, X, Elf64_Lword)
+#define READ_OFF64(P,X) _READ_WORD64(P, X, Elf64_Off)
+#define READ_SXWORD(P,X) _READ_WORD64(P, X, Elf64_Sxword)
+#define READ_XWORD(P,X) _READ_WORD64(P, X, Elf64_Xword)
#define READ_IDENT(P,X) do { \
(void) memcpy((X), (P), sizeof((X))); \
(P) = (P) + EI_NIDENT; \
@@ -707,8 +707,8 @@ MAKE_VERSION_CONVERTERS(VNEED,Verneed,Vernaux,vn)
*/
static int
-libelf_cvt_BYTE_tox(char *dst, size_t dsz, char *src, size_t count,
- int byteswap)
+_libelf_cvt_BYTE_tox(unsigned char *dst, size_t dsz, unsigned char *src,
+ size_t count, int byteswap)
{
(void) byteswap;
if (dsz < count)
@@ -732,24 +732,24 @@ libelf_cvt_BYTE_tox(char *dst, size_t dsz, char *src, size_t count,
*/
static int
-libelf_cvt_GNUHASH32_tom(char *dst, size_t dsz, char *src, size_t srcsz,
- int byteswap)
+_libelf_cvt_GNUHASH32_tom(unsigned char *dst, size_t dsz, unsigned char *src,
+ size_t srcsz, int byteswap)
{
- return (libelf_cvt_WORD_tom(dst, dsz, src, srcsz / sizeof(uint32_t),
+ return (_libelf_cvt_WORD_tom(dst, dsz, src, srcsz / sizeof(uint32_t),
byteswap));
}
static int
-libelf_cvt_GNUHASH32_tof(char *dst, size_t dsz, char *src, size_t srcsz,
- int byteswap)
+_libelf_cvt_GNUHASH32_tof(unsigned char *dst, size_t dsz, unsigned char *src,
+ size_t srcsz, int byteswap)
{
- return (libelf_cvt_WORD_tof(dst, dsz, src, srcsz / sizeof(uint32_t),
+ return (_libelf_cvt_WORD_tof(dst, dsz, src, srcsz / sizeof(uint32_t),
byteswap));
}
static int
-libelf_cvt_GNUHASH64_tom(char *dst, size_t dsz, char *src, size_t srcsz,
- int byteswap)
+_libelf_cvt_GNUHASH64_tom(unsigned char *dst, size_t dsz, unsigned char *src,
+ size_t srcsz, int byteswap)
{
size_t sz;
uint64_t t64, *bloom64;
@@ -834,8 +834,8 @@ libelf_cvt_GNUHASH64_tom(char *dst, size_t dsz, char *src, size_t srcsz,
}
static int
-libelf_cvt_GNUHASH64_tof(char *dst, size_t dsz, char *src, size_t srcsz,
- int byteswap)
+_libelf_cvt_GNUHASH64_tof(unsigned char *dst, size_t dsz, unsigned char *src,
+ size_t srcsz, int byteswap)
{
uint32_t *s32;
size_t sz, hdrsz;
@@ -921,8 +921,8 @@ libelf_cvt_GNUHASH64_tof(char *dst, size_t dsz, char *src, size_t srcsz,
* The destination buffer needs to be at least `count' bytes in size.
*/
static int
-libelf_cvt_NOTE_tom(char *dst, size_t dsz, char *src, size_t count,
- int byteswap)
+_libelf_cvt_NOTE_tom(unsigned char *dst, size_t dsz, unsigned char *src,
+ size_t count, int byteswap)
{
uint32_t namesz, descsz, type;
Elf_Note *en;
@@ -962,8 +962,8 @@ libelf_cvt_NOTE_tom(char *dst, size_t dsz, char *src, size_t count,
dst += sizeof(Elf_Note);
count -= hdrsz;
- ROUNDUP2(namesz, 4);
- ROUNDUP2(descsz, 4);
+ ROUNDUP2(namesz, 4U);
+ ROUNDUP2(descsz, 4U);
sz = namesz + descsz;
@@ -983,8 +983,8 @@ libelf_cvt_NOTE_tom(char *dst, size_t dsz, char *src, size_t count,
}
static int
-libelf_cvt_NOTE_tof(char *dst, size_t dsz, char *src, size_t count,
- int byteswap)
+_libelf_cvt_NOTE_tof(unsigned char *dst, size_t dsz, unsigned char *src,
+ size_t count, int byteswap)
{
uint32_t namesz, descsz, type;
Elf_Note *en;
@@ -1005,6 +1005,11 @@ libelf_cvt_NOTE_tof(char *dst, size_t dsz, char *src, size_t count,
descsz = en->n_descsz;
type = en->n_type;
+ sz = namesz;
+ ROUNDUP2(sz, 4U);
+ sz += descsz;
+ ROUNDUP2(sz, 4U);
+
SWAP_WORD(namesz);
SWAP_WORD(descsz);
SWAP_WORD(type);
@@ -1014,11 +1019,7 @@ libelf_cvt_NOTE_tof(char *dst, size_t dsz, char *src, size_t count,
WRITE_WORD(dst, type);
src += sizeof(Elf_Note);
-
- ROUNDUP2(namesz, 4);
- ROUNDUP2(descsz, 4);
-
- sz = namesz + descsz;
+ count -= sizeof(Elf_Note);
if (count < sz)
sz = count;
@@ -1034,14 +1035,14 @@ libelf_cvt_NOTE_tof(char *dst, size_t dsz, char *src, size_t count,
}
struct converters {
- int (*tof32)(char *dst, size_t dsz, char *src, size_t cnt,
- int byteswap);
- int (*tom32)(char *dst, size_t dsz, char *src, size_t cnt,
- int byteswap);
- int (*tof64)(char *dst, size_t dsz, char *src, size_t cnt,
- int byteswap);
- int (*tom64)(char *dst, size_t dsz, char *src, size_t cnt,
- int byteswap);
+ int (*tof32)(unsigned char *dst, size_t dsz, unsigned char *src,
+ size_t cnt, int byteswap);
+ int (*tom32)(unsigned char *dst, size_t dsz, unsigned char *src,
+ size_t cnt, int byteswap);
+ int (*tof64)(unsigned char *dst, size_t dsz, unsigned char *src,
+ size_t cnt, int byteswap);
+ int (*tom64)(unsigned char *dst, size_t dsz, unsigned char *src,
+ size_t cnt, int byteswap);
};
@@ -1055,22 +1056,23 @@ 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
+ .tof32 = _libelf_cvt_BYTE_tox,
+ .tom32 = _libelf_cvt_BYTE_tox,
+ .tof64 = _libelf_cvt_BYTE_tox,
+ .tom64 = _libelf_cvt_BYTE_tox
},
[ELF_T_NOTE] = {
- .tof32 = libelf_cvt_NOTE_tof,
- .tom32 = libelf_cvt_NOTE_tom,
- .tof64 = libelf_cvt_NOTE_tof,
- .tom64 = libelf_cvt_NOTE_tom
+ .tof32 = _libelf_cvt_NOTE_tof,
+ .tom32 = _libelf_cvt_NOTE_tom,
+ .tof64 = _libelf_cvt_NOTE_tof,
+ .tom64 = _libelf_cvt_NOTE_tom
}
};
int (*_libelf_get_translator(Elf_Type t, int direction, int elfclass))
- (char *_dst, size_t dsz, char *_src, size_t _cnt, int _byteswap)
+ (unsigned char *_dst, size_t dsz, unsigned char *_src, size_t _cnt,
+ int _byteswap)
{
assert(elfclass == ELFCLASS32 || elfclass == ELFCLASS64);
assert(direction == ELF_TOFILE || direction == ELF_TOMEMORY);