Re: eseguire software di un'architettura hardware diversa da quella del proprio sistema (ERA: Re: Ancora CIE e middleware)

2021-10-19 Thread Davide Prina

On 19/10/21 10:42, Diego Zuccato wrote:

Il 18/10/2021 22:21, Davide Prina ha scritto:

On 18/10/21 08:49, Diego Zuccato wrote:
Ovviamente: un sistema a 64 bit può gestire una lib a 32 bit ma non 
viceversa.


in teoria, con Debian, puoi creare un sistema a più architetture 
hardware e quindi avere un sistema 64-32 bit... e probabilmente lo 
puoi ottenere sia partendo da un sistema a 32 che da uno a 64 (ho 
provato solo da amd64 aggiungere i386)


Si, puoi forse partire da uno a 32 bit, ma se il kernel non è a 64 bit, 
il processore girerà solo a 32. In pratica il processore in modalità 64 
bit riconosce il codice a 32 bit e va in modalità compatibile (sto 
semplificando al massimo). Ma se il processore è in modalità 32 bit, non 
sa nulla del codice a 64 bit e se va bene si blocca su un illegal opcode.


se devo essere sincero non ho mai approfondito più di tanto la questione 
di quale foreign architecture puoi installare sulla tua macchina e una 
volta fatto cosa effettivamente ci puoi fare.
L'unica cosa che ho fatto è installare l'architettura i386 su 
un'architettura amd64.


Però se si guarda il wiki di Debian relativo alla multiarchitettura[¹] 
prima indica con questa frase "either the kernel supports a 
compatibility interface, notably 64bit kernels often support running 
32bit software (but most probably not the converse)" che non sembra 
escludere definitivamente questa possibilità, mentre io mi sarei 
aspettato, come hai indicato tu, una frase che escludesse 
categoricamente l'esecuzione di software a 64 bit su un'architettura 
hardware a 32 bit.


Poi però offre una modalità per poter eseguire qualsiasi software di 
qualsiasi architettura hardware supportata da Debian sulla propria 
architettura hardware "nativa": "or a qemu-user instance is configured 
to act as an on-the-fly emulation layer, see QemuUserEmulation" che 
punta alla pagina di QemuUserEmulation[²]


Da quello che ho capito, guardando rapidamente questa seconda pagina, 
sembra possibile installare software di una qualsiasi foreign 
architecture ed eseguirlo in modo trasparente, come se fosse 
dell'architettura "nativa".


La cosa è molto interessante e, ad avere tempo, sarebbe da sperimentare

Ciao
Davide

[¹] https://wiki.debian.org/Multiarch/HOWTO

[²] https://wiki.debian.org/QemuUserEmulation
--
Sistema operativo: http://www.debian.org
GNU/Linux User: 302090: http://counter.li.org
Non autorizzo la memorizzazione del mio indirizzo su outlook




Re: eseguire software di un'architettura hardware diversa da quella del proprio sistema (ERA: Re: Ancora CIE e middleware)

2021-10-19 Thread Alessandro Rubini
> notably 64bit kernels often support running 
> 32bit software (but most probably not the converse)" che non sembra 
> escludere definitivamente

Se il mondo non e` cambiato nel frattempo, mi sentirei di escluderlo.
Un eseguibile a 64 bit usa puntatori a 64 bit e vuole una memoria
virtuale a 64 bit (non ricordo quanti, ma piu` di 32). Se il kernel
e` a 32 bit, offre una memoria virtuale a 32.

> "or a qemu-user instance is configured 
> to act as an on-the-fly emulation layer, see QemuUserEmulation"

Questo funziona come un gioiellino. Ma ovviamente il codice viene
interpretato (da qemu), non eseguito, quindi va piu` lento. Qemu e`
straordinariamente efficente (e` Fabrice Bellard, mica l'ultimo
pistola) ma comunque siamo circa 10x piu` lento del nativo.

> La cosa è molto interessante e, ad avere tempo, sarebbe da sperimentare

E' banale. Si prende un eseguibile arm e si esegue. E` uno dei primi
esempi che faccio ai miei studenti, partendo da PC per andare su
micretto.

Certo, se e` un eseguibile "serio" occorrono anche le librerie dinamiche
dell'architettura eccetera. Io lo faccio vedere senza libreria,
implementando le 2 chiamate di sistema che mi servono (write e exit):

   laptopo% make hell-arm
   arm-none-eabi-gcc-c -o syscalls-arm.o syscalls-arm.S
   arm-none-eabi-gcc -Wall -static -ffreestanding   -c -o hell.o hell.c
   arm-none-eabi-ld -e main -o hell-arm syscalls-arm.o hell.o

   laptopo% ./hell-arm
   Hello

   laptopo% file hell-arm
   hell-arm: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically 
linked, not stripped

   laptopo% uname -m
   x86_64

Il trucco sta in binfmtmisc, che definisce interpreti per vari formati
di file, in base al contenuto del file (il "magic number"):

   laptopo% ls /proc/sys/fs/binfmt_misc/
   cli  qemu-aarch64 qemu-mipsqemu-sh4
   jar  qemu-alpha   qemu-mipsel  qemu-sh4eb
   llvm-3.1.binfmt  qemu-arm qemu-ppc qemu-sparc
   python2.6qemu-armeb   qemu-ppc64   qemu-sparc32plus
   python2.7qemu-crisqemu-ppc64abi32  qemu-sparc64
   python3.2qemu-m68kqemu-ppc64le register
   python3.4qemu-microblaze  qemu-s390x   status



Re: eseguire software di un'architettura hardware diversa da quella del proprio sistema (ERA: Re: Ancora CIE e middleware)

2021-10-19 Thread Marco Ciampa
On Tue, Oct 19, 2021 at 11:03:09PM +0200, Alessandro Rubini wrote:
> > notably 64bit kernels often support running 
> > 32bit software (but most probably not the converse)" che non sembra 
> > escludere definitivamente
> 
> Se il mondo non e` cambiato nel frattempo, mi sentirei di escluderlo.
> Un eseguibile a 64 bit usa puntatori a 64 bit e vuole una memoria
> virtuale a 64 bit (non ricordo quanti, ma piu` di 32). Se il kernel
> e` a 32 bit, offre una memoria virtuale a 32.
> 
> > "or a qemu-user instance is configured 
> > to act as an on-the-fly emulation layer, see QemuUserEmulation"
> 
> Questo funziona come un gioiellino. Ma ovviamente il codice viene
> interpretato (da qemu), non eseguito, quindi va piu` lento. Qemu e`
> straordinariamente efficente (e` Fabrice Bellard, mica l'ultimo
> pistola) ma comunque siamo circa 10x piu` lento del nativo.
> 
> > La cosa è molto interessante e, ad avere tempo, sarebbe da sperimentare
> 
> E' banale. Si prende un eseguibile arm e si esegue. E` uno dei primi
> esempi che faccio ai miei studenti, partendo da PC per andare su
> micretto.
> 
> Certo, se e` un eseguibile "serio" occorrono anche le librerie dinamiche
> dell'architettura eccetera. Io lo faccio vedere senza libreria,
> implementando le 2 chiamate di sistema che mi servono (write e exit):
> 
>laptopo% make hell-arm
>arm-none-eabi-gcc-c -o syscalls-arm.o syscalls-arm.S
>arm-none-eabi-gcc -Wall -static -ffreestanding   -c -o hell.o hell.c
>arm-none-eabi-ld -e main -o hell-arm syscalls-arm.o hell.o
> 
>laptopo% ./hell-arm
>Hello
> 
>laptopo% file hell-arm
>hell-arm: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), 
> statically linked, not stripped
> 
>laptopo% uname -m
>x86_64
> 
> Il trucco sta in binfmtmisc, che definisce interpreti per vari formati
> di file, in base al contenuto del file (il "magic number"):
> 
>laptopo% ls /proc/sys/fs/binfmt_misc/
>cli  qemu-aarch64 qemu-mipsqemu-sh4
>jar  qemu-alpha   qemu-mipsel  qemu-sh4eb
>llvm-3.1.binfmt  qemu-arm qemu-ppc qemu-sparc
>python2.6qemu-armeb   qemu-ppc64   qemu-sparc32plus
>python2.7qemu-crisqemu-ppc64abi32  qemu-sparc64
>python3.2qemu-m68kqemu-ppc64le register
>python3.4qemu-microblaze  qemu-s390x   status

Alex al solito sei stellare, questa mail me la salvo...

Si lo so, dirai, banale, ok ...  per te, e una volta che l'ho letta,
anche per me. È questo il punto: è tutto semplice _dopo_ che lo sai.

GRAZIE

--

Saluton,
Marco Ciampa



Re: eseguire software di un'architettura hardware diversa da quella del proprio sistema (ERA: Re: Ancora CIE e middleware)

2021-10-20 Thread Diego Zuccato

Il 19/10/2021 21:46, Davide Prina ha scritto:

se devo essere sincero non ho mai approfondito più di tanto la questione 
di quale foreign architecture puoi installare sulla tua macchina e una 
volta fatto cosa effettivamente ci puoi fare.
Io l'ho fatto tanti anni fa, per tentare di crearmi un sistema minimale 
che potesse avviarsi sia su x86 (32 e 64 bit) che su ARM. Un fallimento.


L'unica cosa che ho fatto è installare l'architettura i386 su 
un'architettura amd64.

E questo è tranquillamente supportato, infatti :)

Però se si guarda il wiki di Debian relativo alla multiarchitettura[¹] 
prima indica con questa frase "either the kernel supports a 
compatibility interface, notably 64bit kernels often support running 
32bit software (but most probably not the converse)" che non sembra 
escludere definitivamente questa possibilità, mentre io mi sarei 
aspettato, come hai indicato tu, una frase che escludesse 
categoricamente l'esecuzione di software a 64 bit su un'architettura 
hardware a 32 bit.

In effetti un sistema c'è, ma l...e...n...t...o...

Poi però offre una modalità per poter eseguire qualsiasi software di 
qualsiasi architettura hardware supportata da Debian sulla propria 
architettura hardware "nativa": "or a qemu-user instance is configured 
to act as an on-the-fly emulation layer, see QemuUserEmulation" che 
punta alla pagina di QemuUserEmulation[²]
Beh, se metti di mezzo la virtualizzazione allora puoi eseguire di 
tutto. Certo che le prestazioni precipitano: per quanto qemu sia 
piuttosto efficiente, dover emulare un'architettura diversa ha un grosso 
impatto. Se poi aggiungi che x86 non prevedeva le estensioni di 
virtualizzazione che invece ci sono in amd64, sei costretto a rendere 
interpretato il linguaggio macchina dell'eseguibile.


Da quello che ho capito, guardando rapidamente questa seconda pagina, 
sembra possibile installare software di una qualsiasi foreign 
architecture ed eseguirlo in modo trasparente, come se fosse 
dell'architettura "nativa".
La cosa è molto interessante e, ad avere tempo, sarebbe da sperimentareSicuramente può essere utile in certi casi. Però non credo si possa 

applicare alle lib.

--
Diego Zuccato
DIFA - Dip. di Fisica e Astronomia
Servizi Informatici
Alma Mater Studiorum - Università di Bologna
V.le Berti-Pichat 6/2 - 40127 Bologna - Italy
tel.: +39 051 20 95786



Re: eseguire software di un'architettura hardware diversa da quella del proprio sistema (ERA: Re: Ancora CIE e middleware)

2021-10-21 Thread Marco Bodrato

Ciao,

Il 2021-10-19 23:03 Alessandro Rubini ha scritto:

Il trucco sta in binfmtmisc, che definisce interpreti per vari formati
di file, in base al contenuto del file (il "magic number"):

   laptopo% ls /proc/sys/fs/binfmt_misc/
   cli  qemu-aarch64 qemu-mipsqemu-sh4
   jar  qemu-alpha   qemu-mipsel  qemu-sh4eb
   llvm-3.1.binfmt  qemu-arm qemu-ppc qemu-sparc
   python2.6qemu-armeb   qemu-ppc64   qemu-sparc32plus
   python2.7qemu-crisqemu-ppc64abi32  qemu-sparc64
   python3.2qemu-m68kqemu-ppc64le register
   python3.4qemu-microblaze  qemu-s390x   status


Non vedo una definizione per wine :-)

Forse ritieni che sia troppo rischioso eseguire "inconsapevolmente" il 
codice che wine farebbe girare?


In effetti concordo :-D

Ĝis,
m