| // Copyright 2019 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "tools/kazoo/output_util.h" |
| #include "tools/kazoo/outputs.h" |
| |
| bool CategoryOutput(const SyscallLibrary& library, Writer* writer) { |
| CopyrightHeaderWithCppComments(writer); |
| |
| const char* kCategories[] = { |
| "blocking", "const", "noreturn", "test_category1", "test_category2", "vdsocall", |
| }; |
| |
| for (const char* category : kCategories) { |
| std::vector<std::string> syscalls_in_category; |
| for (const auto& syscall : library.syscalls()) { |
| if (syscall->HasAttribute(category)) { |
| syscalls_in_category.push_back(syscall->name()); |
| } |
| } |
| |
| if (!syscalls_in_category.empty()) { |
| std::string category_kernel_style = CamelToSnake(category); |
| writer->Printf("#define HAVE_SYSCALL_CATEGORY_%s 1\n", category_kernel_style.c_str()); |
| writer->Printf("SYSCALL_CATEGORY_BEGIN(%s)\n", category_kernel_style.c_str()); |
| for (const auto& name : syscalls_in_category) { |
| writer->Printf(" SYSCALL_IN_CATEGORY(%s)\n", name.c_str()); |
| } |
| writer->Printf("SYSCALL_CATEGORY_END(%s)\n\n", category_kernel_style.c_str()); |
| } |
| } |
| |
| return true; |
| } |