Hi Luc, Thanks for your comments!
On Thu, Nov 13, 2025 at 4:33 AM Luc Park-Chouinard <[email protected]> wrote: > > Hi Tao, Lianbo, > > eppic.c is the glue between a release cycle for crash and ongoing changes to > eppic v5.0. That file is yours and you can commit to it freely. > I can grant commit access to you guys to remove the delays due to TZ or > availability. Thanks for that, please add me in, my github account is liutgnu. > > One could even ask the question - if eppic.c should just be on the crash repo > side. But I still believe there is benefit to have it be part of eppic to > reduce backward/forward comp issues. > > I like the proposed crash-dev changes. Never realized dlopen(NULL) was for > /proc/self... Cool. > The more flexibility in what we can do, the better. OK, good to know your thoughts! Then I will delete the empty eppic.patch file in the crash repo side. And I will do the new feature testing/developing in my eppic forked repo first. Once it is ready to go, I will push it to your upstream eppic repo. Thanks again for your help on this! Thanks, Tao Liu > > > > On Tue, Nov 11, 2025 at 8:43 PM Tao Liu <[email protected]> wrote: >> >> On Wed, Nov 12, 2025 at 3:50 PM lijiang <[email protected]> wrote: >> > >> > On Wed, Nov 12, 2025 at 9:38 AM Tao Liu <[email protected]> wrote: >> >> >> >> Hi Lianbo, >> >> >> >> On Tue, Nov 11, 2025 at 4:30 PM lijiang <[email protected]> wrote: >> >> > >> >> > On Mon, Nov 10, 2025 at 8:01 AM >> >> > <[email protected]> wrote: >> >> >> >> >> >> Date: Mon, 10 Nov 2025 12:59:34 +1300 >> >> >> From: Tao Liu <[email protected]> >> >> >> Subject: [Crash-utility] [PATCH] eppic.patch: Empty the customized >> >> >> functions and move to eppic >> >> >> To: [email protected] >> >> >> Cc: Tao Liu <[email protected]> >> >> >> Message-ID: <[email protected]> >> >> >> Content-Type: text/plain; charset="US-ASCII"; x-default=true >> >> >> >> >> >> The customized functions will be moved to eppic side[1]. Let's keep >> >> >> an empty eppic.patch here for future use. >> >> > >> >> > >> >> > Do you mean to still keep the changes in the extensions/eppic.mk? >> >> > I would tend to make a cleanup, if this has already been moved to >> >> > upstream Eppic git repo. The code looks more friendly. >> >> > >> >> Actually I'd like to keep changes for extensions/eppic.mk and the >> >> empty eppic.patch. Because there will be further improvements to >> >> eppic, like the ones in my crash-dev repo of the aggressive >> >> improvements. I'm unsure if eppic maintainers like it. If I will put >> > >> > >> > Given that, I would suggest discussing with eppic maintainers to see if >> > your improvement is needed in the eppic project, and then >> > we can decide whether to keep it. What do you think? >> >> Sure, cc to lucchouina. >> >> Hi @lucchouina, >> >> For functions like calling crash functions within eppic script, I have >> made a POC in [1], currently it is not well tested and not mature. >> What do you think of it, do you prefer to keep it, once it is mature >> and good to go, in the eppic repo side; or to leave it within the >> eppic.patch of crash repo side? >> >> If we leave it to stay with the eppic repo side, then for crash the >> empty eppic.patch file is no longer needed and is ready to be deleted. >> >> [1]: >> https://github.com/liutgnu/crash-dev/blob/eppic/extensions/eppic.patch#L135 >> >> Thanks, >> Tao Liu >> >> >> >> > >> > Lianbo >> > >> >> those improvements in crash, code changes in extensions/eppic.mk and >> >> eppic.patch are still needed. >> >> >> >> Thanks, >> >> Tao Liu >> >> >> >> > Thanks >> >> > Lianbo >> >> > >> >> >> >> >> >> >> >> >> [1]: https://github.com/lucchouina/eppic/pull/30 >> >> >> >> >> >> Signed-off-by: Tao Liu <[email protected]> >> >> >> --- >> >> >> extensions/eppic.patch | 210 ----------------------------------------- >> >> >> 1 file changed, 210 deletions(-) >> >> >> >> >> >> diff --git a/extensions/eppic.patch b/extensions/eppic.patch >> >> >> index 6a08b09..e69de29 100644 >> >> >> --- a/extensions/eppic.patch >> >> >> +++ b/extensions/eppic.patch >> >> >> @@ -1,210 +0,0 @@ >> >> >> ---- eppic/applications/crash/eppic.c.orig >> >> >> -+++ eppic/applications/crash/eppic.c >> >> >> -@@ -20,6 +20,7 @@ >> >> >> - #include "defs.h" >> >> >> - >> >> >> - #include <eppic_api.h> >> >> >> -+#include "eppic.h" >> >> >> - >> >> >> - /* >> >> >> - * Global data (global_data.c) >> >> >> -@@ -788,6 +789,39 @@ char *sclass_help[]={ >> >> >> - NULL >> >> >> - }; >> >> >> - >> >> >> -+char *eppic_help[]={ >> >> >> -+ "eppic", >> >> >> -+ "Run eppic program(es).", >> >> >> -+ "<fileName1.c>[, <fileName2.c>]", >> >> >> -+ " Oneshot run eppic program(es) which with a main() >> >> >> entry each.", >> >> >> -+ NULL >> >> >> -+}; >> >> >> -+ >> >> >> -+void >> >> >> -+eppic_command(void) >> >> >> -+{ >> >> >> -+ char *buf; >> >> >> -+ optind = 1; >> >> >> -+ >> >> >> -+ if (!args[optind]) { >> >> >> -+ cmd_usage(crash_global_cmd(), SYNOPSIS); >> >> >> -+ return; >> >> >> -+ } >> >> >> -+ >> >> >> -+ while(args[optind]) { >> >> >> -+ buf = eppic_filempath(args[optind]); >> >> >> -+ if (!buf) { >> >> >> -+ eppic_msg("eppic_filempath error on %s\n", >> >> >> args[optind]); >> >> >> -+ return; >> >> >> -+ } >> >> >> -+ eppic_load(buf); >> >> >> -+ if (eppic_findfile(buf, 0)) >> >> >> -+ eppic_unload(buf); >> >> >> -+ eppic_free(buf); >> >> >> -+ optind++; >> >> >> -+ } >> >> >> -+} >> >> >> -+ >> >> >> - #define NCMDS 200 >> >> >> - static struct command_table_entry command_table[NCMDS] = { >> >> >> - >> >> >> -@@ -797,6 +831,7 @@ static struct command_table_entry >> >> >> command_table[NCMDS] = { >> >> >> - {"sdebug", sdebug_cmd, sdebug_help}, >> >> >> - {"sname", sname_cmd, sname_help}, >> >> >> - {"sclass", sclass_cmd, sclass_help}, >> >> >> -+ {"eppic", eppic_command, eppic_help}, >> >> >> - {(char *)0 } >> >> >> - }; >> >> >> - >> >> >> -@@ -885,6 +920,13 @@ char **help=malloc(sizeof *help * 5); >> >> >> - } >> >> >> - } >> >> >> - free(help); >> >> >> -+ >> >> >> -+ if (load && !strcmp(name, "main")) { >> >> >> -+ int optind_save = optind; >> >> >> -+ eppic_cmd(name, NULL, 0); >> >> >> -+ optind = optind_save; >> >> >> -+ } >> >> >> -+ >> >> >> - return; >> >> >> - } >> >> >> - >> >> >> ---- eppic/libeppic/eppic_api.h.orig >> >> >> -+++ eppic/libeppic/eppic_api.h >> >> >> -@@ -16,6 +16,9 @@ >> >> >> - /* minor and major version number >> >> >> - 4.0 switch to new Eppic name and use of fully typed symbols. >> >> >> - */ >> >> >> -+#ifndef EPPIC_API_H >> >> >> -+#define EPPIC_API_H >> >> >> -+ >> >> >> - #define S_MAJOR 5 >> >> >> - #define S_MINOR 0 >> >> >> - >> >> >> -@@ -298,3 +301,5 @@ void eppic_dbg_named(int class, char *name, int >> >> >> level, char *, ...); >> >> >> - >> >> >> - /* parsers debug flags */ >> >> >> - extern int eppicdebug, eppicppdebug; >> >> >> -+ >> >> >> -+#endif >> >> >> -\ No newline at end of file >> >> >> ---- eppic/libeppic/eppic_func.c.orig >> >> >> -+++ eppic/libeppic/eppic_func.c >> >> >> -@@ -22,6 +22,8 @@ >> >> >> - #include <sys/types.h> >> >> >> - #include <time.h> >> >> >> - #include <sys/stat.h> >> >> >> -+#include <fcntl.h> >> >> >> -+#include <unistd.h> >> >> >> - #include "eppic.h" >> >> >> - >> >> >> - /* >> >> >> -@@ -793,6 +795,42 @@ char *ed=getenv("EDITOR"); >> >> >> - if(!system(buf)) eppic_load(fname); >> >> >> - } >> >> >> - >> >> >> -+static const char *example[] = { >> >> >> -+"/* >> >> >> ", >> >> >> -+" * Example: Print all tasks' PID & command >> >> >> ", >> >> >> -+" * >> >> >> ", >> >> >> -+" * // Kernel's global variables and data structures can be used >> >> >> directly without", >> >> >> -+" * // pre-define it in kernel header. If any are within kernel >> >> >> modules, should", >> >> >> -+" * // preload the .ko first via \"mod -S/-s\" cmd in crash before >> >> >> invoke your", >> >> >> -+" * // eppic program. >> >> >> ", >> >> >> -+" * // >> >> >> ", >> >> >> -+" * // Eppic program's syntax is similar to C but with slight >> >> >> differences. ", >> >> >> -+" * // Code samples: >> >> >> ", >> >> >> -+" * // >> >> >> https://github.com/lucchouina/eppic/tree/master/applications/crash/code", >> >> >> -+" * // Available eppic functions: >> >> >> ", >> >> >> -+" * // >> >> >> https://github.com/lucchouina/eppic/blob/master/libeppic/eppic_builtin.c#L316", >> >> >> -+" * >> >> >> ", >> >> >> -+" * int main(void) >> >> >> ", >> >> >> -+" * { >> >> >> ", >> >> >> -+" * struct task_struct *p; >> >> >> ", >> >> >> -+" * unsigned long offset; >> >> >> ", >> >> >> -+" * >> >> >> ", >> >> >> -+" * p = (struct task_struct *)&init_task; >> >> >> ", >> >> >> -+" * offset = (unsigned long)&(p->tasks) - (unsigned long)p; >> >> >> ", >> >> >> -+" * >> >> >> ", >> >> >> -+" * do { >> >> >> ", >> >> >> -+" * printf(\"PID: %d Command: %s\\n\", (int)(p->pid), >> >> >> getstr((char *)&(p->comm[0])));", >> >> >> -+" * p = (struct task_struct *)((unsigned >> >> >> long)(p->tasks.next) - offset);", >> >> >> -+" * } while(p != &init_task); >> >> >> ", >> >> >> -+" * >> >> >> ", >> >> >> -+" * return 0; >> >> >> ", >> >> >> -+" * } >> >> >> ", >> >> >> -+" * >> >> >> ", >> >> >> -+" * crash> eppic program_file.c >> >> >> ", >> >> >> -+" */ >> >> >> ", >> >> >> -+}; >> >> >> -+ >> >> >> -+char *eppic_get_func_file(char *); >> >> >> - /* >> >> >> - This funciton is called to start a vi session on a function >> >> >> - (file=0) or a file (file=1); >> >> >> -@@ -800,24 +838,31 @@ char *ed=getenv("EDITOR"); >> >> >> - void >> >> >> - eppic_vi(char *fname, int file) >> >> >> - { >> >> >> --int line, freeit=0; >> >> >> -+int line=1, freeit=0, fd; >> >> >> - char *filename; >> >> >> -+char newline = '\n'; >> >> >> - >> >> >> - if(file) { >> >> >> - >> >> >> - filename=eppic_filempath(fname); >> >> >> - >> >> >> - if(!filename) { >> >> >> -- >> >> >> -- eppic_msg("File not found : %s\n", fname); >> >> >> -- return; >> >> >> -- >> >> >> -- } >> >> >> -- >> >> >> -- line=1; >> >> >> -- freeit=1; >> >> >> -- >> >> >> -- >> >> >> -+ fd = open(fname, O_WRONLY | O_CREAT | O_TRUNC, 0644); >> >> >> -+ if (fd < 0) { >> >> >> -+ eppic_msg("File not found : %s\n", fname); >> >> >> -+ return; >> >> >> -+ } else { >> >> >> -+ for (int i = 0; i < sizeof(example)/sizeof(char *); >> >> >> i++) { >> >> >> -+ write(fd, example[i], strlen(example[i])); >> >> >> -+ write(fd, &newline, sizeof(newline)); >> >> >> -+ } >> >> >> -+ close(fd); >> >> >> -+ filename = fname; >> >> >> -+ freeit=0; >> >> >> -+ } >> >> >> -+ } else { >> >> >> -+ freeit=1; >> >> >> -+ } >> >> >> - } else { >> >> >> - >> >> >> - func *f=eppic_getfbyname(fname, 0); >> >> >> -@@ -837,6 +882,10 @@ char *filename; >> >> >> - >> >> >> - eppic_exevi(filename, line); >> >> >> - >> >> >> -+ char *fi_name = eppic_get_func_file("main"); >> >> >> -+ if (fi_name) >> >> >> -+ eppic_deletefile(fi_name); >> >> >> -+ >> >> >> - if(freeit) eppic_free(filename); >> >> >> - >> >> >> - } >> >> >> -@@ -1184,3 +1233,10 @@ eppic_runcmd(char *fname, var_t*args) >> >> >> - return 0; >> >> >> - } >> >> >> - >> >> >> -+char *eppic_get_func_file(char *funcname) >> >> >> -+{ >> >> >> -+ func *fn = eppic_getfbyname(funcname, 0); >> >> >> -+ if (!fn) >> >> >> -+ return NULL; >> >> >> -+ return fn->file->fname; >> >> >> -+} >> >> >> -- >> >> >> 2.47.0 >> >> >> > > > -- > > - Luc -- Crash-utility mailing list -- [email protected] To unsubscribe send an email to [email protected] https://${domain_name}/admin/lists/devel.lists.crash-utility.osci.io/ Contribution Guidelines: https://github.com/crash-utility/crash/wiki
