Kernel Newbies Archive on lore.kernel.org
 help / color / Atom feed
* '-D' 'KBUILD_MODSYM=main - like KBUILD_MODNAME, without the quotes ?
@ 2021-01-28 19:11 jim.cromie
  2021-01-28 23:57 ` Valdis Klētnieks
  0 siblings, 1 reply; 6+ messages in thread
From: jim.cromie @ 2021-01-28 19:11 UTC (permalink / raw)
  To: kernelnewbies

[-- Attachment #1.1: Type: text/plain, Size: 852 bytes --]

hi folks,

In my hacking, Im finding this useful.
it adds a version of KBUILD_MODNAME without the quotes

--- a/scripts/Makefile.lib
+++ b/scripts/Makefile.lib
@@ -119,7 +119,7 @@ target-stem = $(basename $(patsubst $(obj)/%,%,$@))
 # end up in (or would, if it gets compiled in)
 name-fix = $(call stringify,$(subst $(comma),_,$(subst -,_,$1)))
 basename_flags = -DKBUILD_BASENAME=$(call name-fix,$(basetarget))
-modname_flags  = -DKBUILD_MODNAME=$(call name-fix,$(modname))
+modname_flags  = -DKBUILD_MODNAME=$(call name-fix,$(modname))
-DKBUILD_MODSYM=$(modname)


Im suspicious however,
KBUILD_MODNAME has the quotes for a reason;
probably robustness at some level.
Afterall, __stringify() could add the quotes for cases where it was needed.

If there was an __unstringify_token( ) I could remove this Makefile hack,
is such a construct possible ?

[-- Attachment #1.2: Type: text/html, Size: 1070 bytes --]

[-- Attachment #2: Type: text/plain, Size: 170 bytes --]

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@kernelnewbies.org
https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: '-D' 'KBUILD_MODSYM=main - like KBUILD_MODNAME, without the quotes ?
  2021-01-28 19:11 '-D' 'KBUILD_MODSYM=main - like KBUILD_MODNAME, without the quotes ? jim.cromie
@ 2021-01-28 23:57 ` Valdis Klētnieks
  2021-01-29  0:16   ` jim.cromie
  0 siblings, 1 reply; 6+ messages in thread
From: Valdis Klētnieks @ 2021-01-28 23:57 UTC (permalink / raw)
  To: jim.cromie; +Cc: kernelnewbies

[-- Attachment #1.1: Type: text/plain, Size: 686 bytes --]

On Thu, 28 Jan 2021 12:11:54 -0700, jim.cromie@gmail.com said:

> In my hacking, Im finding this useful.
> it adds a version of KBUILD_MODNAME without the quotes

OK, I'll bite.  When and how is this useful?

> KBUILD_MODNAME has the quotes for a reason;

Hint:  do a "git grep KBUILD_MODNAME", look at how it's used, and
think about how invasive a patch to change it would be...
(And pay heed to the comment in arch/sparc/include/asm/vio.h -
it means that there's second-order effects to deal with as well...)

> Afterall, __stringify() could add the quotes for cases where it was needed.Afterall, __stringify() could add the quotes for cases where it was needed.

How would it know?


[-- Attachment #1.2: Type: application/pgp-signature, Size: 832 bytes --]

[-- Attachment #2: Type: text/plain, Size: 170 bytes --]

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@kernelnewbies.org
https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: '-D' 'KBUILD_MODSYM=main - like KBUILD_MODNAME, without the quotes ?
  2021-01-28 23:57 ` Valdis Klētnieks
@ 2021-01-29  0:16   ` jim.cromie
  2021-01-29  2:04     ` Valdis Klētnieks
  2021-01-29  8:32     ` jim.cromie
  0 siblings, 2 replies; 6+ messages in thread
From: jim.cromie @ 2021-01-29  0:16 UTC (permalink / raw)
  To: Valdis Klētnieks; +Cc: kernelnewbies

[-- Attachment #1.1: Type: text/plain, Size: 2111 bytes --]

On Thu, Jan 28, 2021 at 4:57 PM Valdis Klētnieks <valdis.kletnieks@vt.edu>
wrote:

> On Thu, 28 Jan 2021 12:11:54 -0700, jim.cromie@gmail.com said:
>
> > In my hacking, Im finding this useful.
> > it adds a version of KBUILD_MODNAME without the quotes
>
> OK, I'll bite.  When and how is this useful?
>
>
heres my use

#define DEFINE_DYNAMIC_DEBUG_TABLE_(_sym_,_mod_)       \
weak struct _ddebug \
__used __aligned(8) \
__section(".gnu.linkonce." _mod_ ".dyndbg") \
_sym_##_dyndbg_base = { \
.site = &_sym_##_dyndbg_site, \
.format = _mod_, \
.lineno = 0 \
}

#pragma message "OK<" KBUILD_MODNAME ">[" __stringify(KBUILD_MODSYM) "]
adding DYNDBG_TABLE"

#define DEFINE_DYNAMIC_DEBUG_TABLE() \
DEFINE_DYNAMIC_DEBUG_TABLE_(KBUILD_MODSYM, KBUILD_MODNAME);

that pragma does:

                 from /home/jimc/projects/lx/wk-next/init/version.c:14:
/home/jimc/projects/lx/wk-next/include/linux/dynamic_debug.h:172:9: note:
‘#pragma message: OK<version>[version] adding DYNDBG_TABLE’
  172 | #pragma message "OK<" KBUILD_MODNAME ">["
__stringify(KBUILD_MODSYM) "] adding DYNDBG_TABLE"
      |         ^~~~~~~
  CC      init/do_mounts.o

IOW the _sym_ works better for ## token-joining


> KBUILD_MODNAME has the quotes for a reason;
>
> Hint:  do a "git grep KBUILD_MODNAME", look at how it's used, and
> think about how invasive a patch to change it would be...
> (And pay heed to the comment in arch/sparc/include/asm/vio.h -
> it means that there's second-order effects to deal with as well...)
>
>
I have no intention of changing KBUILD_MODNAME.
I created a near-synonym to avoid exactly that.



> > Afterall, __stringify() could add the quotes for cases where it was
> needed.Afterall, __stringify() could add the quotes for cases where it was
> needed.
>
> How would it know?
>

It would not.
you would add it to create the quoted version, as I used in the pragma.
obviously theres no need, since KBUILD_MODNAME already exists.

So question reduces to:

is there anything brittle with the Makefile -DKBUILD_MODSYM=$modname
addition ?

[-- Attachment #1.2: Type: text/html, Size: 3335 bytes --]

[-- Attachment #2: Type: text/plain, Size: 170 bytes --]

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@kernelnewbies.org
https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: '-D' 'KBUILD_MODSYM=main - like KBUILD_MODNAME, without the quotes ?
  2021-01-29  0:16   ` jim.cromie
@ 2021-01-29  2:04     ` Valdis Klētnieks
  2021-01-29  8:32     ` jim.cromie
  1 sibling, 0 replies; 6+ messages in thread
From: Valdis Klētnieks @ 2021-01-29  2:04 UTC (permalink / raw)
  To: jim.cromie; +Cc: kernelnewbies

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.1: Type: text/plain; charset=us-ascii, Size: 571 bytes --]

On Thu, 28 Jan 2021 17:16:01 -0700, jim.cromie@gmail.com said:
>                  from /home/jimc/projects/lx/wk-next/init/version.c:14:
> /home/jimc/projects/lx/wk-next/include/linux/dynamic_debug.h:172:9: note:
> ‘#pragma message: OK<version>[version] adding DYNDBG_TABLE’
>   172 | #pragma message "OK<" KBUILD_MODNAME ">["
> __stringify(KBUILD_MODSYM) "] adding DYNDBG_TABLE"
>       |         ^~~~~~~
>   CC      init/do_mounts.o
>
> IOW the _sym_ works better for ## token-joining

I meant "step back a bit and explain why you had a need for that #pragma"....


[-- Attachment #1.2: Type: application/pgp-signature, Size: 832 bytes --]

[-- Attachment #2: Type: text/plain, Size: 170 bytes --]

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@kernelnewbies.org
https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: '-D' 'KBUILD_MODSYM=main - like KBUILD_MODNAME, without the quotes ?
  2021-01-29  0:16   ` jim.cromie
  2021-01-29  2:04     ` Valdis Klētnieks
@ 2021-01-29  8:32     ` jim.cromie
  2021-01-29  9:07       ` jim.cromie
  1 sibling, 1 reply; 6+ messages in thread
From: jim.cromie @ 2021-01-29  8:32 UTC (permalink / raw)
  To: Valdis Klētnieks; +Cc: kernelnewbies

[-- Attachment #1.1: Type: text/plain, Size: 4906 bytes --]

On Thu, Jan 28, 2021 at 5:16 PM <jim.cromie@gmail.com> wrote:

>
>
> On Thu, Jan 28, 2021 at 4:57 PM Valdis Klētnieks <valdis.kletnieks@vt.edu>
> wrote:
>
>> On Thu, 28 Jan 2021 12:11:54 -0700, jim.cromie@gmail.com said:
>>
>> > In my hacking, Im finding this useful.
>> > it adds a version of KBUILD_MODNAME without the quotes
>>
>> OK, I'll bite.  When and how is this useful?
>>
>>
>
Let me add more context here.

1st, the long saga.

v1 - here, back in august last year.
https://lore.kernel.org/kernelnewbies/20200805183023.586590-1-jim.cromie@gmail.com/
not really pertinent here.
gregkh pretty much said send it to lkml

v2 - RFC to LKML
https://lore.kernel.org/lkml/20201225201944.3701590-1-jim.cromie@gmail.com/
this didnt get much attention, no answers to my questions
the 0000 is still completely accurate, I cannot improve upon it,
though many questions in the commit messages Ive answered myself.
(or at least made some choices ;)

v3 - sits in github now
almost identical 1-16/19 with v2
https://github.com/jimc/linux.git dyndbg-next

I was hoping to pull off a context-free question,
focusing on just the Makefile.lib patch's suitability.

I could send the whole series here, or to LKML, or both.
I can hope a quick perusal will get you to the interesting parts


> heres my use
>
>
Im looking to define a module-unique header record,
and to create storage for it in a separate section.
Then append that section to the module's __dyndbg section.

The pragma is leftover scaffolding from trying to figure out
that I needed the _sym_ version also, without the quotes.
I un-commented for demo only.

#define DEFINE_DYNAMIC_DEBUG_TABLE_(_sym_,_mod_)       \
> weak struct _ddebug \
> __used __aligned(8) \
> __section(".gnu.linkonce." _mod_ ".dyndbg") \
> _sym_##_dyndbg_base = { \
> .site = &_sym_##_dyndbg_site, \
> .format = _mod_, \
> .lineno = 0 \
> }
>
> #define DEFINE_DYNAMIC_DEBUG_TABLE() \
> DEFINE_DYNAMIC_DEBUG_TABLE_(KBUILD_MODSYM, KBUILD_MODNAME);
>
>

I cannot make the _mod_ ## work at the same time as
allowing "foo" _mod_ "buzz" catenation, therefore the new _sym_


This DEFINE is "called" from the bottom of include/linux/dynamic_debug.h

the combo of weak and ".gnu.linkonce." appear to resolve all
all the redundant definitions created by each C files' inclusion
of the header.
Inspiration came from .gnu.linkonce.this_module


--- a/include/asm-generic/vmlinux.lds.h

+++ b/include/asm-generic/vmlinux.lds.h

@@ -329,10 +329,10 @@

#define DYNAMIC_DEBUG_DATA() \

. = ALIGN(8); \

__start___dyndbg_sites = .; \

- KEEP(*(__dyndbg_sites __dyndbg_sites.header)) \

+ KEEP(*(__dyndbg_sites .gnu.linkonce.*.dyndbg_site)) \

__stop___dyndbg_sites = .; \

__start___dyndbg = .; \

- KEEP(*(__dyndbg __dyndbg.header)) \

+ KEEP(*(__dyndbg .gnu.linkonce.*.dyndbg)) \

__stop___dyndbg = .;

#else

#define DYNAMIC_DEBUG_DATA()

that puts the header record into the output section, right after the
module's
set of ddebug's (pr_debug callsite descriptors)

By getting the header into a fixed position relative to a callsite,
its possible to go from callsite-descriptor to the header
(after .module_index is initialized with the offset, determined at _init),
then use a single per-module pointer to the separate vector of "decorator"
data.

Once the 2 vectors of __dyndbg and __dyndbg_site records are indexed by N,
I can drop the .site pointer from 1 to other, and shrink the footprint back
to
~parity (with + 1 record / module overhead) worst case.

with 2 vectors fully decoupled (pointer-wise),
the decorator records can be stuffed into compressed block storage,
zram, etc, then recovered when a callsite is enabled,
and saved into a hashtable, indexed by modname+module-index.
global/module hash per experiment.

Anyway, I appear to have gotten the header where I want it:

[    0.315519] dyndbg: header: head64 0
[    0.326702] dyndbg: header: ebda 0
[    0.342521] dyndbg: header: platform_quirks 0
[    0.373523] dyndbg: site.4: main run_init_process
[    0.406518] dyndbg: site.5: main run_init_process
[    0.437521] dyndbg: site.6: main run_init_process
[    0.468521] dyndbg: site.7: main run_init_process
[    0.500528] dyndbg: site.8: main initcall_blacklisted
[    0.531519] dyndbg: site.9: main initcall_blacklist
[    0.555520] dyndbg: header: main 0

I have extra headers right now,
head64 ebda platform_quirks above,
for modules that have no pr-debug callsites.

Thats a problem for later,
though I posted here about conditional linkage earlier.

Im afraid it needs an ld linker language enhancement:
KEEP( IF *(__dyndbg) THEN (.gnu.linkonce.dyndbg) )

but Ive yet to try a simpler boolean algrebra
KEEP( *(__dyndbg && .gnu.linkonce.dyndbg))

if by some miracle that works, I'll report that shortly.

>

[-- Attachment #1.2: Type: text/html, Size: 8309 bytes --]

[-- Attachment #2: Type: text/plain, Size: 170 bytes --]

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@kernelnewbies.org
https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: '-D' 'KBUILD_MODSYM=main - like KBUILD_MODNAME, without the quotes ?
  2021-01-29  8:32     ` jim.cromie
@ 2021-01-29  9:07       ` jim.cromie
  0 siblings, 0 replies; 6+ messages in thread
From: jim.cromie @ 2021-01-29  9:07 UTC (permalink / raw)
  To: Valdis Klētnieks; +Cc: kernelnewbies

[-- Attachment #1.1: Type: text/plain, Size: 5141 bytes --]

... and somethings not right.  debugger KBUILD_SYM shows it:
these records are same as those shown in early boot output pasted previously

these records look right

(gdb) p *__start___dyndbg_sites@10
$2 = {{modname = 0xffffffff825a8ab9 "head64",
    filename = 0xffffffff825a8ac0 "include/linux/dynamic_debug.h",
    function = 0xffffffff825a8ab9 "head64"}, {modname = 0xffffffff825a8ade
"ebda",
    filename = 0xffffffff825a8ac0 "include/linux/dynamic_debug.h", function
= 0xffffffff825a8ade "ebda"}, {
    modname = 0xffffffff825a8ae3 "platform_quirks",
    filename = 0xffffffff825a8ac0 "include/linux/dynamic_debug.h",
    function = 0xffffffff825a8ae3 "platform_quirks"}, {modname =
0xffffffff825cac42 "main",
    filename = 0xffffffff825a8afe "init/main.c",
    function = 0xffffffff822000e0 <__func__.2> "run_init_process"},
{modname = 0xffffffff825cac42 "main",
    filename = 0xffffffff825a8afe "init/main.c",
    function = 0xffffffff822000e0 <__func__.2> "run_init_process"},
{modname = 0xffffffff825cac42 "main",
    filename = 0xffffffff825a8afe "init/main.c",
    function = 0xffffffff822000e0 <__func__.2> "run_init_process"},
{modname = 0xffffffff825cac42 "main",
    filename = 0xffffffff825a8afe "init/main.c",
    function = 0xffffffff822000e0 <__func__.2> "run_init_process"},
{modname = 0xffffffff825cac42 "main",
    filename = 0xffffffff825a8afe "init/main.c",
    function = 0xffffffff822000a0 <__func__.0> "initcall_blacklisted"}, {
    modname = 0xffffffff825cac42 "main", filename = 0xffffffff825a8afe
"init/main.c",
    function = 0xffffffff822000c0 <__func__.1> "initcall_blacklist"}, {
    modname = 0xffffffff825cac42 "main", filename = 0xffffffff825a8ac0
"include/linux/dynamic_debug.h",
    function = 0xffffffff825cac42 "main"}}

Theres evidently something wrong with my KBUILD_MODSYM _dyndbg_site here,
the site pointers in all the headers appear the same,
but maybe its just an effect of initialization,
which I expect to reshape with a union - struct to use the space efficiently


(gdb) p *__start___dyndbg@10
$3 = {{site = 0xffffffff82b252e8 <KBUILD_MODSYM_dyndbg_site>, format =
0xffffffff825a8ab9 "head64",
    lineno = 0, flags = 0, module_index = 0, key = {dd_key_true = {key =
{enabled = {counter = 0}, {
            type = 0, entries = 0x0 <fixed_percpu_data>, next = 0x0
<fixed_percpu_data>}}},
      dd_key_false = {key = {enabled = {counter = 0}, {type = 0, entries =
0x0 <fixed_percpu_data>,
            next = 0x0 <fixed_percpu_data>}}}}}, {site = 0xffffffff82b252e8
<KBUILD_MODSYM_dyndbg_site>,
    format = 0xffffffff825a8ade "ebda", lineno = 0, flags = 0, module_index
= 0, key = {dd_key_true = {
        key = {enabled = {counter = 0}, {type = 0, entries = 0x0
<fixed_percpu_data>,
            next = 0x0 <fixed_percpu_data>}}}, dd_key_false = {key =
{enabled = {counter = 0}, {type = 0,
            entries = 0x0 <fixed_percpu_data>, next = 0x0
<fixed_percpu_data>}}}}}, {
    site = 0xffffffff82b252e8 <KBUILD_MODSYM_dyndbg_site>, format =
0xffffffff825a8ae3 "platform_quirks",
    lineno = 0, flags = 0, module_index = 0, key = {dd_key_true = {key =
{enabled = {counter = 0}, {
            type = 0, entries = 0x0 <fixed_percpu_data>, next = 0x0
<fixed_percpu_data>}}},
      dd_key_false = {key = {enabled = {counter = 0}, {type = 0, entries =
0x0 <fixed_percpu_data>,
            next = 0x0 <fixed_percpu_data>}}}}}, {
    site = 0xffffffff82b25330 <__UNIQUE_ID_ddebug468_site.13>, format =
0xffffffff82653f07 "    %s\n",
    lineno = 1349, flags = 1, module_index = 0, key = {dd_key_true = {key =
{enabled = {counter = 1}, {
            type = 18446744071602861249, entries = 0xffffffff826e74c1, next
= 0xffffffff826e74c1}}},
      dd_key_false = {key = {enabled = {counter = 1}, {type =
18446744071602861249,
            entries = 0xffffffff826e74c1, next = 0xffffffff826e74c1}}}}}, {
    site = 0xffffffff82b25348 <__UNIQUE_ID_ddebug467_site.15>,
    format = 0xffffffff825a8b59 "  with environment:\n", lineno = 1347,
flags = 1, module_index = 0,
    key = {dd_key_true = {key = {enabled = {counter = 1}, {type =
18446744071602861265,
            entries = 0xffffffff826e74d1, next = 0xffffffff826e74d1}}},
dd_key_false = {key = {enabled = {
            counter = 1}, {type = 18446744071602861265, entries =
0xffffffff826e74d1,
            next = 0xffffffff826e74d1}}}}}, {site = 0xffffffff82b25360
<__UNIQUE_ID_ddebug466_site.17>,
    format = 0xffffffff82653f07 "    %s\n", lineno = 1346, flags = 1,
module_index = 0, key = {
      dd_key_true = {key = {enabled = {counter = 1}, {type =
18446744071602861281,
            entries = 0xffffffff826e74e1, next = 0xffffffff826e74e1}}},
dd_key_false = {key = {enabled = {
            counter = 1}, {type = 18446744071602861281, entries =
0xffffffff826e74e1,
            next = 0xffffffff826e74e1}}}}}, {site = 0xffffffff82b25378
<__UNIQUE_ID_ddebug465_site.19>,
    format = 0xffffffff825a8b46 "  with arguments:\n", lineno = 1344, flags
= 1, module_index = 0, key = {
      dd_key_true = {key = {enabled = {counter = 1}, {type =
18446744071602861297,


at any rate, I'll probly work this a bit, see if I can resolve a few
problems

[-- Attachment #1.2: Type: text/html, Size: 6320 bytes --]

[-- Attachment #2: Type: text/plain, Size: 170 bytes --]

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@kernelnewbies.org
https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, back to index

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-28 19:11 '-D' 'KBUILD_MODSYM=main - like KBUILD_MODNAME, without the quotes ? jim.cromie
2021-01-28 23:57 ` Valdis Klētnieks
2021-01-29  0:16   ` jim.cromie
2021-01-29  2:04     ` Valdis Klētnieks
2021-01-29  8:32     ` jim.cromie
2021-01-29  9:07       ` jim.cromie

Kernel Newbies Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/kernelnewbies/0 kernelnewbies/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 kernelnewbies kernelnewbies/ https://lore.kernel.org/kernelnewbies \
		kernelnewbies@kernelnewbies.org
	public-inbox-index kernelnewbies

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernelnewbies.kernelnewbies


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git