Bug 45763

Summary: rpm: поддержка архитектуры LoongArch
Product: Sisyphus Reporter: Alexey Sheplyakov <asheplyakov>
Component: rpmAssignee: Alexey Sheplyakov <asheplyakov>
Status: ASSIGNED --- QA Contact: qa-sisyphus
Severity: enhancement    
Priority: P5 CC: asheplyakov, at, glebfm, imz, iv, ldv, liannnix, nir, placeholder, sin, vt
Version: unstable   
Hardware: all   
OS: Linux   
Bug Depends on:    
Bug Blocks: 45802    

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.
Ну пусть будет, вреда никакого.