From 655a62dbf3e02e519c4b8d5444d3848f6a5bdf07 Mon Sep 17 00:00:00 2001 From: yunwei37 <1067852565@qq.com> Date: Sat, 18 Feb 2023 18:15:38 +0800 Subject: [PATCH] update document --- LICENSE | 21 +++++++++++++++++++++ README.md | 6 ++++++ doc/result.png | Bin 0 -> 22165 bytes 3 files changed, 27 insertions(+) create mode 100644 LICENSE create mode 100644 doc/result.png diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..03f05be --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 eunomia-bpf org. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md index 91d2e80..852bdd6 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,11 @@ # GPTtrace +Generate eBPF programs and tracing with ChatGPT and natural language + +For example: + +![result](doc/result.png) + ## Usage ```console diff --git a/doc/result.png b/doc/result.png new file mode 100644 index 0000000000000000000000000000000000000000..2cd2b77202e21ef0e3d5cd4c6dd8978c51fe2656 GIT binary patch literal 22165 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