Bug 45763 - rpm: поддержка архитектуры LoongArch
Summary: rpm: поддержка архитектуры LoongArch
Status: ASSIGNED
Alias: None
Product: Sisyphus
Classification: Development
Component: rpm (show other bugs)
Version: unstable
Hardware: all Linux
: P5 enhancement
Assignee: Alexey Sheplyakov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks: 45802
  Show dependency tree
 
Reported: 2023-04-06 12:34 MSK by Alexey Sheplyakov
Modified: 2023-07-08 10:23 MSK (History)
11 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Alexey Sheplyakov 2023-04-06 12:34:39 MSK

    
Comment 1 Alexey Sheplyakov 2023-04-06 20:28:47 MSK
#318149 TESTED #1 [test-only] sisyphus rpm.git=4.13.0.1-alt37
Comment 2 Andrey Limachko 2023-07-07 19:21:30 MSK
#324286 EPERM #2 sisyphus rpm.git=4.13.0.1-alt38 apt.git=0.5.15lorg2-alt85
Comment 3 Gleb F-Malinovskiy 2023-07-07 19:35:22 MSK
А зачем нужно вот это?

+#if defined(__loongarch64)
+       strcpy(un.machine, "loongarch64");
+#endif
Comment 4 Alexey Sheplyakov 2023-07-08 08:53:28 MSK
(Ответ для Gleb F-Malinovskiy на комментарий #3)
> А зачем нужно вот это?
> 
> +#if defined(__loongarch64)
> +       strcpy(un.machine, "loongarch64");
> +#endif

Чтобы работало.
Comment 5 Alexey Sheplyakov 2023-07-08 08:59:27 MSK
(Ответ для Gleb F-Malinovskiy на комментарий #3)
> А зачем нужно вот это?
> 
> +#if defined(__loongarch64)
> +       strcpy(un.machine, "loongarch64");
> +#endif

Функция defaultMachine (в файле lib/rpmrc.c) чуть менее чем полностью состоит из кода вида:

#       if defined(__linux__) && defined(__riscv__)
        if (rstreq(un.machine, "riscv")) {
                if (sizeof(long) == 4)
                        strcpy(un.machine, "riscv32");
                else if (sizeof(long) == 8)
                        strcpy(un.machine, "riscv64");
                else if (sizeof(long) == 16)
                        strcpy(un.machine, "riscv128");
        }   
#       endif   /* riscv */
Comment 6 Alexey Sheplyakov 2023-07-08 09:03:13 MSK
(Ответ для Alexey Sheplyakov на комментарий #5)
> (Ответ для Gleb F-Malinovskiy на комментарий #3)
> > А зачем нужно вот это?
> > 
> > +#if defined(__loongarch64)
> > +       strcpy(un.machine, "loongarch64");
> > +#endif
> 
> Функция defaultMachine (в файле lib/rpmrc.c) чуть менее чем полностью
> состоит из кода вида:
> 
> #       if defined(__linux__) && defined(__riscv__)
>         if (rstreq(un.machine, "riscv")) {
>                 if (sizeof(long) == 4)
>                         strcpy(un.machine, "riscv32");
>                 else if (sizeof(long) == 8)
>                         strcpy(un.machine, "riscv64");
>                 else if (sizeof(long) == 16)
>                         strcpy(un.machine, "riscv128");
>         }   
> #       endif   /* riscv */

А причина существования функции defaultMachine в том, что название архитектуры с точки зрения ядра (Linux) и rpm не всегда совпадают. Ядру, например, безразлично, какой там ABI в userspace, а для rpm это архиважно.
Comment 7 Gleb F-Malinovskiy 2023-07-08 10:23:08 MSK
(In reply to Alexey Sheplyakov from comment #4)
> Чтобы работало.
А без этого разве не работает?

Вы в целом ответили на вопросы, ответ на которые я знаю, а на мой вопрос не очень ответили.
Мне кажется очевидным, что если на loongarch64 будут какие-то изменения такого типа, то и этот код придётся менять, а сейчас этот код заменяет loongarch64 на loongarch64.
Ну пусть будет, вреда никакого.