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