rpm: illegal instruction

Artur Frysiak wiget w pld.org.pl
Pon, 9 Lip 2001, 09:47:48 CEST


On Sat, Jul 07, 2001 at 06:23:48PM +0200, Michal Kochanowicz wrote:
> Cześć
> 
> No dobra. Dalej zrobiłem tak:
> (gdb) disassemble __os_malloc
> Dump of assembler code for function __os_malloc:
> [ciach]
> 0x80a6c26 <__os_malloc+26>:     cmove  %eax,%esi
> 
> Na stronie http://www.oberon.ethz.ch/native/compiler/instructions.html
> znalazłem informację że instrukcja cmove została wprowadzona w
> procesorach PentiumPro, czyli nie powinna znaleźć się w binarce
> przeznaczonej dla i586.
> 
> Ponieważ:
> (gdb) info address __os_malloc
> Symbol "__os_malloc" is at 0x80a6c0c in a file compiled without debugging.
> 
> domyślam się że ta instrukcja pochodzi z którejś z bibliotek. Ponieważ
> rpm jest linkowany statycznie nasuwa się wniosek że statyczne linkowanie
> i użycie --target wzajemnie się wykluczają. Wydaje mi się że należałoby
> to jakoś usankcjonować na poziomie rpm'a - tyle że to wymagałoby
> jakiegoś oznaczania pakietów linkowanych statycznie. Jakimś rozwiązaniem
> mogłoby być odmowa działania jeśli użyto --target a pakiet zawiera
> BuildRequires:.*-static. Co o tym sądzicie?

W twoim przypadku należało zrobić skrośną kompilacje na i586 czego nasz
rpm jeszcze nie potrafi.
Niby --target służy właśnie do tego ale my wykorzystujemy to trochę
inaczej. Ogólnie sprawę ujmując aby kompilować pakiety dla i586 musisz
wszystkie pakiety na maszynie budującej posiadać w wersji dla i586.
Nie koniecznie jako główne pakiety ale np w chroot(), jak to jest
robione w przypadku rodziny IA32 i jak będzie dla sparc, sparcv9,
sparc64.

Pozdrawiam
-- 
Artur Frysiak
http://www.pld.org.pl/



Więcej informacji o liście dyskusyjnej pld-devel-pl