32 #include <gtest/gtest.h> 36 #define OMAGIC_STRUCT (*((const ecoff_exechdr *)omagic)) 37 #define NMAGIC_STRUCT (*((const ecoff_exechdr *)nmagic)) 38 #define ZMAGIC_STRUCT (*((const ecoff_exechdr *)zmagic)) 39 #define NO_MAGIC_STRUCT (*((const ecoff_exechdr *)no_magic)) 41 #if (defined(_BIG_ENDIAN) || !defined(_LITTLE_ENDIAN))\ 42 && BYTE_ORDER==BIG_ENDIAN 45 0x01, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
46 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
47 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
50 0x01, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
51 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00,
52 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
53 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
54 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
55 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
56 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
57 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
58 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
59 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
64 0x01, 0x08, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00,
65 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
66 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
69 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
70 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00,
71 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
72 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
73 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
74 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
75 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
76 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
77 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
78 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
83 0x01, 0x07, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00,
84 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
85 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
89 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
90 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
91 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
92 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
93 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
94 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
95 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
97 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
99 #elif defined(_LITTLE_ENDIAN) || BYTE_ORDER==LITTLE_ENDIAN 100 const uint8_t
zmagic[] = {
102 0x0B, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
103 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
104 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
107 0x0B, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
108 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
109 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
110 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
111 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
112 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
113 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
114 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
115 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
116 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
119 const uint8_t
nmagic[] = {
121 0x08, 0x01, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00,
122 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
123 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00,
126 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
127 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
128 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
129 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
130 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
131 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
132 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
133 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
134 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
135 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
138 const uint8_t
omagic[] = {
140 0x07, 0x01, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00,
141 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
142 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
145 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
146 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
147 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
148 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
149 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
150 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
151 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
152 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
153 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
154 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
157 #error Invalid Endianess 167 EXPECT_EQ((1 << 10) + (1 << 8) + (1 << 6),
168 ECOFF_ROUND((1 << 10) + (1 << 8) + (1 << 5) + (1 << 4) + (1 << 1),
171 EXPECT_EQ((1 << 10) + (1 << 8) + (1 << 5),
172 ECOFF_ROUND((1 << 10) + (1 << 8) + (1 << 4) + (1 << 1),
175 EXPECT_EQ((1 << 10) + (1 << 8) + (1 << 6),
176 ECOFF_ROUND((1 << 10) + (1 << 8) + (1 << 5) + (1 << 1),
180 TEST(ExecEcoffTest, NoRounding)
182 EXPECT_EQ((1 << 10) + (1 << 8) + (1 << 5),
187 TEST(ExecEcoffTest, BlockAlignWithoutZmagic)
193 u_int64_t value = 0XFFFF;
199 TEST(ExecEcoffTest, BlockAlignWithZmagic)
206 u_int64_t value1 = (1 << 14) + (1 << 13) + (1 << 10) + (1 << 8);
207 u_int64_t expected_output1 = (1 << 14) + (1 << 13) + (1 << 12);
210 u_int64_t value2 = (1 << 10) + (1 << 8);
211 u_int64_t expected_output2 = (1 << 12) ;
215 TEST(ExecEcoffTest, SegmentAlignWithZmagic)
221 u_int64_t value1 = (1 << 14) + (1 << 13) + (1 << 10) + (1 << 8);
222 u_int64_t expected_output1 = (1 << 14) + (1 << 13) + (1 << 12);
225 u_int64_t value2 = (1 << 10) + (1 << 8);
226 u_int64_t expected_output2 = (1 << 12) ;
230 TEST(ExecEcoffTest, SegmentAlignWithoutZmagic)
245 u_int64_t value = (1 << 14) + (1 << 13) + (1 << 8) + (1 << 4) + (1 << 2)
248 EXPECT_EQ((1 << 14) + (1 << 13) + (1 << 8) + (1 << 5),
250 EXPECT_EQ((1 << 14) + (1 << 13) + (1 << 8) + (1 << 4) + (1 << 3),
254 TEST(ExecEcoffTest, TxtOffWithMagic)
262 TEST(ExecEcoffTest, TxtOffWithoutMagic)
294 TEST(ExecEcoffTest, DatOffWithMagic)
308 TEST(ExecEcoffTest, DatOffWithoutMagic)
#define ECOFF_SEGMENT_ALIGN(ep, value)
TEST(ExecEcoffTest, Round)
#define ECOFF_BLOCK_ALIGN(ep, value)
#define ECOFF_ROUND(value, by)
#define EXPECT_EQ(lhs, rhs)
A macro which verifies that lhs and rhs are equal to each other.