nowy perl

Jakub Bogusz qboosh w pld-linux.org
Nie, 9 Maj 2004, 18:31:00 CEST


On Sun, May 09, 2004 at 04:16:26PM +0200, Radoslaw Zielinski wrote:
> Jakub Bogusz <qboosh w pld-linux.org> [09-05-2004 15:23]:
> > On Sun, May 09, 2004 at 01:50:05PM +0200, Radoslaw Zielinski wrote:
> >> Jakub Bogusz <qboosh w pld-linux.org> [08-05-2004 19:27]:
> >>> On Sat, May 08, 2004 at 07:21:16PM +0200, Jakub Bogusz wrote:
> >>> A tak przy okazji, to łata perl_580-use-LD_PRELOAD-for-libperl.so.patch
> >>> coś chyba nie działa, bo i tak jest używane LD_LIBRARY_PATH.
> [...]
> >>   that with LD_LIBRARY_PATH; on Linux, you can only override at runtime
> >>                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> >>   via LD_PRELOAD, specifying the exact filename you wish to be used;
> >>   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> [...]
> >> Zgodnie z moimi testami, to nie jest prawdą; LD_LIBRARY_PATH jak
> >> najbardziej działa.  Do wywalenia, nie?
> > Trochę mnie to dziwi, bo w podobnych przypadkach LD_LIBRARY_PATH mi nie
> > chciało działać (i tak wczytywał bibliotekę z /usr/lib) i musiałem
> > używać LD_PRELOAD.
> > A w tym przypadku działa (a strace potwierdza), że LD_LIBRARY_PATH
> > wystarcza, żeby przy wywołaniu ./{mini,}perl była używana nowa
> > biblioteka, a nie ta z /usr/lib.
> 
> Może przy Twoich testach binarka była zlinkowana z libfoo.so.X, który
> był symlinkiem do /usr/lib/libfoo.so.X.Y.Z i nie uwzględniłeś tego przy
> testowaniu?

Nie sądzę, był komplet.
Może sytuacja dotyczyła bibliotek wczytywanych przez inne biblioteki,
a nie samą binarkę.

A co do rzeczonego błędu na ppc, to jednak wygląda na winę gcc.
W jednym z plików (pp_hot.c) jest użyte makro:
        PUSHSUB(cx);
które zawiera:
        PUSHSUB_BASE(cx) \
a to z kolei:
        if (!CvDEPTH(cv)) {                                             \
            (void)SvREFCNT_inc(cv);                                     \
            (void)SvREFCNT_inc(cv);                                     \
            SAVEFREESV(cv);                                             \
        }
No i na ppc z -O2 te dwa SvREFCNT_int zwiększają licznik odwołań... o 1
zamiast o 2.
Próbowałem oglądać kod po asemblacji, po -O2 w tym miejscu jest jakaś
dziwna sieczka, ale nie wiem na ile niepoprawna, bo ten bezsamogłoskowy
asembler nie bardzo do mnie przemawia.
-fno-strict-aliasing jak się okazuje i tak jest używane przy budowaniu
perla, więc dodanie drugi raz nic nie daje.
Czyli zostanie -O1 na ppc. Ciekawe czy gcc 3.4 też ma taki "ficzer".


-- 
Jakub Bogusz    http://cyber.cs.net.pl/~qboosh/



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