X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=elfcpp%2Felfcpp_swap.h;h=329ed163831af55aef3767164b80ec74c51d9923;hb=53d25da64b00c1cf7f10d04785d66fa003f8bfc9;hp=979108e9e07f8f10fcf7d101584b12a796a7b45e;hpb=8d9455b422d98d97f090923445aa2680e6882f20;p=deliverable%2Fbinutils-gdb.git diff --git a/elfcpp/elfcpp_swap.h b/elfcpp/elfcpp_swap.h index 979108e9e0..329ed16383 100644 --- a/elfcpp/elfcpp_swap.h +++ b/elfcpp/elfcpp_swap.h @@ -1,5 +1,34 @@ // elfcpp_swap.h -- Handle swapping for elfcpp -*- C++ -*- +// Copyright 2006, 2007, Free Software Foundation, Inc. +// Written by Ian Lance Taylor . + +// This file is part of elfcpp. + +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU Library General Public License +// as published by the Free Software Foundation; either version 2, or +// (at your option) any later version. + +// In addition to the permissions in the GNU Library General Public +// License, the Free Software Foundation gives you unlimited +// permission to link the compiled version of this file into +// combinations with other programs, and to distribute those +// combinations without any restriction coming from the use of this +// file. (The Library Public License restrictions do apply in other +// respects; for example, they cover modification of the file, and +/// distribution when not linked into a combined executable.) + +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Library General Public License for more details. + +// You should have received a copy of the GNU Library General Public +// License along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +// 02110-1301, USA. + // This header file defines basic template classes to efficiently swap // numbers between host form and target form. When the host and // target have the same endianness, these turn into no-ops. @@ -24,8 +53,8 @@ struct Endian }; // Valtype_base is a template based on size (8, 16, 32, 64) which -// defines the type Valtype as the unsigned integer of the specified -// size. +// defines the type Valtype as the unsigned integer, and +// Signed_valtype as the signed integer, of the specified size. template struct Valtype_base; @@ -33,25 +62,29 @@ struct Valtype_base; template<> struct Valtype_base<8> { - typedef unsigned char Valtype; + typedef uint8_t Valtype; + typedef int8_t Signed_valtype; }; template<> struct Valtype_base<16> { typedef uint16_t Valtype; + typedef int16_t Signed_valtype; }; template<> struct Valtype_base<32> { typedef uint32_t Valtype; + typedef int32_t Signed_valtype; }; template<> struct Valtype_base<64> { typedef uint64_t Valtype; + typedef int64_t Signed_valtype; }; // Convert_endian is a template based on size and on whether the host @@ -180,9 +213,9 @@ struct Swap<8, big_endian> // Swap_unaligned is a template based on size and on whether the // target is big endian. It defines the type Valtype and the -// functions readval_unaligned and writeval_unaligned. The functions -// read and write values of the appropriate size out of buffers which -// may be misaligned. +// functions readval and writeval. The functions read and write +// values of the appropriate size out of buffers which may be +// misaligned. template struct Swap_unaligned; @@ -193,11 +226,11 @@ struct Swap_unaligned<8, big_endian> typedef typename Valtype_base<8>::Valtype Valtype; static inline Valtype - readval_unaligned(const unsigned char* wv) + readval(const unsigned char* wv) { return *wv; } static inline void - writeval_unaligned(unsigned char* wv, Valtype v) + writeval(unsigned char* wv, Valtype v) { *wv = v; } }; @@ -207,13 +240,13 @@ struct Swap_unaligned<16, false> typedef Valtype_base<16>::Valtype Valtype; static inline Valtype - readval_unaligned(const unsigned char* wv) + readval(const unsigned char* wv) { return (wv[1] << 8) | wv[0]; } static inline void - writeval_unaligned(unsigned char* wv, Valtype v) + writeval(unsigned char* wv, Valtype v) { wv[1] = v >> 8; wv[0] = v; @@ -226,13 +259,13 @@ struct Swap_unaligned<16, true> typedef Valtype_base<16>::Valtype Valtype; static inline Valtype - readval_unaligned(const unsigned char* wv) + readval(const unsigned char* wv) { return (wv[0] << 8) | wv[1]; } static inline void - writeval_unaligned(unsigned char* wv, Valtype v) + writeval(unsigned char* wv, Valtype v) { wv[0] = v >> 8; wv[1] = v; @@ -245,13 +278,13 @@ struct Swap_unaligned<32, false> typedef Valtype_base<32>::Valtype Valtype; static inline Valtype - readval_unaligned(const unsigned char* wv) + readval(const unsigned char* wv) { return (wv[3] << 24) | (wv[2] << 16) | (wv[1] << 8) | wv[0]; } static inline void - writeval_unaligned(unsigned char* wv, Valtype v) + writeval(unsigned char* wv, Valtype v) { wv[3] = v >> 24; wv[2] = v >> 16; @@ -266,13 +299,13 @@ struct Swap_unaligned<32, true> typedef Valtype_base<32>::Valtype Valtype; static inline Valtype - readval_unaligned(const unsigned char* wv) + readval(const unsigned char* wv) { return (wv[0] << 24) | (wv[1] << 16) | (wv[2] << 8) | wv[3]; } static inline void - writeval_unaligned(unsigned char* wv, Valtype v) + writeval(unsigned char* wv, Valtype v) { wv[0] = v >> 24; wv[1] = v >> 16; @@ -287,7 +320,7 @@ struct Swap_unaligned<64, false> typedef Valtype_base<64>::Valtype Valtype; static inline Valtype - readval_unaligned(const unsigned char* wv) + readval(const unsigned char* wv) { return ((static_cast(wv[7]) << 56) | (static_cast(wv[6]) << 48) @@ -300,7 +333,7 @@ struct Swap_unaligned<64, false> } static inline void - writeval_unaligned(unsigned char* wv, Valtype v) + writeval(unsigned char* wv, Valtype v) { wv[7] = v >> 56; wv[6] = v >> 48; @@ -319,7 +352,7 @@ struct Swap_unaligned<64, true> typedef Valtype_base<64>::Valtype Valtype; static inline Valtype - readval_unaligned(const unsigned char* wv) + readval(const unsigned char* wv) { return ((static_cast(wv[0]) << 56) | (static_cast(wv[1]) << 48) @@ -332,7 +365,7 @@ struct Swap_unaligned<64, true> } static inline void - writeval_unaligned(unsigned char* wv, Valtype v) + writeval(unsigned char* wv, Valtype v) { wv[7] = v >> 56; wv[6] = v >> 48;