On Tue, 2022-08-30 at 14:49 -0700, Suren Baghdasaryan wrote: > From: Kent Overstreet <kent.overstreet@xxxxxxxxx> > > This patch adds per-error-site error codes, with error strings that > include their file and line number. > > To use, change code that returns an error, e.g. > return -ENOMEM; > to > return -ERR(ENOMEM); > > Then, errname() will return a string that includes the file and line > number of the ERR() call, for example > printk("Got error %s!\n", errname(err)); > will result in > Got error ENOMEM at foo.c:1234 Why? Something wrong with just using %pe ? printk("Got error %pe at %s:%d!\n", ERR_PTR(err), __FILE__, __LINE__); Likely __FILE__ and __LINE__ aren't particularly useful. And using ERR would add rather a lot of bloat as each codetag_error_code struct would be unique. +#define ERR(_err) \ +({ \ + static struct codetag_error_code \ + __used \ + __section("error_code_tags") \ + __aligned(8) e = { \ + .str = #_err " at " __FILE__ ":" __stringify(__LINE__),\ + .err = _err, \ + }; \ + \ + e.err; \ +})