1fddef416Sniklas@section Internal functions 2fddef416Sniklas 3f7cc78ecSespie 4fddef416Sniklas@strong{Description}@* 5fddef416SniklasThese routines are used within BFD. 6fddef416SniklasThey are not intended for export, but are documented here for 7fddef416Sniklascompleteness. 8f7cc78ecSespie 9fddef416Sniklas@findex bfd_write_bigendian_4byte_int 10fddef416Sniklas@subsubsection @code{bfd_write_bigendian_4byte_int} 11fddef416Sniklas@strong{Synopsis} 12fddef416Sniklas@example 13d2201f2fSdrahnbfd_boolean bfd_write_bigendian_4byte_int (bfd *, unsigned int); 14fddef416Sniklas@end example 15fddef416Sniklas@strong{Description}@* 16fddef416SniklasWrite a 4 byte integer @var{i} to the output BFD @var{abfd}, in big 17fddef416Sniklasendian order regardless of what else is going on. This is useful in 18fddef416Sniklasarchives. 19f7cc78ecSespie 20fddef416Sniklas@findex bfd_put_size 21fddef416Sniklas@subsubsection @code{bfd_put_size} 22fddef416Sniklas@findex bfd_get_size 23fddef416Sniklas@subsubsection @code{bfd_get_size} 24fddef416Sniklas@strong{Description}@* 25fddef416SniklasThese macros as used for reading and writing raw data in 26fddef416Sniklassections; each access (except for bytes) is vectored through 27fddef416Sniklasthe target format of the BFD and mangled accordingly. The 28fddef416Sniklasmangling performs any necessary endian translations and 29fddef416Sniklasremoves alignment restrictions. Note that types accepted and 30fddef416Sniklasreturned by these macros are identical so they can be swapped 31fddef416Sniklasaround in macros---for example, @file{libaout.h} defines @code{GET_WORD} 32fddef416Sniklasto either @code{bfd_get_32} or @code{bfd_get_64}. 33fddef416Sniklas 34fddef416SniklasIn the put routines, @var{val} must be a @code{bfd_vma}. If we are on a 35fddef416Sniklassystem without prototypes, the caller is responsible for making 36fddef416Sniklassure that is true, with a cast if necessary. We don't cast 37fddef416Sniklasthem in the macro definitions because that would prevent @code{lint} 38fddef416Sniklasor @code{gcc -Wall} from detecting sins such as passing a pointer. 39fddef416SniklasTo detect calling these with less than a @code{bfd_vma}, use 40fddef416Sniklas@code{gcc -Wconversion} on a host with 64 bit @code{bfd_vma}'s. 41fddef416Sniklas@example 42fddef416Sniklas 43fddef416Sniklas/* Byte swapping macros for user section data. */ 44fddef416Sniklas 45fddef416Sniklas#define bfd_put_8(abfd, val, ptr) \ 46*cf2f2c56Smiod ((void) (*((unsigned char *) (ptr)) = (val) & 0xff)) 47fddef416Sniklas#define bfd_put_signed_8 \ 48fddef416Sniklas bfd_put_8 49fddef416Sniklas#define bfd_get_8(abfd, ptr) \ 50d2201f2fSdrahn (*(unsigned char *) (ptr) & 0xff) 51fddef416Sniklas#define bfd_get_signed_8(abfd, ptr) \ 52d2201f2fSdrahn (((*(unsigned char *) (ptr) & 0xff) ^ 0x80) - 0x80) 53fddef416Sniklas 54fddef416Sniklas#define bfd_put_16(abfd, val, ptr) \ 55fddef416Sniklas BFD_SEND (abfd, bfd_putx16, ((val),(ptr))) 56fddef416Sniklas#define bfd_put_signed_16 \ 57fddef416Sniklas bfd_put_16 58fddef416Sniklas#define bfd_get_16(abfd, ptr) \ 59fddef416Sniklas BFD_SEND (abfd, bfd_getx16, (ptr)) 60fddef416Sniklas#define bfd_get_signed_16(abfd, ptr) \ 61fddef416Sniklas BFD_SEND (abfd, bfd_getx_signed_16, (ptr)) 62fddef416Sniklas 63fddef416Sniklas#define bfd_put_32(abfd, val, ptr) \ 64fddef416Sniklas BFD_SEND (abfd, bfd_putx32, ((val),(ptr))) 65fddef416Sniklas#define bfd_put_signed_32 \ 66fddef416Sniklas bfd_put_32 67fddef416Sniklas#define bfd_get_32(abfd, ptr) \ 68fddef416Sniklas BFD_SEND (abfd, bfd_getx32, (ptr)) 69fddef416Sniklas#define bfd_get_signed_32(abfd, ptr) \ 70fddef416Sniklas BFD_SEND (abfd, bfd_getx_signed_32, (ptr)) 71fddef416Sniklas 72fddef416Sniklas#define bfd_put_64(abfd, val, ptr) \ 73fddef416Sniklas BFD_SEND (abfd, bfd_putx64, ((val), (ptr))) 74fddef416Sniklas#define bfd_put_signed_64 \ 75fddef416Sniklas bfd_put_64 76fddef416Sniklas#define bfd_get_64(abfd, ptr) \ 77fddef416Sniklas BFD_SEND (abfd, bfd_getx64, (ptr)) 78fddef416Sniklas#define bfd_get_signed_64(abfd, ptr) \ 79fddef416Sniklas BFD_SEND (abfd, bfd_getx_signed_64, (ptr)) 80fddef416Sniklas 81f7cc78ecSespie#define bfd_get(bits, abfd, ptr) \ 82d2201f2fSdrahn ((bits) == 8 ? (bfd_vma) bfd_get_8 (abfd, ptr) \ 83f7cc78ecSespie : (bits) == 16 ? bfd_get_16 (abfd, ptr) \ 84f7cc78ecSespie : (bits) == 32 ? bfd_get_32 (abfd, ptr) \ 85f7cc78ecSespie : (bits) == 64 ? bfd_get_64 (abfd, ptr) \ 86f7cc78ecSespie : (abort (), (bfd_vma) - 1)) 87f7cc78ecSespie 88f7cc78ecSespie#define bfd_put(bits, abfd, val, ptr) \ 89f7cc78ecSespie ((bits) == 8 ? bfd_put_8 (abfd, val, ptr) \ 90f7cc78ecSespie : (bits) == 16 ? bfd_put_16 (abfd, val, ptr) \ 91f7cc78ecSespie : (bits) == 32 ? bfd_put_32 (abfd, val, ptr) \ 92f7cc78ecSespie : (bits) == 64 ? bfd_put_64 (abfd, val, ptr) \ 93f7cc78ecSespie : (abort (), (void) 0)) 94f7cc78ecSespie 95fddef416Sniklas@end example 96f7cc78ecSespie 97fddef416Sniklas@findex bfd_h_put_size 98fddef416Sniklas@subsubsection @code{bfd_h_put_size} 99fddef416Sniklas@strong{Description}@* 100fddef416SniklasThese macros have the same function as their @code{bfd_get_x} 101d2201f2fSdrahnbrethren, except that they are used for removing information 102fddef416Sniklasfor the header records of object files. Believe it or not, 103fddef416Sniklassome object files keep their header records in big endian 104fddef416Sniklasorder and their data in little endian order. 105fddef416Sniklas@example 106fddef416Sniklas 107fddef416Sniklas/* Byte swapping macros for file header data. */ 108fddef416Sniklas 109fddef416Sniklas#define bfd_h_put_8(abfd, val, ptr) \ 110fddef416Sniklas bfd_put_8 (abfd, val, ptr) 111fddef416Sniklas#define bfd_h_put_signed_8(abfd, val, ptr) \ 112fddef416Sniklas bfd_put_8 (abfd, val, ptr) 113fddef416Sniklas#define bfd_h_get_8(abfd, ptr) \ 114fddef416Sniklas bfd_get_8 (abfd, ptr) 115fddef416Sniklas#define bfd_h_get_signed_8(abfd, ptr) \ 116fddef416Sniklas bfd_get_signed_8 (abfd, ptr) 117fddef416Sniklas 118fddef416Sniklas#define bfd_h_put_16(abfd, val, ptr) \ 119fddef416Sniklas BFD_SEND (abfd, bfd_h_putx16, (val, ptr)) 120fddef416Sniklas#define bfd_h_put_signed_16 \ 121fddef416Sniklas bfd_h_put_16 122fddef416Sniklas#define bfd_h_get_16(abfd, ptr) \ 123fddef416Sniklas BFD_SEND (abfd, bfd_h_getx16, (ptr)) 124fddef416Sniklas#define bfd_h_get_signed_16(abfd, ptr) \ 125fddef416Sniklas BFD_SEND (abfd, bfd_h_getx_signed_16, (ptr)) 126fddef416Sniklas 127fddef416Sniklas#define bfd_h_put_32(abfd, val, ptr) \ 128fddef416Sniklas BFD_SEND (abfd, bfd_h_putx32, (val, ptr)) 129fddef416Sniklas#define bfd_h_put_signed_32 \ 130fddef416Sniklas bfd_h_put_32 131fddef416Sniklas#define bfd_h_get_32(abfd, ptr) \ 132fddef416Sniklas BFD_SEND (abfd, bfd_h_getx32, (ptr)) 133fddef416Sniklas#define bfd_h_get_signed_32(abfd, ptr) \ 134fddef416Sniklas BFD_SEND (abfd, bfd_h_getx_signed_32, (ptr)) 135fddef416Sniklas 136fddef416Sniklas#define bfd_h_put_64(abfd, val, ptr) \ 137fddef416Sniklas BFD_SEND (abfd, bfd_h_putx64, (val, ptr)) 138fddef416Sniklas#define bfd_h_put_signed_64 \ 139fddef416Sniklas bfd_h_put_64 140fddef416Sniklas#define bfd_h_get_64(abfd, ptr) \ 141fddef416Sniklas BFD_SEND (abfd, bfd_h_getx64, (ptr)) 142fddef416Sniklas#define bfd_h_get_signed_64(abfd, ptr) \ 143fddef416Sniklas BFD_SEND (abfd, bfd_h_getx_signed_64, (ptr)) 144fddef416Sniklas 145*cf2f2c56Smiod/* Aliases for the above, which should eventually go away. */ 146d2201f2fSdrahn 147*cf2f2c56Smiod#define H_PUT_64 bfd_h_put_64 148*cf2f2c56Smiod#define H_PUT_32 bfd_h_put_32 149*cf2f2c56Smiod#define H_PUT_16 bfd_h_put_16 150d2201f2fSdrahn#define H_PUT_8 bfd_h_put_8 151*cf2f2c56Smiod#define H_PUT_S64 bfd_h_put_signed_64 152*cf2f2c56Smiod#define H_PUT_S32 bfd_h_put_signed_32 153*cf2f2c56Smiod#define H_PUT_S16 bfd_h_put_signed_16 154d2201f2fSdrahn#define H_PUT_S8 bfd_h_put_signed_8 155*cf2f2c56Smiod#define H_GET_64 bfd_h_get_64 156*cf2f2c56Smiod#define H_GET_32 bfd_h_get_32 157*cf2f2c56Smiod#define H_GET_16 bfd_h_get_16 158d2201f2fSdrahn#define H_GET_8 bfd_h_get_8 159*cf2f2c56Smiod#define H_GET_S64 bfd_h_get_signed_64 160*cf2f2c56Smiod#define H_GET_S32 bfd_h_get_signed_32 161*cf2f2c56Smiod#define H_GET_S16 bfd_h_get_signed_16 162d2201f2fSdrahn#define H_GET_S8 bfd_h_get_signed_8 163d2201f2fSdrahn 164d2201f2fSdrahn 165fddef416Sniklas@end example 166f7cc78ecSespie 167fddef416Sniklas@findex bfd_log2 168fddef416Sniklas@subsubsection @code{bfd_log2} 169fddef416Sniklas@strong{Synopsis} 170fddef416Sniklas@example 171fddef416Sniklasunsigned int bfd_log2 (bfd_vma x); 172fddef416Sniklas@end example 173fddef416Sniklas@strong{Description}@* 174fddef416SniklasReturn the log base 2 of the value supplied, rounded up. E.g., an 175d2201f2fSdrahn@var{x} of 1025 returns 11. A @var{x} of 0 returns 0. 176f7cc78ecSespie 177