Re: [PATCH] kernel/module: add name size info to pr_debug() calls

2020-06-30 Thread jim . cromie
On Tue, Jun 30, 2020 at 3:37 AM Jessica Yu  wrote:
>
> +++ Jim Cromie [11/06/20 08:20 -0600]:
> >when booted with arg: module.dyndbg=+p
> >dmesg gets volumes of info about loaded modules.
> >This adds module & symbol names, and sizes where pertinent.
> >Now I can know which module's info Im looking at.
>
> Hi,
>
> Could you please fix the changelog formatting according to
> Documentation/process/submitting-patches.rst? More specifically,
> complete sentences, line wrapped at 75 columns, and a Signed-off-by:
> line at the end. There are plenty of examples if you look through the
> lkml mailing list.
>

ack.  less casual next time. and with -s

> >---
> > kernel/module.c | 14 +++---
> > 1 file changed, 7 insertions(+), 7 deletions(-)
> >
> >diff --git a/kernel/module.c b/kernel/module.c
> >index e8a198588f26..d871d9cee9eb 100644
> >--- a/kernel/module.c
> >+++ b/kernel/module.c
> >@@ -2294,8 +2294,8 @@ static int simplify_symbols(struct module *mod, const 
> >struct load_info *info)
> >
> >   case SHN_ABS:
> >   /* Don't need to do anything */
> >-  pr_debug("Absolute symbol: 0x%08lx\n",
> >- (long)sym[i].st_value);
> >+  pr_debug("Absolute symbol: 0x%08lx %s\n",
> >+   (long)sym[i].st_value, name);
>
> I would prefer "Absolute symbol %s:" rather than putting the symbol
> name at the end.

i chose this for a more tabular appearance,
names vary in length, so value afterwards looks cluttered.
plus its more consistent with preceding messages

[3.458007] 0xc0023d40 0x0030 .bss
[3.458008] 0xc0028000 0x1158 .symtab
[3.458010] 0xc0029158 0x0af5 .strtab
[3.458021] Absolute symbol: 0x rapl.mod.c
[3.458022] Absolute symbol: 0x rapl.c


>
> >   break;
> >
> >   case SHN_LIVEPATCH:
> >@@ -2409,7 +2409,7 @@ static void layout_sections(struct module *mod, struct 
> >load_info *info)
> >   for (i = 0; i < info->hdr->e_shnum; i++)
> >   info->sechdrs[i].sh_entsize = ~0UL;
> >
> >-  pr_debug("Core section allocation order:\n");
> >+  pr_debug("Core section allocation order for: %s\n", mod->name);
>
> I would slightly prefer "Core section allocation order for %s:", but
> it's a matter of taste.
>

done everywhere you noted.


> >   for (m = 0; m < ARRAY_SIZE(masks); ++m) {
> >   for (i = 0; i < info->hdr->e_shnum; ++i) {
> >   Elf_Shdr *s = >sechdrs[i];
> >@@ -2442,7 +2442,7 @@ static void layout_sections(struct module *mod, struct 
> >load_info *info)
> >   }
> >   }
> >
> >-  pr_debug("Init section allocation order:\n");
> >+  pr_debug("Init section allocation order for: %s\n", mod->name);
>
> Same here.
>
> >   for (m = 0; m < ARRAY_SIZE(masks); ++m) {
> >   for (i = 0; i < info->hdr->e_shnum; ++i) {
> >   Elf_Shdr *s = >sechdrs[i];
> >@@ -3276,7 +3276,7 @@ static int move_module(struct module *mod, struct 
> >load_info *info)
> >   mod->init_layout.base = NULL;
> >
> >   /* Transfer each section which specifies SHF_ALLOC */
> >-  pr_debug("final section addresses:\n");
> >+  pr_debug("final section addresses for: %s\n", mod->name);
>
> Let's capitalize the "f" in "final section addresses" to be consistent
> with the other two above.
>
> >   for (i = 0; i < info->hdr->e_shnum; i++) {
> >   void *dest;
> >   Elf_Shdr *shdr = >sechdrs[i];
> >@@ -3294,8 +3294,8 @@ static int move_module(struct module *mod, struct 
> >load_info *info)
> >   memcpy(dest, (void *)shdr->sh_addr, shdr->sh_size);
> >   /* Update sh_addr to point to copy in image. */
> >   shdr->sh_addr = (unsigned long)dest;
> >-  pr_debug("\t0x%lx %s\n",
> >-   (long)shdr->sh_addr, info->secstrings + 
> >shdr->sh_name);
> >+  pr_debug("\t0x%lx 0x%.8lx %s\n", (long)shdr->sh_addr,
> >+   (long)shdr->sh_size, info->secstrings + 
> >shdr->sh_name);
>
> Any reason why you added sh_size here? Is it really needed? You can
> usually deduce how much space a section is taking up in a module by
> looking at the final section address printout. Plus the elf section
> size is not entirely accurate here as each module section is aligned
> to page boundaries when the module loader allocates memory for each
> section. I would prefer to just leave it out.
>

mostly I added it cuz it was available.
I do not know when it might be useful, but seeing it can help decide that.
Having the data there makes your deduction possible,
without seeing the data, it wouldnt occur to me that there are "inaccuracies".
And seeing it in hex form might illuminate the page alignment too.

Also, this is in move-module, which I havent seen in action AFAIK

I'll send v2 shortly, as above, unless 

Re: [PATCH] kernel/module: add name size info to pr_debug() calls

2020-06-30 Thread Jessica Yu

+++ Jim Cromie [11/06/20 08:20 -0600]:

when booted with arg: module.dyndbg=+p
dmesg gets volumes of info about loaded modules.
This adds module & symbol names, and sizes where pertinent.
Now I can know which module's info Im looking at.


Hi,

Could you please fix the changelog formatting according to
Documentation/process/submitting-patches.rst? More specifically,
complete sentences, line wrapped at 75 columns, and a Signed-off-by:
line at the end. There are plenty of examples if you look through the
lkml mailing list.


---
kernel/module.c | 14 +++---
1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/kernel/module.c b/kernel/module.c
index e8a198588f26..d871d9cee9eb 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -2294,8 +2294,8 @@ static int simplify_symbols(struct module *mod, const 
struct load_info *info)

case SHN_ABS:
/* Don't need to do anything */
-   pr_debug("Absolute symbol: 0x%08lx\n",
-  (long)sym[i].st_value);
+   pr_debug("Absolute symbol: 0x%08lx %s\n",
+(long)sym[i].st_value, name);


I would prefer "Absolute symbol %s:" rather than putting the symbol
name at the end.


break;

case SHN_LIVEPATCH:
@@ -2409,7 +2409,7 @@ static void layout_sections(struct module *mod, struct 
load_info *info)
for (i = 0; i < info->hdr->e_shnum; i++)
info->sechdrs[i].sh_entsize = ~0UL;

-   pr_debug("Core section allocation order:\n");
+   pr_debug("Core section allocation order for: %s\n", mod->name);


I would slightly prefer "Core section allocation order for %s:", but
it's a matter of taste.


for (m = 0; m < ARRAY_SIZE(masks); ++m) {
for (i = 0; i < info->hdr->e_shnum; ++i) {
Elf_Shdr *s = >sechdrs[i];
@@ -2442,7 +2442,7 @@ static void layout_sections(struct module *mod, struct 
load_info *info)
}
}

-   pr_debug("Init section allocation order:\n");
+   pr_debug("Init section allocation order for: %s\n", mod->name);


Same here.


for (m = 0; m < ARRAY_SIZE(masks); ++m) {
for (i = 0; i < info->hdr->e_shnum; ++i) {
Elf_Shdr *s = >sechdrs[i];
@@ -3276,7 +3276,7 @@ static int move_module(struct module *mod, struct 
load_info *info)
mod->init_layout.base = NULL;

/* Transfer each section which specifies SHF_ALLOC */
-   pr_debug("final section addresses:\n");
+   pr_debug("final section addresses for: %s\n", mod->name);


Let's capitalize the "f" in "final section addresses" to be consistent
with the other two above.


for (i = 0; i < info->hdr->e_shnum; i++) {
void *dest;
Elf_Shdr *shdr = >sechdrs[i];
@@ -3294,8 +3294,8 @@ static int move_module(struct module *mod, struct 
load_info *info)
memcpy(dest, (void *)shdr->sh_addr, shdr->sh_size);
/* Update sh_addr to point to copy in image. */
shdr->sh_addr = (unsigned long)dest;
-   pr_debug("\t0x%lx %s\n",
-(long)shdr->sh_addr, info->secstrings + shdr->sh_name);
+   pr_debug("\t0x%lx 0x%.8lx %s\n", (long)shdr->sh_addr,
+(long)shdr->sh_size, info->secstrings + shdr->sh_name);


Any reason why you added sh_size here? Is it really needed? You can
usually deduce how much space a section is taking up in a module by
looking at the final section address printout. Plus the elf section
size is not entirely accurate here as each module section is aligned
to page boundaries when the module loader allocates memory for each
section. I would prefer to just leave it out.

Thanks,

Jessica


[PATCH] kernel/module: add name size info to pr_debug() calls

2020-06-11 Thread Jim Cromie
when booted with arg: module.dyndbg=+p
dmesg gets volumes of info about loaded modules.
This adds module & symbol names, and sizes where pertinent.
Now I can know which module's info Im looking at.
---
 kernel/module.c | 14 +++---
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/kernel/module.c b/kernel/module.c
index e8a198588f26..d871d9cee9eb 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -2294,8 +2294,8 @@ static int simplify_symbols(struct module *mod, const 
struct load_info *info)
 
case SHN_ABS:
/* Don't need to do anything */
-   pr_debug("Absolute symbol: 0x%08lx\n",
-  (long)sym[i].st_value);
+   pr_debug("Absolute symbol: 0x%08lx %s\n",
+(long)sym[i].st_value, name);
break;
 
case SHN_LIVEPATCH:
@@ -2409,7 +2409,7 @@ static void layout_sections(struct module *mod, struct 
load_info *info)
for (i = 0; i < info->hdr->e_shnum; i++)
info->sechdrs[i].sh_entsize = ~0UL;
 
-   pr_debug("Core section allocation order:\n");
+   pr_debug("Core section allocation order for: %s\n", mod->name);
for (m = 0; m < ARRAY_SIZE(masks); ++m) {
for (i = 0; i < info->hdr->e_shnum; ++i) {
Elf_Shdr *s = >sechdrs[i];
@@ -2442,7 +2442,7 @@ static void layout_sections(struct module *mod, struct 
load_info *info)
}
}
 
-   pr_debug("Init section allocation order:\n");
+   pr_debug("Init section allocation order for: %s\n", mod->name);
for (m = 0; m < ARRAY_SIZE(masks); ++m) {
for (i = 0; i < info->hdr->e_shnum; ++i) {
Elf_Shdr *s = >sechdrs[i];
@@ -3276,7 +3276,7 @@ static int move_module(struct module *mod, struct 
load_info *info)
mod->init_layout.base = NULL;
 
/* Transfer each section which specifies SHF_ALLOC */
-   pr_debug("final section addresses:\n");
+   pr_debug("final section addresses for: %s\n", mod->name);
for (i = 0; i < info->hdr->e_shnum; i++) {
void *dest;
Elf_Shdr *shdr = >sechdrs[i];
@@ -3294,8 +3294,8 @@ static int move_module(struct module *mod, struct 
load_info *info)
memcpy(dest, (void *)shdr->sh_addr, shdr->sh_size);
/* Update sh_addr to point to copy in image. */
shdr->sh_addr = (unsigned long)dest;
-   pr_debug("\t0x%lx %s\n",
-(long)shdr->sh_addr, info->secstrings + shdr->sh_name);
+   pr_debug("\t0x%lx 0x%.8lx %s\n", (long)shdr->sh_addr,
+(long)shdr->sh_size, info->secstrings + shdr->sh_name);
}
 
return 0;
-- 
2.26.2