xref: /aosp_15_r20/external/crosvm/third_party/minijail/dump_constants.cc (revision 4b9c6d91573e8b3a96609339b46361b5476dd0f9)
1*4b9c6d91SCole Faust /* Copyright 2018 The ChromiumOS Authors
2*4b9c6d91SCole Faust  * Use of this source code is governed by a BSD-style license that can be
3*4b9c6d91SCole Faust  * found in the LICENSE file.
4*4b9c6d91SCole Faust  */
5*4b9c6d91SCole Faust 
6*4b9c6d91SCole Faust // Generate a .json file with all the architecture-specific constants.
7*4b9c6d91SCole Faust 
8*4b9c6d91SCole Faust #include <cstdint>
9*4b9c6d91SCole Faust #include <iomanip>
10*4b9c6d91SCole Faust #include <iostream>
11*4b9c6d91SCole Faust #include <string>
12*4b9c6d91SCole Faust 
13*4b9c6d91SCole Faust #include "arch.h"
14*4b9c6d91SCole Faust #include "libconstants.h"
15*4b9c6d91SCole Faust #include "libsyscalls.h"
16*4b9c6d91SCole Faust 
main()17*4b9c6d91SCole Faust int main() {
18*4b9c6d91SCole Faust   // Numeric values are passed to std::cout via std::to_string() to avoid
19*4b9c6d91SCole Faust   // the use of 'bextr' asm instruction (when compiled with -march=bdver4).
20*4b9c6d91SCole Faust   std::cout << "{\n";
21*4b9c6d91SCole Faust   std::cout << "  \"arch_nr\": " << std::to_string(MINIJAIL_ARCH_NR) << ",\n";
22*4b9c6d91SCole Faust   std::cout << "  \"arch_name\": \"" << MINIJAIL_ARCH_NAME << "\",\n";
23*4b9c6d91SCole Faust   std::cout << "  \"bits\": " << std::to_string(MINIJAIL_ARCH_BITS) << ",\n";
24*4b9c6d91SCole Faust   std::cout << "  \"syscalls\": {\n";
25*4b9c6d91SCole Faust   bool first = true;
26*4b9c6d91SCole Faust   for (const struct syscall_entry* entry = syscall_table; entry->name;
27*4b9c6d91SCole Faust        ++entry) {
28*4b9c6d91SCole Faust     if (first)
29*4b9c6d91SCole Faust       first = false;
30*4b9c6d91SCole Faust     else
31*4b9c6d91SCole Faust       std::cout << ",\n";
32*4b9c6d91SCole Faust     std::cout << "    \"" << entry->name << "\": " << std::to_string(entry->nr);
33*4b9c6d91SCole Faust   }
34*4b9c6d91SCole Faust   std::cout << "\n  },\n";
35*4b9c6d91SCole Faust   std::cout << "  \"constants\": {\n";
36*4b9c6d91SCole Faust   first = true;
37*4b9c6d91SCole Faust   for (const struct constant_entry* entry = constant_table; entry->name;
38*4b9c6d91SCole Faust        ++entry) {
39*4b9c6d91SCole Faust     if (first)
40*4b9c6d91SCole Faust       first = false;
41*4b9c6d91SCole Faust     else
42*4b9c6d91SCole Faust       std::cout << ",\n";
43*4b9c6d91SCole Faust     std::cout << "    \"" << entry->name << "\": "
44*4b9c6d91SCole Faust 	      << std::to_string(entry->value);
45*4b9c6d91SCole Faust   }
46*4b9c6d91SCole Faust   std::cout << "\n  }\n";
47*4b9c6d91SCole Faust   std::cout << "}\n";
48*4b9c6d91SCole Faust 
49*4b9c6d91SCole Faust   return 0;
50*4b9c6d91SCole Faust }
51