1da0c48c4Sopenharmony_ci/* Test program for read_[type]_unaligned.
2da0c48c4Sopenharmony_ci   Copyright (C) 2020, Red Hat Inc.
3da0c48c4Sopenharmony_ci   This file is part of elfutils.
4da0c48c4Sopenharmony_ci
5da0c48c4Sopenharmony_ci   This file is free software; you can redistribute it and/or modify
6da0c48c4Sopenharmony_ci   it under the terms of the GNU General Public License as published by
7da0c48c4Sopenharmony_ci   the Free Software Foundation; either version 3 of the License, or
8da0c48c4Sopenharmony_ci   (at your option) any later version.
9da0c48c4Sopenharmony_ci
10da0c48c4Sopenharmony_ci   elfutils is distributed in the hope that it will be useful, but
11da0c48c4Sopenharmony_ci   WITHOUT ANY WARRANTY; without even the implied warranty of
12da0c48c4Sopenharmony_ci   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13da0c48c4Sopenharmony_ci   GNU General Public License for more details.
14da0c48c4Sopenharmony_ci
15da0c48c4Sopenharmony_ci   You should have received a copy of the GNU General Public License
16da0c48c4Sopenharmony_ci   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
17da0c48c4Sopenharmony_ci
18da0c48c4Sopenharmony_ci#include <assert.h>
19da0c48c4Sopenharmony_ci#include <endian.h>
20da0c48c4Sopenharmony_ci#include <inttypes.h>
21da0c48c4Sopenharmony_ci#include <stdbool.h>
22da0c48c4Sopenharmony_ci#include <stdint.h>
23da0c48c4Sopenharmony_ci#include <stdio.h>
24da0c48c4Sopenharmony_ci
25da0c48c4Sopenharmony_ci#include "../libdw/libdwP.h"
26da0c48c4Sopenharmony_ci#include "../libdw/memory-access.h"
27da0c48c4Sopenharmony_ci
28da0c48c4Sopenharmony_ciunion u8
29da0c48c4Sopenharmony_ci{
30da0c48c4Sopenharmony_ci  uint8_t v;
31da0c48c4Sopenharmony_ci  unsigned char c[1];
32da0c48c4Sopenharmony_ci};
33da0c48c4Sopenharmony_ci
34da0c48c4Sopenharmony_ciunion s8
35da0c48c4Sopenharmony_ci{
36da0c48c4Sopenharmony_ci  int8_t v;
37da0c48c4Sopenharmony_ci  unsigned char c[1];
38da0c48c4Sopenharmony_ci};
39da0c48c4Sopenharmony_ci
40da0c48c4Sopenharmony_ciunion u16
41da0c48c4Sopenharmony_ci{
42da0c48c4Sopenharmony_ci  uint16_t v;
43da0c48c4Sopenharmony_ci  unsigned char c[2];
44da0c48c4Sopenharmony_ci};
45da0c48c4Sopenharmony_ci
46da0c48c4Sopenharmony_ciunion s16
47da0c48c4Sopenharmony_ci{
48da0c48c4Sopenharmony_ci  int16_t v;
49da0c48c4Sopenharmony_ci  unsigned char c[2];
50da0c48c4Sopenharmony_ci};
51da0c48c4Sopenharmony_ci
52da0c48c4Sopenharmony_ciunion u24
53da0c48c4Sopenharmony_ci{
54da0c48c4Sopenharmony_ci  uint32_t v:24;
55da0c48c4Sopenharmony_ci  unsigned char c[3];
56da0c48c4Sopenharmony_ci} __attribute__((packed));
57da0c48c4Sopenharmony_ci
58da0c48c4Sopenharmony_ciunion u32
59da0c48c4Sopenharmony_ci{
60da0c48c4Sopenharmony_ci  uint32_t v;
61da0c48c4Sopenharmony_ci  unsigned char c[4];
62da0c48c4Sopenharmony_ci};
63da0c48c4Sopenharmony_ci
64da0c48c4Sopenharmony_ciunion s32
65da0c48c4Sopenharmony_ci{
66da0c48c4Sopenharmony_ci  int32_t v;
67da0c48c4Sopenharmony_ci  unsigned char c[4];
68da0c48c4Sopenharmony_ci};
69da0c48c4Sopenharmony_ci
70da0c48c4Sopenharmony_ciunion u64
71da0c48c4Sopenharmony_ci{
72da0c48c4Sopenharmony_ci  uint64_t v;
73da0c48c4Sopenharmony_ci  unsigned char c[8];
74da0c48c4Sopenharmony_ci};
75da0c48c4Sopenharmony_ci
76da0c48c4Sopenharmony_ciunion s64
77da0c48c4Sopenharmony_ci{
78da0c48c4Sopenharmony_ci  uint64_t v;
79da0c48c4Sopenharmony_ci  unsigned char c[8];
80da0c48c4Sopenharmony_ci};
81da0c48c4Sopenharmony_ci
82da0c48c4Sopenharmony_ciuint8_t u8_nums[] =
83da0c48c4Sopenharmony_ci  {
84da0c48c4Sopenharmony_ci   0,
85da0c48c4Sopenharmony_ci   1,
86da0c48c4Sopenharmony_ci   UINT8_MAX / 2 - 1,
87da0c48c4Sopenharmony_ci   UINT8_MAX / 2,
88da0c48c4Sopenharmony_ci   UINT8_MAX / 2 + 1,
89da0c48c4Sopenharmony_ci   UINT8_MAX,
90da0c48c4Sopenharmony_ci   UINT8_MAX -1
91da0c48c4Sopenharmony_ci  };
92da0c48c4Sopenharmony_ci
93da0c48c4Sopenharmony_ciint8_t s8_nums[] =
94da0c48c4Sopenharmony_ci  {
95da0c48c4Sopenharmony_ci   INT8_MIN,
96da0c48c4Sopenharmony_ci   INT8_MIN + 1,
97da0c48c4Sopenharmony_ci   -1,
98da0c48c4Sopenharmony_ci   0,
99da0c48c4Sopenharmony_ci   1,
100da0c48c4Sopenharmony_ci   INT8_MAX,
101da0c48c4Sopenharmony_ci   INT8_MAX - 1
102da0c48c4Sopenharmony_ci  };
103da0c48c4Sopenharmony_ci
104da0c48c4Sopenharmony_ciuint16_t u16_nums[] =
105da0c48c4Sopenharmony_ci  {
106da0c48c4Sopenharmony_ci   0,
107da0c48c4Sopenharmony_ci   1,
108da0c48c4Sopenharmony_ci   UINT16_MAX / 2 - 1,
109da0c48c4Sopenharmony_ci   UINT16_MAX / 2,
110da0c48c4Sopenharmony_ci   UINT16_MAX / 2 + 1,
111da0c48c4Sopenharmony_ci   UINT16_MAX,
112da0c48c4Sopenharmony_ci   UINT16_MAX -1
113da0c48c4Sopenharmony_ci  };
114da0c48c4Sopenharmony_ci
115da0c48c4Sopenharmony_ciint16_t s16_nums[] =
116da0c48c4Sopenharmony_ci  {
117da0c48c4Sopenharmony_ci   INT16_MIN,
118da0c48c4Sopenharmony_ci   INT16_MIN + 1,
119da0c48c4Sopenharmony_ci   -1,
120da0c48c4Sopenharmony_ci   0,
121da0c48c4Sopenharmony_ci   1,
122da0c48c4Sopenharmony_ci   INT16_MAX,
123da0c48c4Sopenharmony_ci   INT16_MAX - 1
124da0c48c4Sopenharmony_ci  };
125da0c48c4Sopenharmony_ci
126da0c48c4Sopenharmony_ci#define UINT24_MAX 0xffffff
127da0c48c4Sopenharmony_ci
128da0c48c4Sopenharmony_ciuint32_t u24_nums[] =
129da0c48c4Sopenharmony_ci  {
130da0c48c4Sopenharmony_ci   0,
131da0c48c4Sopenharmony_ci   1,
132da0c48c4Sopenharmony_ci   UINT24_MAX / 2 - 1,
133da0c48c4Sopenharmony_ci   UINT24_MAX / 2,
134da0c48c4Sopenharmony_ci   UINT24_MAX / 2 + 1,
135da0c48c4Sopenharmony_ci   UINT24_MAX,
136da0c48c4Sopenharmony_ci   UINT24_MAX -1
137da0c48c4Sopenharmony_ci  };
138da0c48c4Sopenharmony_ci
139da0c48c4Sopenharmony_ciuint32_t u32_nums[] =
140da0c48c4Sopenharmony_ci  {
141da0c48c4Sopenharmony_ci   0,
142da0c48c4Sopenharmony_ci   1,
143da0c48c4Sopenharmony_ci   UINT32_MAX / 2 - 1,
144da0c48c4Sopenharmony_ci   UINT32_MAX / 2,
145da0c48c4Sopenharmony_ci   UINT32_MAX / 2 + 1,
146da0c48c4Sopenharmony_ci   UINT32_MAX,
147da0c48c4Sopenharmony_ci   UINT32_MAX -1
148da0c48c4Sopenharmony_ci  };
149da0c48c4Sopenharmony_ci
150da0c48c4Sopenharmony_ciint32_t s32_nums[] =
151da0c48c4Sopenharmony_ci  {
152da0c48c4Sopenharmony_ci   INT32_MIN,
153da0c48c4Sopenharmony_ci   INT32_MIN + 1,
154da0c48c4Sopenharmony_ci   -1,
155da0c48c4Sopenharmony_ci   0,
156da0c48c4Sopenharmony_ci   1,
157da0c48c4Sopenharmony_ci   INT32_MAX,
158da0c48c4Sopenharmony_ci   INT32_MAX - 1
159da0c48c4Sopenharmony_ci  };
160da0c48c4Sopenharmony_ci
161da0c48c4Sopenharmony_ciuint64_t u64_nums[] =
162da0c48c4Sopenharmony_ci  {
163da0c48c4Sopenharmony_ci   0,
164da0c48c4Sopenharmony_ci   1,
165da0c48c4Sopenharmony_ci   UINT64_MAX / 2 - 1,
166da0c48c4Sopenharmony_ci   UINT64_MAX / 2,
167da0c48c4Sopenharmony_ci   UINT64_MAX / 2 + 1,
168da0c48c4Sopenharmony_ci   UINT64_MAX,
169da0c48c4Sopenharmony_ci   UINT64_MAX -1
170da0c48c4Sopenharmony_ci  };
171da0c48c4Sopenharmony_ci
172da0c48c4Sopenharmony_ciint64_t s64_nums[] =
173da0c48c4Sopenharmony_ci  {
174da0c48c4Sopenharmony_ci   INT64_MIN,
175da0c48c4Sopenharmony_ci   INT64_MIN + 1,
176da0c48c4Sopenharmony_ci   -1,
177da0c48c4Sopenharmony_ci   0,
178da0c48c4Sopenharmony_ci   1,
179da0c48c4Sopenharmony_ci   INT64_MAX,
180da0c48c4Sopenharmony_ci   INT64_MAX - 1
181da0c48c4Sopenharmony_ci  };
182da0c48c4Sopenharmony_ci
183da0c48c4Sopenharmony_cistatic unsigned char le_mem[] =
184da0c48c4Sopenharmony_ci  {
185da0c48c4Sopenharmony_ci    /* u8 */
186da0c48c4Sopenharmony_ci    0x00,
187da0c48c4Sopenharmony_ci    0x01,
188da0c48c4Sopenharmony_ci    0x7e,
189da0c48c4Sopenharmony_ci    0x7f,
190da0c48c4Sopenharmony_ci    0x80,
191da0c48c4Sopenharmony_ci    0xff,
192da0c48c4Sopenharmony_ci    0xfe,
193da0c48c4Sopenharmony_ci    /* s8 */
194da0c48c4Sopenharmony_ci    0x80,
195da0c48c4Sopenharmony_ci    0x81,
196da0c48c4Sopenharmony_ci    0xff,
197da0c48c4Sopenharmony_ci    0x00,
198da0c48c4Sopenharmony_ci    0x01,
199da0c48c4Sopenharmony_ci    0x7f,
200da0c48c4Sopenharmony_ci    0x7e,
201da0c48c4Sopenharmony_ci    /* u16 */
202da0c48c4Sopenharmony_ci    0x00, 0x00,
203da0c48c4Sopenharmony_ci    0x01, 0x00,
204da0c48c4Sopenharmony_ci    0xfe, 0x7f,
205da0c48c4Sopenharmony_ci    0xff, 0x7f,
206da0c48c4Sopenharmony_ci    0x00, 0x80,
207da0c48c4Sopenharmony_ci    0xff, 0xff,
208da0c48c4Sopenharmony_ci    0xfe, 0xff,
209da0c48c4Sopenharmony_ci    /* s16 */
210da0c48c4Sopenharmony_ci    0x00, 0x80,
211da0c48c4Sopenharmony_ci    0x01, 0x80,
212da0c48c4Sopenharmony_ci    0xff, 0xff,
213da0c48c4Sopenharmony_ci    0x00, 0x00,
214da0c48c4Sopenharmony_ci    0x01, 0x00,
215da0c48c4Sopenharmony_ci    0xff, 0x7f,
216da0c48c4Sopenharmony_ci    0xfe, 0x7f,
217da0c48c4Sopenharmony_ci    /* u24 */
218da0c48c4Sopenharmony_ci    0x00, 0x00, 0x00,
219da0c48c4Sopenharmony_ci    0x01, 0x00, 0x00,
220da0c48c4Sopenharmony_ci    0xfe, 0xff, 0x7f,
221da0c48c4Sopenharmony_ci    0xff, 0xff, 0x7f,
222da0c48c4Sopenharmony_ci    0x00, 0x00, 0x80,
223da0c48c4Sopenharmony_ci    0xff, 0xff, 0xff,
224da0c48c4Sopenharmony_ci    0xfe, 0xff, 0xff,
225da0c48c4Sopenharmony_ci    /* u32 */
226da0c48c4Sopenharmony_ci    0x00, 0x00, 0x00, 0x00,
227da0c48c4Sopenharmony_ci    0x01, 0x00, 0x00, 0x00,
228da0c48c4Sopenharmony_ci    0xfe, 0xff, 0xff, 0x7f,
229da0c48c4Sopenharmony_ci    0xff, 0xff, 0xff, 0x7f,
230da0c48c4Sopenharmony_ci    0x00, 0x00, 0x00, 0x80,
231da0c48c4Sopenharmony_ci    0xff, 0xff, 0xff, 0xff,
232da0c48c4Sopenharmony_ci    0xfe, 0xff, 0xff, 0xff,
233da0c48c4Sopenharmony_ci    /* s32 */
234da0c48c4Sopenharmony_ci    0x00, 0x00, 0x00, 0x80,
235da0c48c4Sopenharmony_ci    0x01, 0x00, 0x00, 0x80,
236da0c48c4Sopenharmony_ci    0xff, 0xff, 0xff, 0xff,
237da0c48c4Sopenharmony_ci    0x00, 0x00, 0x00, 0x00,
238da0c48c4Sopenharmony_ci    0x01, 0x00, 0x00, 0x00,
239da0c48c4Sopenharmony_ci    0xff, 0xff, 0xff, 0x7f,
240da0c48c4Sopenharmony_ci    0xfe, 0xff, 0xff, 0x7f,
241da0c48c4Sopenharmony_ci    /* u64 */
242da0c48c4Sopenharmony_ci    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
243da0c48c4Sopenharmony_ci    0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
244da0c48c4Sopenharmony_ci    0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
245da0c48c4Sopenharmony_ci    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
246da0c48c4Sopenharmony_ci    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
247da0c48c4Sopenharmony_ci    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
248da0c48c4Sopenharmony_ci    0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
249da0c48c4Sopenharmony_ci    /* s64 */
250da0c48c4Sopenharmony_ci    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
251da0c48c4Sopenharmony_ci    0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
252da0c48c4Sopenharmony_ci    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
253da0c48c4Sopenharmony_ci    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
254da0c48c4Sopenharmony_ci    0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
255da0c48c4Sopenharmony_ci    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
256da0c48c4Sopenharmony_ci    0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
257da0c48c4Sopenharmony_ci  };
258da0c48c4Sopenharmony_ci
259da0c48c4Sopenharmony_cistatic unsigned char be_mem[] =
260da0c48c4Sopenharmony_ci  {
261da0c48c4Sopenharmony_ci    /* u8 */
262da0c48c4Sopenharmony_ci    0x00,
263da0c48c4Sopenharmony_ci    0x01,
264da0c48c4Sopenharmony_ci    0x7e,
265da0c48c4Sopenharmony_ci    0x7f,
266da0c48c4Sopenharmony_ci    0x80,
267da0c48c4Sopenharmony_ci    0xff,
268da0c48c4Sopenharmony_ci    0xfe,
269da0c48c4Sopenharmony_ci    /* s8 */
270da0c48c4Sopenharmony_ci    0x80,
271da0c48c4Sopenharmony_ci    0x81,
272da0c48c4Sopenharmony_ci    0xff,
273da0c48c4Sopenharmony_ci    0x00,
274da0c48c4Sopenharmony_ci    0x01,
275da0c48c4Sopenharmony_ci    0x7f,
276da0c48c4Sopenharmony_ci    0x7e,
277da0c48c4Sopenharmony_ci    /* u16 */
278da0c48c4Sopenharmony_ci    0x00, 0x00,
279da0c48c4Sopenharmony_ci    0x00, 0x01,
280da0c48c4Sopenharmony_ci    0x7f, 0xfe,
281da0c48c4Sopenharmony_ci    0x7f, 0xff,
282da0c48c4Sopenharmony_ci    0x80, 0x00,
283da0c48c4Sopenharmony_ci    0xff, 0xff,
284da0c48c4Sopenharmony_ci    0xff, 0xfe,
285da0c48c4Sopenharmony_ci    /* s16 */
286da0c48c4Sopenharmony_ci    0x80, 0x00,
287da0c48c4Sopenharmony_ci    0x80, 0x01,
288da0c48c4Sopenharmony_ci    0xff, 0xff,
289da0c48c4Sopenharmony_ci    0x00, 0x00,
290da0c48c4Sopenharmony_ci    0x00, 0x01,
291da0c48c4Sopenharmony_ci    0x7f, 0xff,
292da0c48c4Sopenharmony_ci    0x7f, 0xfe,
293da0c48c4Sopenharmony_ci    /* u24 */
294da0c48c4Sopenharmony_ci    0x00, 0x00, 0x00,
295da0c48c4Sopenharmony_ci    0x00, 0x00, 0x01,
296da0c48c4Sopenharmony_ci    0x7f, 0xff, 0xfe,
297da0c48c4Sopenharmony_ci    0x7f, 0xff, 0xff,
298da0c48c4Sopenharmony_ci    0x80, 0x00, 0x00,
299da0c48c4Sopenharmony_ci    0xff, 0xff, 0xff,
300da0c48c4Sopenharmony_ci    0xff, 0xff, 0xfe,
301da0c48c4Sopenharmony_ci    /* u32 */
302da0c48c4Sopenharmony_ci    0x00, 0x00, 0x00, 0x00,
303da0c48c4Sopenharmony_ci    0x00, 0x00, 0x00, 0x01,
304da0c48c4Sopenharmony_ci    0x7f, 0xff, 0xff, 0xfe,
305da0c48c4Sopenharmony_ci    0x7f, 0xff, 0xff, 0xff,
306da0c48c4Sopenharmony_ci    0x80, 0x00, 0x00, 0x00,
307da0c48c4Sopenharmony_ci    0xff, 0xff, 0xff, 0xff,
308da0c48c4Sopenharmony_ci    0xff, 0xff, 0xff, 0xfe,
309da0c48c4Sopenharmony_ci    /* s32 */
310da0c48c4Sopenharmony_ci    0x80, 0x00, 0x00, 0x00,
311da0c48c4Sopenharmony_ci    0x80, 0x00, 0x00, 0x01,
312da0c48c4Sopenharmony_ci    0xff, 0xff, 0xff, 0xff,
313da0c48c4Sopenharmony_ci    0x00, 0x00, 0x00, 0x00,
314da0c48c4Sopenharmony_ci    0x00, 0x00, 0x00, 0x01,
315da0c48c4Sopenharmony_ci    0x7f, 0xff, 0xff, 0xff,
316da0c48c4Sopenharmony_ci    0x7f, 0xff, 0xff, 0xfe,
317da0c48c4Sopenharmony_ci    /* u64 */
318da0c48c4Sopenharmony_ci    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
319da0c48c4Sopenharmony_ci    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
320da0c48c4Sopenharmony_ci    0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
321da0c48c4Sopenharmony_ci    0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
322da0c48c4Sopenharmony_ci    0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
323da0c48c4Sopenharmony_ci    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
324da0c48c4Sopenharmony_ci    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
325da0c48c4Sopenharmony_ci    /* s64 */
326da0c48c4Sopenharmony_ci    0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
327da0c48c4Sopenharmony_ci    0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
328da0c48c4Sopenharmony_ci    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
329da0c48c4Sopenharmony_ci    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
330da0c48c4Sopenharmony_ci    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
331da0c48c4Sopenharmony_ci    0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
332da0c48c4Sopenharmony_ci    0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
333da0c48c4Sopenharmony_ci  };
334da0c48c4Sopenharmony_ci
335da0c48c4Sopenharmony_ciint
336da0c48c4Sopenharmony_cimain (int argc, char **argv __attribute__((unused)))
337da0c48c4Sopenharmony_ci{
338da0c48c4Sopenharmony_ci  /* No arguments means check, otherwise Write out the memory array.  */
339da0c48c4Sopenharmony_ci  bool write = false;
340da0c48c4Sopenharmony_ci  if (argc > 1)
341da0c48c4Sopenharmony_ci    write = true;
342da0c48c4Sopenharmony_ci
343da0c48c4Sopenharmony_ci  bool is_le = (BYTE_ORDER == LITTLE_ENDIAN);
344da0c48c4Sopenharmony_ci
345da0c48c4Sopenharmony_ci  if (write)
346da0c48c4Sopenharmony_ci    {
347da0c48c4Sopenharmony_ci      if (is_le)
348da0c48c4Sopenharmony_ci	printf ("static unsigned char le_mem[] =\n");
349da0c48c4Sopenharmony_ci      else
350da0c48c4Sopenharmony_ci	printf ("static unsigned char be_mem[] =\n");
351da0c48c4Sopenharmony_ci      printf ("  {\n");
352da0c48c4Sopenharmony_ci    }
353da0c48c4Sopenharmony_ci
354da0c48c4Sopenharmony_ci  Dwarf dbg_le = { .other_byte_order = !is_le };
355da0c48c4Sopenharmony_ci  Dwarf dbg_be = { .other_byte_order = is_le };
356da0c48c4Sopenharmony_ci
357da0c48c4Sopenharmony_ci  unsigned char *p_le = le_mem;
358da0c48c4Sopenharmony_ci  unsigned char *p_be = be_mem;
359da0c48c4Sopenharmony_ci
360da0c48c4Sopenharmony_ci  union u8 u8;
361da0c48c4Sopenharmony_ci  if (write)
362da0c48c4Sopenharmony_ci    printf ("    /* u8 */\n");
363da0c48c4Sopenharmony_ci  for (size_t i = 0; i < sizeof (u8_nums) / sizeof (u8); i++)
364da0c48c4Sopenharmony_ci    {
365da0c48c4Sopenharmony_ci      if (write)
366da0c48c4Sopenharmony_ci	{
367da0c48c4Sopenharmony_ci	  u8.v = u8_nums[i];
368da0c48c4Sopenharmony_ci	  printf ("    0x%02" PRIx8 ",\n", u8.c[0]);
369da0c48c4Sopenharmony_ci	}
370da0c48c4Sopenharmony_ci      else
371da0c48c4Sopenharmony_ci	{
372da0c48c4Sopenharmony_ci	  uint8_t v = *p_le++;
373da0c48c4Sopenharmony_ci	  assert (v == u8_nums[i]);
374da0c48c4Sopenharmony_ci	  v = *p_be++;
375da0c48c4Sopenharmony_ci	  assert (v == u8_nums[i]);
376da0c48c4Sopenharmony_ci	}
377da0c48c4Sopenharmony_ci    }
378da0c48c4Sopenharmony_ci
379da0c48c4Sopenharmony_ci  union s8 s8;
380da0c48c4Sopenharmony_ci  if (write)
381da0c48c4Sopenharmony_ci    printf ("    /* s8 */\n");
382da0c48c4Sopenharmony_ci  for (size_t i = 0; i < sizeof (s8_nums) / sizeof (s8); i++)
383da0c48c4Sopenharmony_ci    {
384da0c48c4Sopenharmony_ci      if (write)
385da0c48c4Sopenharmony_ci	{
386da0c48c4Sopenharmony_ci	  s8.v = s8_nums[i];
387da0c48c4Sopenharmony_ci	  printf ("    0x%02" PRIx8 ",\n", s8.c[0]);
388da0c48c4Sopenharmony_ci	}
389da0c48c4Sopenharmony_ci      else
390da0c48c4Sopenharmony_ci	{
391da0c48c4Sopenharmony_ci	  int8_t v = *p_le++;
392da0c48c4Sopenharmony_ci	  assert (v == s8_nums[i]);
393da0c48c4Sopenharmony_ci	  v = *p_be++;
394da0c48c4Sopenharmony_ci	  assert (v == s8_nums[i]);
395da0c48c4Sopenharmony_ci	}
396da0c48c4Sopenharmony_ci    }
397da0c48c4Sopenharmony_ci
398da0c48c4Sopenharmony_ci  union u16 u16;
399da0c48c4Sopenharmony_ci  if (write)
400da0c48c4Sopenharmony_ci    printf ("    /* u16 */\n");
401da0c48c4Sopenharmony_ci  for (size_t i = 0; i < sizeof (u16_nums) / sizeof (u16); i++)
402da0c48c4Sopenharmony_ci    {
403da0c48c4Sopenharmony_ci      if (write)
404da0c48c4Sopenharmony_ci	{
405da0c48c4Sopenharmony_ci	  u16.v = u16_nums[i];
406da0c48c4Sopenharmony_ci	  printf ("    0x%02" PRIx8 ", ", u16.c[0]);
407da0c48c4Sopenharmony_ci	  printf ("0x%02" PRIx8 ",\n", u16.c[1]);
408da0c48c4Sopenharmony_ci	}
409da0c48c4Sopenharmony_ci      else
410da0c48c4Sopenharmony_ci	{
411da0c48c4Sopenharmony_ci	  uint16_t v = read_2ubyte_unaligned_inc (&dbg_le, p_le);
412da0c48c4Sopenharmony_ci	  assert (v == u16_nums[i]);
413da0c48c4Sopenharmony_ci	  v = read_2ubyte_unaligned_inc (&dbg_be, p_be);
414da0c48c4Sopenharmony_ci	  assert (v == u16_nums[i]);
415da0c48c4Sopenharmony_ci	}
416da0c48c4Sopenharmony_ci    }
417da0c48c4Sopenharmony_ci
418da0c48c4Sopenharmony_ci  union s16 s16;
419da0c48c4Sopenharmony_ci  if (write)
420da0c48c4Sopenharmony_ci    printf ("    /* s16 */\n");
421da0c48c4Sopenharmony_ci  for (size_t i = 0; i < sizeof (s16_nums) / sizeof (s16); i++)
422da0c48c4Sopenharmony_ci    {
423da0c48c4Sopenharmony_ci      if (write)
424da0c48c4Sopenharmony_ci	{
425da0c48c4Sopenharmony_ci	  s16.v = s16_nums[i];
426da0c48c4Sopenharmony_ci	  printf ("    0x%02" PRIx8 ", ", s16.c[0]);
427da0c48c4Sopenharmony_ci	  printf ("0x%02" PRIx8 ",\n", s16.c[1]);
428da0c48c4Sopenharmony_ci	}
429da0c48c4Sopenharmony_ci      else
430da0c48c4Sopenharmony_ci	{
431da0c48c4Sopenharmony_ci	  int16_t v = read_2sbyte_unaligned_inc (&dbg_le, p_le);
432da0c48c4Sopenharmony_ci	  assert (v == s16_nums[i]);
433da0c48c4Sopenharmony_ci	  v = read_2sbyte_unaligned_inc (&dbg_be, p_be);
434da0c48c4Sopenharmony_ci	  assert (v == s16_nums[i]);
435da0c48c4Sopenharmony_ci	}
436da0c48c4Sopenharmony_ci    }
437da0c48c4Sopenharmony_ci
438da0c48c4Sopenharmony_ci  union u24 u24;
439da0c48c4Sopenharmony_ci  if (write)
440da0c48c4Sopenharmony_ci    printf ("    /* u24 */\n");
441da0c48c4Sopenharmony_ci  for (size_t i = 0; i < sizeof (u24_nums) / sizeof (uint32_t); i++)
442da0c48c4Sopenharmony_ci    {
443da0c48c4Sopenharmony_ci      if (write)
444da0c48c4Sopenharmony_ci	{
445da0c48c4Sopenharmony_ci	  u24.v = u24_nums[i];
446da0c48c4Sopenharmony_ci	  printf ("    0x%02" PRIx8 ", ", u24.c[0]);
447da0c48c4Sopenharmony_ci	  printf ("0x%02" PRIx8 ", ", u24.c[1]);
448da0c48c4Sopenharmony_ci	  printf ("0x%02" PRIx8 ",\n", u24.c[2]);
449da0c48c4Sopenharmony_ci	}
450da0c48c4Sopenharmony_ci      else
451da0c48c4Sopenharmony_ci	{
452da0c48c4Sopenharmony_ci	  uint32_t v = read_3ubyte_unaligned_inc (&dbg_le, p_le);
453da0c48c4Sopenharmony_ci	  assert (v == u24_nums[i]);
454da0c48c4Sopenharmony_ci	  v = read_3ubyte_unaligned_inc (&dbg_be, p_be);
455da0c48c4Sopenharmony_ci	  assert (v == u24_nums[i]);
456da0c48c4Sopenharmony_ci	}
457da0c48c4Sopenharmony_ci    }
458da0c48c4Sopenharmony_ci
459da0c48c4Sopenharmony_ci  union u32 u32;
460da0c48c4Sopenharmony_ci  if (write)
461da0c48c4Sopenharmony_ci    printf ("    /* u32 */\n");
462da0c48c4Sopenharmony_ci  for (size_t i = 0; i < sizeof (u32_nums) / sizeof (u32); i++)
463da0c48c4Sopenharmony_ci    {
464da0c48c4Sopenharmony_ci      if (write)
465da0c48c4Sopenharmony_ci	{
466da0c48c4Sopenharmony_ci	  u32.v = u32_nums[i];
467da0c48c4Sopenharmony_ci	  printf ("    0x%02" PRIx8 ", ", u32.c[0]);
468da0c48c4Sopenharmony_ci	  printf ("0x%02" PRIx8 ", ", u32.c[1]);
469da0c48c4Sopenharmony_ci	  printf ("0x%02" PRIx8 ", ", u32.c[2]);
470da0c48c4Sopenharmony_ci	  printf ("0x%02" PRIx8 ",\n", u32.c[3]);
471da0c48c4Sopenharmony_ci	}
472da0c48c4Sopenharmony_ci      else
473da0c48c4Sopenharmony_ci	{
474da0c48c4Sopenharmony_ci	  uint32_t v = read_4ubyte_unaligned_inc (&dbg_le, p_le);
475da0c48c4Sopenharmony_ci	  assert (v == u32_nums[i]);
476da0c48c4Sopenharmony_ci	  v = read_4ubyte_unaligned_inc (&dbg_be, p_be);
477da0c48c4Sopenharmony_ci	  assert (v == u32_nums[i]);
478da0c48c4Sopenharmony_ci	}
479da0c48c4Sopenharmony_ci    }
480da0c48c4Sopenharmony_ci
481da0c48c4Sopenharmony_ci  union s32 s32;
482da0c48c4Sopenharmony_ci  if (write)
483da0c48c4Sopenharmony_ci    printf ("    /* s32 */\n");
484da0c48c4Sopenharmony_ci  for (size_t i = 0; i < sizeof (s32_nums) / sizeof (s32); i++)
485da0c48c4Sopenharmony_ci    {
486da0c48c4Sopenharmony_ci      if (write)
487da0c48c4Sopenharmony_ci	{
488da0c48c4Sopenharmony_ci	  s32.v = s32_nums[i];
489da0c48c4Sopenharmony_ci	  printf ("    0x%02" PRIx8 ", ", s32.c[0]);
490da0c48c4Sopenharmony_ci	  printf ("0x%02" PRIx8 ", ", s32.c[1]);
491da0c48c4Sopenharmony_ci	  printf ("0x%02" PRIx8 ", ", s32.c[2]);
492da0c48c4Sopenharmony_ci	  printf ("0x%02" PRIx8 ",\n", s32.c[3]);
493da0c48c4Sopenharmony_ci	}
494da0c48c4Sopenharmony_ci      else
495da0c48c4Sopenharmony_ci	{
496da0c48c4Sopenharmony_ci	  int32_t v = read_4sbyte_unaligned_inc (&dbg_le, p_le);
497da0c48c4Sopenharmony_ci	  assert (v == s32_nums[i]);
498da0c48c4Sopenharmony_ci	  v = read_4sbyte_unaligned_inc (&dbg_be, p_be);
499da0c48c4Sopenharmony_ci	  assert (v == s32_nums[i]);
500da0c48c4Sopenharmony_ci	}
501da0c48c4Sopenharmony_ci    }
502da0c48c4Sopenharmony_ci
503da0c48c4Sopenharmony_ci  union u64 u64;
504da0c48c4Sopenharmony_ci  if (write)
505da0c48c4Sopenharmony_ci    printf ("    /* u64 */\n");
506da0c48c4Sopenharmony_ci  for (size_t i = 0; i < sizeof (u64_nums) / sizeof (u64); i++)
507da0c48c4Sopenharmony_ci    {
508da0c48c4Sopenharmony_ci      if (write)
509da0c48c4Sopenharmony_ci	{
510da0c48c4Sopenharmony_ci	  u64.v = u64_nums[i];
511da0c48c4Sopenharmony_ci	  printf ("    0x%02" PRIx8 ", ", u64.c[0]);
512da0c48c4Sopenharmony_ci	  printf ("0x%02" PRIx8 ", ", u64.c[1]);
513da0c48c4Sopenharmony_ci	  printf ("0x%02" PRIx8 ", ", u64.c[2]);
514da0c48c4Sopenharmony_ci	  printf ("0x%02" PRIx8 ", ", u64.c[3]);
515da0c48c4Sopenharmony_ci	  printf ("0x%02" PRIx8 ", ", u64.c[4]);
516da0c48c4Sopenharmony_ci	  printf ("0x%02" PRIx8 ", ", u64.c[5]);
517da0c48c4Sopenharmony_ci	  printf ("0x%02" PRIx8 ", ", u64.c[6]);
518da0c48c4Sopenharmony_ci	  printf ("0x%02" PRIx8 ",\n", u64.c[7]);
519da0c48c4Sopenharmony_ci	}
520da0c48c4Sopenharmony_ci      else
521da0c48c4Sopenharmony_ci	{
522da0c48c4Sopenharmony_ci	  uint64_t v = read_8ubyte_unaligned_inc (&dbg_le, p_le);
523da0c48c4Sopenharmony_ci	  assert (v == u64_nums[i]);
524da0c48c4Sopenharmony_ci	  v = read_8ubyte_unaligned_inc (&dbg_be, p_be);
525da0c48c4Sopenharmony_ci	  assert (v == u64_nums[i]);
526da0c48c4Sopenharmony_ci	}
527da0c48c4Sopenharmony_ci    }
528da0c48c4Sopenharmony_ci
529da0c48c4Sopenharmony_ci  union s64 s64;
530da0c48c4Sopenharmony_ci  if (write)
531da0c48c4Sopenharmony_ci    printf ("    /* s64 */\n");
532da0c48c4Sopenharmony_ci  for (size_t i = 0; i < sizeof (s64_nums) / sizeof (s64); i++)
533da0c48c4Sopenharmony_ci    {
534da0c48c4Sopenharmony_ci      if (write)
535da0c48c4Sopenharmony_ci	{
536da0c48c4Sopenharmony_ci	  s64.v = s64_nums[i];
537da0c48c4Sopenharmony_ci	  printf ("    0x%02" PRIx8 ", ", s64.c[0]);
538da0c48c4Sopenharmony_ci	  printf ("0x%02" PRIx8 ", ", s64.c[1]);
539da0c48c4Sopenharmony_ci	  printf ("0x%02" PRIx8 ", ", s64.c[2]);
540da0c48c4Sopenharmony_ci	  printf ("0x%02" PRIx8 ", ", s64.c[3]);
541da0c48c4Sopenharmony_ci	  printf ("0x%02" PRIx8 ", ", s64.c[4]);
542da0c48c4Sopenharmony_ci	  printf ("0x%02" PRIx8 ", ", s64.c[5]);
543da0c48c4Sopenharmony_ci	  printf ("0x%02" PRIx8 ", ", s64.c[6]);
544da0c48c4Sopenharmony_ci	  printf ("0x%02" PRIx8 ",\n", s64.c[7]);
545da0c48c4Sopenharmony_ci	}
546da0c48c4Sopenharmony_ci      else
547da0c48c4Sopenharmony_ci	{
548da0c48c4Sopenharmony_ci	  int64_t v = read_8sbyte_unaligned_inc (&dbg_le, p_le);
549da0c48c4Sopenharmony_ci	  assert (v == s64_nums[i]);
550da0c48c4Sopenharmony_ci	  v = read_8sbyte_unaligned_inc (&dbg_be, p_be);
551da0c48c4Sopenharmony_ci	  assert (v == s64_nums[i]);
552da0c48c4Sopenharmony_ci	}
553da0c48c4Sopenharmony_ci    }
554da0c48c4Sopenharmony_ci
555da0c48c4Sopenharmony_ci  if (write)
556da0c48c4Sopenharmony_ci    printf ("  };\n");
557da0c48c4Sopenharmony_ci  else
558da0c48c4Sopenharmony_ci    {
559da0c48c4Sopenharmony_ci      assert (p_le == le_mem + sizeof (le_mem));
560da0c48c4Sopenharmony_ci      assert (p_be == be_mem + sizeof (be_mem));
561da0c48c4Sopenharmony_ci    }
562da0c48c4Sopenharmony_ci
563da0c48c4Sopenharmony_ci  return 0;
564da0c48c4Sopenharmony_ci}
565