xref: /illumos-gate/usr/src/test/util-tests/tests/mdb/progs/anon.c (revision 8b184c19c5f61fa8890900f7bab686bf19b543d3)
1*8b184c19SRobert Mustacchi /*
2*8b184c19SRobert Mustacchi  * This file and its contents are supplied under the terms of the
3*8b184c19SRobert Mustacchi  * Common Development and Distribution License ("CDDL"), version 1.0.
4*8b184c19SRobert Mustacchi  * You may only use this file in accordance with the terms of version
5*8b184c19SRobert Mustacchi  * 1.0 of the CDDL.
6*8b184c19SRobert Mustacchi  *
7*8b184c19SRobert Mustacchi  * A full copy of the text of the CDDL should have accompanied this
8*8b184c19SRobert Mustacchi  * source.  A copy of the CDDL is also available via the Internet at
9*8b184c19SRobert Mustacchi  * http://www.illumos.org/license/CDDL.
10*8b184c19SRobert Mustacchi  */
11*8b184c19SRobert Mustacchi 
12*8b184c19SRobert Mustacchi /*
13*8b184c19SRobert Mustacchi  * Copyright 2025 Oxide Computer Company
14*8b184c19SRobert Mustacchi  */
15*8b184c19SRobert Mustacchi 
16*8b184c19SRobert Mustacchi /*
17*8b184c19SRobert Mustacchi  * This file is paired with the sou/tst.anon.ksh mdb test. It's design to
18*8b184c19SRobert Mustacchi  * include a number of structures and unions with anonymous values that we can
19*8b184c19SRobert Mustacchi  * test with various commands to make sure we properly resolve member names
20*8b184c19SRobert Mustacchi  * through them.
21*8b184c19SRobert Mustacchi  */
22*8b184c19SRobert Mustacchi 
23*8b184c19SRobert Mustacchi struct foo {
24*8b184c19SRobert Mustacchi 	int foo;
25*8b184c19SRobert Mustacchi };
26*8b184c19SRobert Mustacchi 
27*8b184c19SRobert Mustacchi struct bar {
28*8b184c19SRobert Mustacchi 	const char *bar;
29*8b184c19SRobert Mustacchi 	union {
30*8b184c19SRobert Mustacchi 		struct foo bar_foo;
31*8b184c19SRobert Mustacchi 		int bar_int;
32*8b184c19SRobert Mustacchi 	};
33*8b184c19SRobert Mustacchi };
34*8b184c19SRobert Mustacchi 
35*8b184c19SRobert Mustacchi struct baz {
36*8b184c19SRobert Mustacchi 	struct {
37*8b184c19SRobert Mustacchi 		const char *baz_str;
38*8b184c19SRobert Mustacchi 		int baz_anon;
39*8b184c19SRobert Mustacchi 	};
40*8b184c19SRobert Mustacchi 	int baz_int;
41*8b184c19SRobert Mustacchi };
42*8b184c19SRobert Mustacchi 
43*8b184c19SRobert Mustacchi struct foobar {
44*8b184c19SRobert Mustacchi 	int foobar_int;
45*8b184c19SRobert Mustacchi 	union {
46*8b184c19SRobert Mustacchi 		struct foo foo;
47*8b184c19SRobert Mustacchi 		struct bar bar;
48*8b184c19SRobert Mustacchi 		struct baz baz;
49*8b184c19SRobert Mustacchi 		struct {
50*8b184c19SRobert Mustacchi 			void *foobar_ptr;
51*8b184c19SRobert Mustacchi 			int foobar_anon;
52*8b184c19SRobert Mustacchi 		};
53*8b184c19SRobert Mustacchi 	};
54*8b184c19SRobert Mustacchi 	struct {
55*8b184c19SRobert Mustacchi 		int a;
56*8b184c19SRobert Mustacchi 		int b;
57*8b184c19SRobert Mustacchi 		int c;
58*8b184c19SRobert Mustacchi 	};
59*8b184c19SRobert Mustacchi 	union {
60*8b184c19SRobert Mustacchi 		int d;
61*8b184c19SRobert Mustacchi 		int e;
62*8b184c19SRobert Mustacchi 		int f;
63*8b184c19SRobert Mustacchi 	};
64*8b184c19SRobert Mustacchi };
65*8b184c19SRobert Mustacchi 
66*8b184c19SRobert Mustacchi struct foo foo = { .foo = 42 };
67*8b184c19SRobert Mustacchi struct bar bar = { .bar = "hello world", .bar_int = 0x7777 };
68*8b184c19SRobert Mustacchi struct baz baz = {
69*8b184c19SRobert Mustacchi 	.baz_anon = 0x9999,
70*8b184c19SRobert Mustacchi 	.baz_str = "It's a trap?!",
71*8b184c19SRobert Mustacchi 	.baz_int = -4
72*8b184c19SRobert Mustacchi };
73*8b184c19SRobert Mustacchi 
74*8b184c19SRobert Mustacchi struct foobar foobar = {
75*8b184c19SRobert Mustacchi 	.foobar_int = 0xb295,
76*8b184c19SRobert Mustacchi 	.bar = { .bar = "Elbereth", .bar_int = 0x7777 },
77*8b184c19SRobert Mustacchi 	.a = 0x9876,
78*8b184c19SRobert Mustacchi 	.b = 0x12345,
79*8b184c19SRobert Mustacchi 	.c = 0xb22b,
80*8b184c19SRobert Mustacchi 	.e = 0xfdcba
81*8b184c19SRobert Mustacchi };
82*8b184c19SRobert Mustacchi 
83*8b184c19SRobert Mustacchi struct stringless {
84*8b184c19SRobert Mustacchi 	union {
85*8b184c19SRobert Mustacchi 		struct {
86*8b184c19SRobert Mustacchi 			int life;
87*8b184c19SRobert Mustacchi 			int hope;
88*8b184c19SRobert Mustacchi 		};
89*8b184c19SRobert Mustacchi 		int dreams;
90*8b184c19SRobert Mustacchi 		union {
91*8b184c19SRobert Mustacchi 			char k;
92*8b184c19SRobert Mustacchi 			short e;
93*8b184c19SRobert Mustacchi 			int f;
94*8b184c19SRobert Mustacchi 			long a;
95*8b184c19SRobert Mustacchi 		};
96*8b184c19SRobert Mustacchi 		double destroy;
97*8b184c19SRobert Mustacchi 	};
98*8b184c19SRobert Mustacchi };
99*8b184c19SRobert Mustacchi 
100*8b184c19SRobert Mustacchi struct stringless stringless = { .life = 0xaa7777aa, .hope = 0x339999ee };
101*8b184c19SRobert Mustacchi 
102*8b184c19SRobert Mustacchi int
main(void)103*8b184c19SRobert Mustacchi main(void)
104*8b184c19SRobert Mustacchi {
105*8b184c19SRobert Mustacchi 	return (0);
106*8b184c19SRobert Mustacchi }
107