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 Faustint 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