2023-07-12 02:41:39

by Kefeng Wang

[permalink] [raw]
Subject: [PATCH -next] modpost: move some defines to the file head

with "module: Ignore RISC-V mapping symbols too", build error occurs,

scripts/mod/modpost.c: In function ‘is_valid_name’:
scripts/mod/modpost.c:1055:57: error: ‘EM_RISCV’ undeclared (first use in this function)
return !is_mapping_symbol(name, elf->hdr->e_machine == EM_RISCV);

Fix it by moving the EM_RISCV to the file head, also some other
defines in case of similar problem in the future.

Signed-off-by: Kefeng Wang <[email protected]>
---
scripts/mod/modpost.c | 32 ++++++++++++++++----------------
1 file changed, 16 insertions(+), 16 deletions(-)

diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
index 7c71429d6502..885cca272eb8 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -60,6 +60,22 @@ static unsigned int nr_unresolved;

#define MODULE_NAME_LEN (64 - sizeof(Elf_Addr))

+#ifndef EM_RISCV
+#define EM_RISCV 243
+#endif
+
+#ifndef R_RISCV_SUB32
+#define R_RISCV_SUB32 39
+#endif
+
+#ifndef EM_LOONGARCH
+#define EM_LOONGARCH 258
+#endif
+
+#ifndef R_LARCH_SUB32
+#define R_LARCH_SUB32 55
+#endif
+
void __attribute__((format(printf, 2, 3)))
modpost_log(enum loglevel loglevel, const char *fmt, ...)
{
@@ -1428,22 +1444,6 @@ static int addend_mips_rel(uint32_t *location, Elf_Rela *r)
return 0;
}

-#ifndef EM_RISCV
-#define EM_RISCV 243
-#endif
-
-#ifndef R_RISCV_SUB32
-#define R_RISCV_SUB32 39
-#endif
-
-#ifndef EM_LOONGARCH
-#define EM_LOONGARCH 258
-#endif
-
-#ifndef R_LARCH_SUB32
-#define R_LARCH_SUB32 55
-#endif
-
static void section_rela(struct module *mod, struct elf_info *elf,
Elf_Shdr *sechdr)
{
--
2.41.0



2023-07-12 16:28:38

by Masahiro Yamada

[permalink] [raw]
Subject: Re: [PATCH -next] modpost: move some defines to the file head

+To: Luis Chamberlain, the commiter of the breakage



On Wed, Jul 12, 2023 at 10:44 AM Kefeng Wang <[email protected]> wrote:
>
> with "module: Ignore RISC-V mapping symbols too", build error occurs,
>
> scripts/mod/modpost.c: In function ‘is_valid_name’:
> scripts/mod/modpost.c:1055:57: error: ‘EM_RISCV’ undeclared (first use in this function)
> return !is_mapping_symbol(name, elf->hdr->e_machine == EM_RISCV);
>
> Fix it by moving the EM_RISCV to the file head, also some other
> defines in case of similar problem in the future.



BTW, why is the flag 'is_riscv' needed?


All symbols starting with '$' look special to me.



Why not like this?


if (str[0] == '$')
return true;

return false;






>
> Signed-off-by: Kefeng Wang <[email protected]>
> ---
> scripts/mod/modpost.c | 32 ++++++++++++++++----------------
> 1 file changed, 16 insertions(+), 16 deletions(-)
>
> diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
> index 7c71429d6502..885cca272eb8 100644
> --- a/scripts/mod/modpost.c
> +++ b/scripts/mod/modpost.c
> @@ -60,6 +60,22 @@ static unsigned int nr_unresolved;
>
> #define MODULE_NAME_LEN (64 - sizeof(Elf_Addr))
>
> +#ifndef EM_RISCV
> +#define EM_RISCV 243
> +#endif
> +
> +#ifndef R_RISCV_SUB32
> +#define R_RISCV_SUB32 39
> +#endif
> +
> +#ifndef EM_LOONGARCH
> +#define EM_LOONGARCH 258
> +#endif
> +
> +#ifndef R_LARCH_SUB32
> +#define R_LARCH_SUB32 55
> +#endif
> +
> void __attribute__((format(printf, 2, 3)))
> modpost_log(enum loglevel loglevel, const char *fmt, ...)
> {
> @@ -1428,22 +1444,6 @@ static int addend_mips_rel(uint32_t *location, Elf_Rela *r)
> return 0;
> }
>
> -#ifndef EM_RISCV
> -#define EM_RISCV 243
> -#endif
> -
> -#ifndef R_RISCV_SUB32
> -#define R_RISCV_SUB32 39
> -#endif
> -
> -#ifndef EM_LOONGARCH
> -#define EM_LOONGARCH 258
> -#endif
> -
> -#ifndef R_LARCH_SUB32
> -#define R_LARCH_SUB32 55
> -#endif
> -
> static void section_rela(struct module *mod, struct elf_info *elf,
> Elf_Shdr *sechdr)
> {
> --
> 2.41.0
>


--
Best Regards

Masahiro Yamada

2023-07-12 17:07:13

by Palmer Dabbelt

[permalink] [raw]
Subject: Re: [PATCH -next] modpost: move some defines to the file head

On Wed, 12 Jul 2023 08:55:23 PDT (-0700), [email protected] wrote:
> +To: Luis Chamberlain, the commiter of the breakage
>
>
>
> On Wed, Jul 12, 2023 at 10:44 AM Kefeng Wang <[email protected]> wrote:
>>
>> with "module: Ignore RISC-V mapping symbols too", build error occurs,
>>
>> scripts/mod/modpost.c: In function ‘is_valid_name’:
>> scripts/mod/modpost.c:1055:57: error: ‘EM_RISCV’ undeclared (first use in this function)
>> return !is_mapping_symbol(name, elf->hdr->e_machine == EM_RISCV);
>>
>> Fix it by moving the EM_RISCV to the file head, also some other
>> defines in case of similar problem in the future.
>
>
>
> BTW, why is the flag 'is_riscv' needed?
>
>
> All symbols starting with '$' look special to me.
>
>
>
> Why not like this?
>
>
> if (str[0] == '$')
> return true;
>
> return false;

There's a bit of commentary in the v1
<https://lore.kernel.org/all/[email protected]/>,
but essentially it's not necessary. I just wanted to play things safe
and avoid changing the mapping symbol detection elsewhere in order to
deal with RISC-V.

IIRC we decided $ was special in RISC-V because there were some other
ports that behaved that way, but it wasn't universal. If folks are OK
treating $-prefixed symbols as special everywhere that's fine with me, I
just wasn't sure what the right answer was.

There's also some similar arch-specific-ness with the labels and such in
here.

>> Signed-off-by: Kefeng Wang <[email protected]>
>> ---
>> scripts/mod/modpost.c | 32 ++++++++++++++++----------------
>> 1 file changed, 16 insertions(+), 16 deletions(-)
>>
>> diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
>> index 7c71429d6502..885cca272eb8 100644
>> --- a/scripts/mod/modpost.c
>> +++ b/scripts/mod/modpost.c
>> @@ -60,6 +60,22 @@ static unsigned int nr_unresolved;
>>
>> #define MODULE_NAME_LEN (64 - sizeof(Elf_Addr))
>>
>> +#ifndef EM_RISCV
>> +#define EM_RISCV 243
>> +#endif
>> +
>> +#ifndef R_RISCV_SUB32
>> +#define R_RISCV_SUB32 39
>> +#endif
>> +
>> +#ifndef EM_LOONGARCH
>> +#define EM_LOONGARCH 258
>> +#endif
>> +
>> +#ifndef R_LARCH_SUB32
>> +#define R_LARCH_SUB32 55
>> +#endif
>> +
>> void __attribute__((format(printf, 2, 3)))
>> modpost_log(enum loglevel loglevel, const char *fmt, ...)
>> {
>> @@ -1428,22 +1444,6 @@ static int addend_mips_rel(uint32_t *location, Elf_Rela *r)
>> return 0;
>> }
>>
>> -#ifndef EM_RISCV
>> -#define EM_RISCV 243
>> -#endif
>> -
>> -#ifndef R_RISCV_SUB32
>> -#define R_RISCV_SUB32 39
>> -#endif
>> -
>> -#ifndef EM_LOONGARCH
>> -#define EM_LOONGARCH 258
>> -#endif
>> -
>> -#ifndef R_LARCH_SUB32
>> -#define R_LARCH_SUB32 55
>> -#endif
>> -
>> static void section_rela(struct module *mod, struct elf_info *elf,
>> Elf_Shdr *sechdr)
>> {
>> --
>> 2.41.0
>>

2023-07-21 09:22:46

by Kefeng Wang

[permalink] [raw]
Subject: Re: [PATCH -next] modpost: move some defines to the file head

Hi, kindly ping, the build issue still exist in Linux-next.

On 2023/7/13 0:28, Palmer Dabbelt wrote:
> On Wed, 12 Jul 2023 08:55:23 PDT (-0700), [email protected] wrote:
>> +To: Luis Chamberlain, the commiter of the breakage
>>
>>
>>
>> On Wed, Jul 12, 2023 at 10:44 AM Kefeng Wang
>> <[email protected]> wrote:
>>>
>>> with "module: Ignore RISC-V mapping symbols too", build error occurs,
>>>
>>> scripts/mod/modpost.c: In function ‘is_valid_name’:
>>> scripts/mod/modpost.c:1055:57: error: ‘EM_RISCV’ undeclared (first
>>> use in this function)
>>>   return !is_mapping_symbol(name, elf->hdr->e_machine == EM_RISCV);
>>>
>>> Fix it by moving the EM_RISCV to the file head, also some other
>>> defines in case of similar problem in the future.
>>
>>
>>
>> BTW, why is the flag 'is_riscv' needed?
>>
>>
>> All symbols starting with '$' look special to me.
>>
>>
>>
>> Why not like this?
>>
>>
>>        if (str[0] == '$')
>>                  return true;
>>
>>        return false;
>
> There's a bit of commentary in the v1
> <https://lore.kernel.org/all/[email protected]/>, but essentially it's not necessary.  I just wanted to play things safe and avoid changing the mapping symbol detection elsewhere in order to deal with RISC-V.
>
> IIRC we decided $ was special in RISC-V because there were some other
> ports that behaved that way, but it wasn't universal.  If folks are OK
> treating $-prefixed symbols as special everywhere that's fine with me, I
> just wasn't sure what the right answer was.
> There's also some similar arch-specific-ness with the labels and such in
> here.
>
>>> Signed-off-by: Kefeng Wang <[email protected]>
>>> ---
>>>  scripts/mod/modpost.c | 32 ++++++++++++++++----------------
>>>  1 file changed, 16 insertions(+), 16 deletions(-)
>>>
>>> diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
>>> index 7c71429d6502..885cca272eb8 100644
>>> --- a/scripts/mod/modpost.c
>>> +++ b/scripts/mod/modpost.c
>>> @@ -60,6 +60,22 @@ static unsigned int nr_unresolved;
>>>
>>>  #define MODULE_NAME_LEN (64 - sizeof(Elf_Addr))
>>>
>>> +#ifndef EM_RISCV
>>> +#define EM_RISCV               243
>>> +#endif
>>> +
>>> +#ifndef R_RISCV_SUB32
>>> +#define R_RISCV_SUB32          39
>>> +#endif
>>> +
>>> +#ifndef EM_LOONGARCH
>>> +#define EM_LOONGARCH           258
>>> +#endif
>>> +
>>> +#ifndef R_LARCH_SUB32
>>> +#define R_LARCH_SUB32          55
>>> +#endif
>>> +
>>>  void __attribute__((format(printf, 2, 3)))
>>>  modpost_log(enum loglevel loglevel, const char *fmt, ...)
>>>  {
>>> @@ -1428,22 +1444,6 @@ static int addend_mips_rel(uint32_t *location,
>>> Elf_Rela *r)
>>>         return 0;
>>>  }
>>>
>>> -#ifndef EM_RISCV
>>> -#define EM_RISCV               243
>>> -#endif
>>> -
>>> -#ifndef R_RISCV_SUB32
>>> -#define R_RISCV_SUB32          39
>>> -#endif
>>> -
>>> -#ifndef EM_LOONGARCH
>>> -#define EM_LOONGARCH           258
>>> -#endif
>>> -
>>> -#ifndef R_LARCH_SUB32
>>> -#define R_LARCH_SUB32          55
>>> -#endif
>>> -
>>>  static void section_rela(struct module *mod, struct elf_info *elf,
>>>                          Elf_Shdr *sechdr)
>>>  {
>>> --
>>> 2.41.0
>>>

2023-07-21 12:04:51

by Masahiro Yamada

[permalink] [raw]
Subject: Re: [PATCH -next] modpost: move some defines to the file head

On Thu, Jul 13, 2023 at 1:28 AM Palmer Dabbelt <[email protected]> wrote:
>
> On Wed, 12 Jul 2023 08:55:23 PDT (-0700), [email protected] wrote:
> > +To: Luis Chamberlain, the commiter of the breakage
> >
> >
> >
> > On Wed, Jul 12, 2023 at 10:44 AM Kefeng Wang <[email protected]> wrote:
> >>
> >> with "module: Ignore RISC-V mapping symbols too", build error occurs,
> >>
> >> scripts/mod/modpost.c: In function ‘is_valid_name’:
> >> scripts/mod/modpost.c:1055:57: error: ‘EM_RISCV’ undeclared (first use in this function)
> >> return !is_mapping_symbol(name, elf->hdr->e_machine == EM_RISCV);
> >>
> >> Fix it by moving the EM_RISCV to the file head, also some other
> >> defines in case of similar problem in the future.
> >
> >
> >
> > BTW, why is the flag 'is_riscv' needed?
> >
> >
> > All symbols starting with '$' look special to me.
> >
> >
> >
> > Why not like this?
> >
> >
> > if (str[0] == '$')
> > return true;
> >
> > return false;
>
> There's a bit of commentary in the v1
> <https://lore.kernel.org/all/[email protected]/>,
> but essentially it's not necessary. I just wanted to play things safe
> and avoid changing the mapping symbol detection elsewhere in order to
> deal with RISC-V.
>
> IIRC we decided $ was special in RISC-V because there were some other
> ports that behaved that way, but it wasn't universal. If folks are OK
> treating $-prefixed symbols as special everywhere that's fine with me, I
> just wasn't sure what the right answer was.
>
> There's also some similar arch-specific-ness with the labels and such in
> here.

Hi Palmer,

I am not a toolchain expert, but my gut feeling is
that the code was safer than needed.


I'd like to remove the 'is_riscv' switch rather than
applying this patch.

Will you send a patch, or do you want me to do so?




--
Best Regards
Masahiro Yamada

2023-07-21 14:21:24

by Palmer Dabbelt

[permalink] [raw]
Subject: Re: [PATCH -next] modpost: move some defines to the file head

On Fri, 21 Jul 2023 04:58:20 PDT (-0700), [email protected] wrote:
> On Thu, Jul 13, 2023 at 1:28 AM Palmer Dabbelt <[email protected]> wrote:
>>
>> On Wed, 12 Jul 2023 08:55:23 PDT (-0700), [email protected] wrote:
>> > +To: Luis Chamberlain, the commiter of the breakage
>> >
>> >
>> >
>> > On Wed, Jul 12, 2023 at 10:44 AM Kefeng Wang <[email protected]> wrote:
>> >>
>> >> with "module: Ignore RISC-V mapping symbols too", build error occurs,
>> >>
>> >> scripts/mod/modpost.c: In function ‘is_valid_name’:
>> >> scripts/mod/modpost.c:1055:57: error: ‘EM_RISCV’ undeclared (first use in this function)
>> >> return !is_mapping_symbol(name, elf->hdr->e_machine == EM_RISCV);
>> >>
>> >> Fix it by moving the EM_RISCV to the file head, also some other
>> >> defines in case of similar problem in the future.
>> >
>> >
>> >
>> > BTW, why is the flag 'is_riscv' needed?
>> >
>> >
>> > All symbols starting with '$' look special to me.
>> >
>> >
>> >
>> > Why not like this?
>> >
>> >
>> > if (str[0] == '$')
>> > return true;
>> >
>> > return false;
>>
>> There's a bit of commentary in the v1
>> <https://lore.kernel.org/all/[email protected]/>,
>> but essentially it's not necessary. I just wanted to play things safe
>> and avoid changing the mapping symbol detection elsewhere in order to
>> deal with RISC-V.
>>
>> IIRC we decided $ was special in RISC-V because there were some other
>> ports that behaved that way, but it wasn't universal. If folks are OK
>> treating $-prefixed symbols as special everywhere that's fine with me, I
>> just wasn't sure what the right answer was.
>>
>> There's also some similar arch-specific-ness with the labels and such in
>> here.
>
> Hi Palmer,
>
> I am not a toolchain expert, but my gut feeling is
> that the code was safer than needed.
>
>
> I'd like to remove the 'is_riscv' switch rather than
> applying this patch.
>
> Will you send a patch, or do you want me to do so?

I've pretty much got it already. Do you want it on top of the original
patch, or just squashed in so you can drop it?

2023-07-21 14:47:21

by Masahiro Yamada

[permalink] [raw]
Subject: Re: [PATCH -next] modpost: move some defines to the file head

On Fri, Jul 21, 2023 at 11:01 PM Palmer Dabbelt <[email protected]> wrote:
>
> On Fri, 21 Jul 2023 04:58:20 PDT (-0700), [email protected] wrote:
> > On Thu, Jul 13, 2023 at 1:28 AM Palmer Dabbelt <[email protected]> wrote:
> >>
> >> On Wed, 12 Jul 2023 08:55:23 PDT (-0700), [email protected] wrote:
> >> > +To: Luis Chamberlain, the commiter of the breakage
> >> >
> >> >
> >> >
> >> > On Wed, Jul 12, 2023 at 10:44 AM Kefeng Wang <[email protected]> wrote:
> >> >>
> >> >> with "module: Ignore RISC-V mapping symbols too", build error occurs,
> >> >>
> >> >> scripts/mod/modpost.c: In function ‘is_valid_name’:
> >> >> scripts/mod/modpost.c:1055:57: error: ‘EM_RISCV’ undeclared (first use in this function)
> >> >> return !is_mapping_symbol(name, elf->hdr->e_machine == EM_RISCV);
> >> >>
> >> >> Fix it by moving the EM_RISCV to the file head, also some other
> >> >> defines in case of similar problem in the future.
> >> >
> >> >
> >> >
> >> > BTW, why is the flag 'is_riscv' needed?
> >> >
> >> >
> >> > All symbols starting with '$' look special to me.
> >> >
> >> >
> >> >
> >> > Why not like this?
> >> >
> >> >
> >> > if (str[0] == '$')
> >> > return true;
> >> >
> >> > return false;
> >>
> >> There's a bit of commentary in the v1
> >> <https://lore.kernel.org/all/[email protected]/>,
> >> but essentially it's not necessary. I just wanted to play things safe
> >> and avoid changing the mapping symbol detection elsewhere in order to
> >> deal with RISC-V.
> >>
> >> IIRC we decided $ was special in RISC-V because there were some other
> >> ports that behaved that way, but it wasn't universal. If folks are OK
> >> treating $-prefixed symbols as special everywhere that's fine with me, I
> >> just wasn't sure what the right answer was.
> >>
> >> There's also some similar arch-specific-ness with the labels and such in
> >> here.
> >
> > Hi Palmer,
> >
> > I am not a toolchain expert, but my gut feeling is
> > that the code was safer than needed.
> >
> >
> > I'd like to remove the 'is_riscv' switch rather than
> > applying this patch.
> >
> > Will you send a patch, or do you want me to do so?
>
> I've pretty much got it already. Do you want it on top of the original
> patch, or just squashed in so you can drop it?



It is up to Luis Chamberlain.

The original patch does not exist in my kbuild tree.
(and I was not even not CC'ed, so I had not noticed it
before I saw this report)




commit c05780ef3c190c2dafbf0be8e65d4f01103ad577
Author: Palmer Dabbelt <[email protected]>
AuthorDate: Fri Jul 7 09:00:51 2023 -0700
Commit: Luis Chamberlain <[email protected]>
CommitDate: Mon Jul 10 12:45:23 2023 -0700

module: Ignore RISC-V mapping symbols too

RISC-V has an extended form of mapping symbols that we use to encode
the ISA when it changes in the middle of an ELF. This trips up modpost
as a build failure, I haven't yet verified it yet but I believe the
kallsyms difference should result in stacks looking sane again.

Reported-by: Randy Dunlap <[email protected]>
Closes: https://lore.kernel.org/all/[email protected]/
Signed-off-by: Palmer Dabbelt <[email protected]>
Reviewed-by: Randy Dunlap <[email protected]>
Tested-by: Randy Dunlap <[email protected]> # build-tested
Signed-off-by: Luis Chamberlain <[email protected]>




--
Best Regards
Masahiro Yamada