]> asedeno.scripts.mit.edu Git - peal.git/blob - postlink/swap.h
Greg Parker's Palm Elf Arm Loader (PEAL)
[peal.git] / postlink / swap.h
1 /**********
2  * Copyright (c) 2004 Greg Parker.  All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY GREG PARKER ``AS IS'' AND ANY EXPRESS OR
14  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
15  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
16  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
17  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
18  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
19  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
20  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
22  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23  **********/
24
25 #ifndef SWAP_H
26 #define SWAP_H
27
28 #include "elf.h"
29
30
31 static inline uint32_t swap32_68K(uint32_t v)
32 {
33 #if !defined(__i386__)
34     return v;
35 #else
36     return (
37             ((v & 0x000000ff) << 24) |
38             ((v & 0x0000ff00) << 8) |
39             ((v & 0x00ff0000) >> 8) |
40             ((v & 0xff000000) >> 24)
41             );
42 #endif
43 }
44
45
46 static inline uint32_t swap32(uint32_t v)
47 {
48 #if defined(__i386__)
49     return v;
50 #else
51     return (
52             ((v & 0x000000ff) << 24) |
53             ((v & 0x0000ff00) << 8) |
54             ((v & 0x00ff0000) >> 8) |
55             ((v & 0xff000000) >> 24)
56             );
57 #endif
58 }
59
60
61 static inline uint16_t swap16_68K(uint16_t v)
62 {
63 #if !defined(__i386__)
64     return v;
65 #else
66     return (
67             ((v & 0x00ff) << 8) |
68             ((v & 0xff00) >> 8)
69             );
70 #endif
71 }
72
73
74 static inline uint16_t swap16(uint16_t v)
75 {
76 #if defined(__i386__)
77     return v;
78 #else
79     return (
80             ((v & 0x00ff) << 8) |
81             ((v & 0xff00) >> 8)
82             );
83 #endif
84 }
85
86
87 static inline void swap_ehdr(Elf32_Ehdr *ehdr)
88 {
89     ehdr->e_type      = swap16(ehdr->e_type);
90     ehdr->e_machine   = swap16(ehdr->e_machine);
91     ehdr->e_version   = swap32(ehdr->e_version);
92     ehdr->e_entry     = swap32(ehdr->e_entry);
93     ehdr->e_phoff     = swap32(ehdr->e_phoff);
94     ehdr->e_shoff     = swap32(ehdr->e_shoff);
95     ehdr->e_flags     = swap32(ehdr->e_flags);
96     ehdr->e_ehsize    = swap16(ehdr->e_ehsize);
97     ehdr->e_phentsize = swap16(ehdr->e_phentsize);
98     ehdr->e_phnum     = swap16(ehdr->e_phnum);
99     ehdr->e_shentsize = swap16(ehdr->e_shentsize);
100     ehdr->e_shnum     = swap16(ehdr->e_shnum);
101     ehdr->e_shstrndx  = swap16(ehdr->e_shstrndx);
102 }
103
104 #endif