You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl@perl.apache.org by Torsten Foertsch <to...@gmx.net> on 2008/06/03 11:04:00 UTC

Linux::Smaps kernel/perlio dependencies

Hi,

I have recently got a bug report about Linux::Smaps. The poster said it'd
report 2 [vdso] areas and that it can be cured if /proc/self/smaps is opened
with '<:stdio'. Later on he also found the behavior depends on the kernel
version, 2.6.25.3 shows 2 vdsos 2.6.23.1-21 only one.

Since I don't have any of these kernels I am asking for help. To all of my
knowledge multiple vdsos is nonsense. But is it a kernel bug or a bug in the
perlio layer?

Could you please run the following command on various combinations of linux
kernel and perlio?

PERLIO="stdio" perl -pe 'BEGIN {my $smaps="/proc/$$/smaps";
  open STDIN, "<", $smaps or die "$!\n"; system "cat -n $smaps"}
  $_="$.\t$_"' | grep vdso

It should print 2 almost identical lines. If there are more please report.

Here an example:

$ PERLIO="stdio" perl -pe 'BEGIN {my $smaps="/proc/$$/smaps"; open STDIN, "<", $smaps or die "$!\n"; system "cat -n $smaps"} $_="$.\t$_"'|grep vdso
   321  ffffe000-fffff000 r-xp 00000000 00:00 0          [vdso]
321     ffffe000-fffff000 r-xp 00000000 00:00 0          [vdso]

Keep in mind that /proc/$$/smaps exists only for kernels >=2.6.14.

Thanks,
Torsten

Re: Linux::Smaps kernel/perlio dependencies

Posted by Michael Peters <mp...@plusthree.com>.
Torsten Foertsch wrote:

> It should print 2 almost identical lines. If there are more please report.

Perl 5.8.8 and Linux 2.6.20 only prints 2.

-- 
Michael Peters
Plus Three, LP


Re: Linux::Smaps kernel/perlio dependencies

Posted by André Warnier <aw...@ice-sa.com>.
Hi.
I don't have a clue what this relates to, but just in case it helps for 
your sample, here are the outputs for 2 Linux Debian systems (don't know 
how to output the version of perlio though) :

1)
root@arthur:~# uname -a
Linux arthur 2.6.18-6-686 #1 SMP Thu May 8 07:34:27 UTC 2008 i686 GNU/Linux
root@arthur:~#  PERLIO="stdio" perl -pe 'BEGIN {my 
$smaps="/proc/$$/smaps"; open STDIN, "<", $smaps or die "$!\n"; system 
"cat  -n $smaps"} $_="$.\t$_"'|grep vdso"} $_="$.\t$_"'|grep vd 
                    155  b7f92000-b7f93000 r-xp b7f92000 00:00 0 
   [vdso]
155     b7f92000-b7f93000 r-xp b7f92000 00:00 0          [vdso]
root@arthur:~# perl -V
Summary of my perl5 (revision 5 version 8 subversion 8) configuration:
   Platform:
     osname=linux, osvers=2.6.24.4, archname=i486-linux-gnu-thread-multi
     uname='linux ninsei 2.6.24.4 #1 smp preempt fri apr 18 15:36:09 pdt 
2008 i686 gnulinux '
     config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN 
-Dcccdlflags=-fPIC -Darchname=i486-linux-gnu -Dprefix=/usr 
-Dprivlib=/usr/share/perl/5.8 -Darchlib=/usr/lib/perl/5.8 
-Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5 
-Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local 
-Dsitelib=/usr/local/share/perl/5.8.8 
-Dsitearch=/usr/local/lib/perl/5.8.8 -Dman1dir=/usr/share/man/man1 
-Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1 
-Dsiteman3dir=/usr/local/man/man3 -Dman1ext=1 -Dman3ext=3perl 
-Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Uusesfio -Uusenm 
-Duseshrplib -Dlibperl=libperl.so.5.8.8 -Dd_dosuid -des'
     hint=recommended, useposix=true, d_sigaction=define
     usethreads=define use5005threads=undef useithreads=define 
usemultiplicity=define
     useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
     use64bitint=undef use64bitall=undef uselongdouble=undef
     usemymalloc=n, bincompat5005=undef
   Compiler:
     cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS 
-DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include 
-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
     optimize='-O2',
     cppflags='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBIAN 
-fno-strict-aliasing -pipe -I/usr/local/include'
     ccversion='', gccversion='4.1.2 20061115 (prerelease) (Debian 
4.1.1-21)', gccosandvers=''
     intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
     d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
     ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', 
lseeksize=8
     alignbytes=4, prototype=define
   Linker and Libraries:
     ld='cc', ldflags =' -L/usr/local/lib'
     libpth=/usr/local/lib /lib /usr/lib
     libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt
     perllibs=-ldl -lm -lpthread -lc -lcrypt
     libc=/lib/libc-2.3.6.so, so=so, useshrplib=true, 
libperl=libperl.so.5.8.8
     gnulibc_version='2.3.6'
   Dynamic Linking:
     dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
     cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib'


Characteristics of this binary (from libperl):
   Compile-time options: MULTIPLICITY PERL_IMPLICIT_CONTEXT
                         PERL_MALLOC_WRAP THREADS_HAVE_PIDS USE_ITHREADS
                         USE_LARGE_FILES USE_PERLIO USE_REENTRANT_API
   Built under linux
   Compiled at Apr 25 2008 20:23:05
   @INC:
     /etc/perl
     /usr/local/lib/perl/5.8.8
     /usr/local/share/perl/5.8.8
     /usr/lib/perl5
     /usr/share/perl5
     /usr/lib/perl/5.8
     /usr/share/perl/5.8
     /usr/local/lib/site_perl
     /usr/local/lib/perl/5.8.4
     /usr/local/share/perl/5.8.4
     .
root@arthur:~#

2)
dent:~# uname -a
Linux dent 2.6.18-6-xen-amd64 #1 SMP Thu May 8 08:34:37 UTC 2008 x86_64 
GNU/Linux
dent:~# PERLIO="stdio" perl -pe 'BEGIN {my $smaps="/proc/$$/smaps"; open 
STDIN, "<", $smaps or die "$!\n"; system "cat -n $smaps"} 
$_="$.\t$_"'|grep vdso
    232  ffffffffff600000-ffffffffffe00000 ---p 00000000 00:00 0 
           [vdso]
232     ffffffffff600000-ffffffffffe00000 ---p 00000000 00:00 0 
          [vdso]
dent:~# perl -V
Summary of my perl5 (revision 5 version 8 subversion 8) configuration:
   Platform:
     osname=linux, osvers=2.6.24-1-amd64, 
archname=x86_64-linux-gnu-thread-multi
     uname='linux deneb 2.6.24-1-amd64 #1 smp thu mar 27 16:52:38 utc 
2008 x86_64 gnulinux '
     config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN 
-Dcccdlflags=-fPIC -Darchname=x86_64-linux-gnu -Dprefix=/usr 
-Dprivlib=/usr/share/perl/5.8 -Darchlib=/usr/lib/perl/5.8 
-Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5 
-Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local 
-Dsitelib=/usr/local/share/perl/5.8.8 
-Dsitearch=/usr/local/lib/perl/5.8.8 -Dman1dir=/usr/share/man/man1 
-Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1 
-Dsiteman3dir=/usr/local/man/man3 -Dman1ext=1 -Dman3ext=3perl 
-Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Uusesfio -Uusenm 
-Duseshrplib -Dlibperl=libperl.so.5.8.8 -Dd_dosuid -des'
     hint=recommended, useposix=true, d_sigaction=define
     usethreads=define use5005threads=undef useithreads=define 
usemultiplicity=define
     useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
     use64bitint=define use64bitall=define uselongdouble=undef
     usemymalloc=n, bincompat5005=undef
   Compiler:
     cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS 
-DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include 
-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
     optimize='-O2',
     cppflags='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBIAN 
-fno-strict-aliasing -pipe -I/usr/local/include'
     ccversion='', gccversion='4.1.2 20061115 (prerelease) (Debian 
4.1.1-21)', gccosandvers=''
     intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
     d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
     ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', 
lseeksize=8
     alignbytes=8, prototype=define
   Linker and Libraries:
     ld='cc', ldflags =' -L/usr/local/lib'
     libpth=/usr/local/lib /lib /usr/lib
     libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt
     perllibs=-ldl -lm -lpthread -lc -lcrypt
     libc=/lib/libc-2.3.6.so, so=so, useshrplib=true, 
libperl=libperl.so.5.8.8
     gnulibc_version='2.3.6'
   Dynamic Linking:
     dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
     cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib'


Characteristics of this binary (from libperl):
   Compile-time options: MULTIPLICITY PERL_IMPLICIT_CONTEXT
                         PERL_MALLOC_WRAP THREADS_HAVE_PIDS USE_64_BIT_ALL
                         USE_64_BIT_INT USE_ITHREADS USE_LARGE_FILES
                         USE_PERLIO USE_REENTRANT_API
   Built under linux
   Compiled at Apr 25 2008 19:26:38
   @INC:
     /etc/perl
     /usr/local/lib/perl/5.8.8
     /usr/local/share/perl/5.8.8
     /usr/lib/perl5
     /usr/share/perl5
     /usr/lib/perl/5.8
     /usr/share/perl/5.8
     /usr/local/lib/site_perl
     .
dent:~#


Torsten Foertsch wrote:
> Hi,
> 
> I have recently got a bug report about Linux::Smaps. The poster said it'd
> report 2 [vdso] areas and that it can be cured if /proc/self/smaps is opened
> with '<:stdio'. Later on he also found the behavior depends on the kernel
> version, 2.6.25.3 shows 2 vdsos 2.6.23.1-21 only one.
> 
> Since I don't have any of these kernels I am asking for help. To all of my
> knowledge multiple vdsos is nonsense. But is it a kernel bug or a bug in the
> perlio layer?
> 
> Could you please run the following command on various combinations of linux
> kernel and perlio?
> 
> PERLIO="stdio" perl -pe 'BEGIN {my $smaps="/proc/$$/smaps";
>   open STDIN, "<", $smaps or die "$!\n"; system "cat -n $smaps"}
>   $_="$.\t$_"' | grep vdso
> 
> It should print 2 almost identical lines. If there are more please report.
> 
> Here an example:
> 
> $ PERLIO="stdio" perl -pe 'BEGIN {my $smaps="/proc/$$/smaps"; open STDIN, "<", $smaps or die "$!\n"; system "cat -n $smaps"} $_="$.\t$_"'|grep vdso
>    321  ffffe000-fffff000 r-xp 00000000 00:00 0          [vdso]
> 321     ffffe000-fffff000 r-xp 00000000 00:00 0          [vdso]
> 
> Keep in mind that /proc/$$/smaps exists only for kernels >=2.6.14.
> 
> Thanks,
> Torsten
> 

Re: Linux::Smaps kernel/perlio dependencies

Posted by André Warnier <aw...@ice-sa.com>.
Torsten,

many thanks for the time taken for the explanation.

I still understand only slightly less than 50% of it, but then I don't 
really need to understand more either.  I am just very glad and thankful 
that there are people such as you who apparently do understand it, upon 
which we can rely to give us a good perl when we need it, a good 
explanation when we ask for it, and upon which we might need to call 
some day when we are really desperate.

And, one other good thing about the explanation below, is that it will 
undoubtedly provide a number of people like me with some esoteric new 
vocabulary for the next time the marketing guys ask us why this damn 
project isn't ready in time.  I can just see their faces when we talk to 
them about boosting performance and avoiding shell code injection by 
taking advantage of the latest processors and glibc features, and now 
switching from user to supervisor mode by means of a Virtual Dynamic 
Shared Object instead of the old passé software interrupt 0x80.
Great stuff !

Now if I could just understand why the different choices of a perlio 
layer influence the location of this VDSO, I feel that I would instantly 
become a much better perl and mod_perl programmer.  Or was it just the 
fact that I ran the command 3 times in a row ? Hmmm.
But don't ! I really do not need to know about that one.

Danke und Grüsse
André

P.S. Now that I knew what to look for, there seems to be a good 
explanation here :
http://manugarg.googlepages.com/systemcallinlinux2_6.html
Now I feel that my understanding has climbed to at least 55%.


Torsten Foertsch wrote:
> On Tue 03 Jun 2008, André Warnier wrote:
>> I find it interesting that the answers are all different on system (1),
>> but all the same on system (2).
>> I don't have a clue as to what it means, or what it does to my systems,
>> but I trust you do.
> 
> Just to enlighten you. Originally linux on x86 used to use a software 
> interrupt 0x80 to implement syscalls. With newer processors this is a 
> performance bottleneck. So a new interface (sysenter/sysexit) has been 
> invented to switch from user space to kernel space and back.
> 
> This new interface uses a special page that is mapped in the virtual address 
> space of each process the so called Virtual Dynamic Shared Object (vdso). It 
> was originally located at a well known place in the address space of a 
> process because the C library needs to know where it is to make syscalls.
> 
> Later on it was found that the exact place where in the address space the vdso 
> page is located can be randomized a bit to enhance security. That makes it 
> harder to perform attacks based on shell code injection or other things where 
> the attacker needs to perform syscalls. But on the downside you need a glibc 
> that knows how to locate that page itself. So older programs won't run on a 
> system that randomizes the vdso location.
> 
> So, what you see on "arthur" is a randomized vdso location and on "dent" a 
> fixed one.
> 
> Torsten
> 
> --
> Need professional mod_perl support?
> Just hire me: torsten.foertsch@gmx.net
> 

Re: Linux::Smaps kernel/perlio dependencies

Posted by Torsten Foertsch <to...@gmx.net>.
On Tue 03 Jun 2008, André Warnier wrote:
> I find it interesting that the answers are all different on system (1),
> but all the same on system (2).
> I don't have a clue as to what it means, or what it does to my systems,
> but I trust you do.

Just to enlighten you. Originally linux on x86 used to use a software 
interrupt 0x80 to implement syscalls. With newer processors this is a 
performance bottleneck. So a new interface (sysenter/sysexit) has been 
invented to switch from user space to kernel space and back.

This new interface uses a special page that is mapped in the virtual address 
space of each process the so called Virtual Dynamic Shared Object (vdso). It 
was originally located at a well known place in the address space of a 
process because the C library needs to know where it is to make syscalls.

Later on it was found that the exact place where in the address space the vdso 
page is located can be randomized a bit to enhance security. That makes it 
harder to perform attacks based on shell code injection or other things where 
the attacker needs to perform syscalls. But on the downside you need a glibc 
that knows how to locate that page itself. So older programs won't run on a 
system that randomizes the vdso location.

So, what you see on "arthur" is a randomized vdso location and on "dent" a 
fixed one.

Torsten

--
Need professional mod_perl support?
Just hire me: torsten.foertsch@gmx.net

Re: Linux::Smaps kernel/perlio dependencies

Posted by André Warnier <aw...@ice-sa.com>.

Torsten Foertsch wrote:
> On Tue 03 Jun 2008, Torsten Foertsch wrote:
[...]
> Thanks to all so far. But could you please try that command for PERLIO=perlio 
> and perhaps PERLIO=unix too?
> 

Here you go.
I find it interesting that the answers are all different on system (1), 
but all the same on system (2).
I don't have a clue as to what it means, or what it does to my systems, 
but I trust you do.

1)
root@arthur:~# uname -a
Linux arthur 2.6.18-6-686 #1 SMP Thu May 8 07:34:27 UTC 2008 i686 GNU/Linux
root@arthur:~# perl -V
Summary of my perl5 (revision 5 version 8 subversion 8) configuration:
   Platform:
     osname=linux, osvers=2.6.24.4, archname=i486-linux-gnu-thread-multi
     uname='linux ninsei 2.6.24.4 #1 smp preempt fri apr 18 15:36:09 pdt 
2008 i686 gnulinux '
     config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN 
-Dcccdlflags=-fPIC -Darchname=i486-linux-gnu -Dprefix=/usr 
-Dprivlib=/usr/share/perl/5.8 -Darchlib=/usr/lib/perl/5.8 
-Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5 
-Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local 
-Dsitelib=/usr/local/share/perl/5.8.8 
-Dsitearch=/usr/local/lib/perl/5.8.8 -Dman1dir=/usr/share/man/man1 
-Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1 
-Dsiteman3dir=/usr/local/man/man3 -Dman1ext=1 -Dman3ext=3perl 
-Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Uusesfio -Uusenm 
-Duseshrplib -Dlibperl=libperl.so.5.8.8 -Dd_dosuid -des'
     hint=recommended, useposix=true, d_sigaction=define
     usethreads=define use5005threads=undef useithreads=define 
usemultiplicity=define
     useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
     use64bitint=undef use64bitall=undef uselongdouble=undef
     usemymalloc=n, bincompat5005=undef
   Compiler:
     cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS 
-DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include 
-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
     optimize='-O2',
     cppflags='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBIAN 
-fno-strict-aliasing -pipe -I/usr/local/include'
     ccversion='', gccversion='4.1.2 20061115 (prerelease) (Debian 
4.1.1-21)', gccosandvers=''
     intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
     d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
     ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', 
lseeksize=8
     alignbytes=4, prototype=define
   Linker and Libraries:
     ld='cc', ldflags =' -L/usr/local/lib'
     libpth=/usr/local/lib /lib /usr/lib
     libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt
     perllibs=-ldl -lm -lpthread -lc -lcrypt
     libc=/lib/libc-2.3.6.so, so=so, useshrplib=true, 
libperl=libperl.so.5.8.8
     gnulibc_version='2.3.6'
   Dynamic Linking:
     dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
     cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib'


Characteristics of this binary (from libperl):
   Compile-time options: MULTIPLICITY PERL_IMPLICIT_CONTEXT
                         PERL_MALLOC_WRAP THREADS_HAVE_PIDS USE_ITHREADS
                         USE_LARGE_FILES USE_PERLIO USE_REENTRANT_API
   Built under linux
   Compiled at Apr 25 2008 20:23:05
   @INC:
     /etc/perl
     /usr/local/lib/perl/5.8.8
     /usr/local/share/perl/5.8.8
     /usr/lib/perl5
     /usr/share/perl5
     /usr/lib/perl/5.8
     /usr/share/perl/5.8
     /usr/local/lib/site_perl
     /usr/local/lib/perl/5.8.4
     /usr/local/share/perl/5.8.4
     .
root@arthur:~#  PERLIO="unix" perl -pe 'BEGIN {my 
$smaps="/proc/$$/smaps"; open STDIN, "<", $smaps or die "$!\n"; system 
"cat  -n $smaps"} $_="$.\t$_"'|grep vdso
    155  b7ef6000-b7ef7000 r-xp b7ef6000 00:00 0          [vdso]
155     b7ef6000-b7ef7000 r-xp b7ef6000 00:00 0          [vdso]
root@arthur:~#  PERLIO="perlio" perl -pe 'BEGIN {my 
$smaps="/proc/$$/smaps"; open STDIN, "<", $smaps or die "$!\n"; system 
"cat  -n $smaps"} $_="$.\t$_"'|grep vdso
    155  b7fb5000-b7fb6000 r-xp b7fb5000 00:00 0          [vdso]
155     b7fb5000-b7fb6000 r-xp b7fb5000 00:00 0          [vdso]
root@arthur:~#  PERLIO="stdio" perl -pe 'BEGIN {my 
$smaps="/proc/$$/smaps"; open STDIN, "<", $smaps or die "$!\n"; system 
"cat  -n $smaps"} $_="$.\t$_"'|grep vdso
    155  b7f30000-b7f31000 r-xp b7f30000 00:00 0          [vdso]
155     b7f30000-b7f31000 r-xp b7f30000 00:00 0          [vdso]
root@arthur:~#


2)
dent:~# uname -a
Linux dent 2.6.18-6-xen-amd64 #1 SMP Thu May 8 08:34:37 UTC 2008 x86_64 
GNU/Linux
dent:~# perl -V
Summary of my perl5 (revision 5 version 8 subversion 8) configuration:
   Platform:
     osname=linux, osvers=2.6.24-1-amd64, 
archname=x86_64-linux-gnu-thread-multi
     uname='linux deneb 2.6.24-1-amd64 #1 smp thu mar 27 16:52:38 utc 
2008 x86_64 gnulinux '
     config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN 
-Dcccdlflags=-fPIC -Darchname=x86_64-linux-gnu -Dprefix=/usr 
-Dprivlib=/usr/share/perl/5.8 -Darchlib=/usr/lib/perl/5.8 
-Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5 
-Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local 
-Dsitelib=/usr/local/share/perl/5.8.8 
-Dsitearch=/usr/local/lib/perl/5.8.8 -Dman1dir=/usr/share/man/man1 
-Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1 
-Dsiteman3dir=/usr/local/man/man3 -Dman1ext=1 -Dman3ext=3perl 
-Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Uusesfio -Uusenm 
-Duseshrplib -Dlibperl=libperl.so.5.8.8 -Dd_dosuid -des'
     hint=recommended, useposix=true, d_sigaction=define
     usethreads=define use5005threads=undef useithreads=define 
usemultiplicity=define
     useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
     use64bitint=define use64bitall=define uselongdouble=undef
     usemymalloc=n, bincompat5005=undef
   Compiler:
     cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS 
-DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include 
-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
     optimize='-O2',
     cppflags='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBIAN 
-fno-strict-aliasing -pipe -I/usr/local/include'
     ccversion='', gccversion='4.1.2 20061115 (prerelease) (Debian 
4.1.1-21)', gccosandvers=''
     intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
     d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
     ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', 
lseeksize=8
     alignbytes=8, prototype=define
   Linker and Libraries:
     ld='cc', ldflags =' -L/usr/local/lib'
     libpth=/usr/local/lib /lib /usr/lib
     libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt
     perllibs=-ldl -lm -lpthread -lc -lcrypt
     libc=/lib/libc-2.3.6.so, so=so, useshrplib=true, 
libperl=libperl.so.5.8.8
     gnulibc_version='2.3.6'
   Dynamic Linking:
     dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
     cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib'


Characteristics of this binary (from libperl):
   Compile-time options: MULTIPLICITY PERL_IMPLICIT_CONTEXT
                         PERL_MALLOC_WRAP THREADS_HAVE_PIDS USE_64_BIT_ALL
                         USE_64_BIT_INT USE_ITHREADS USE_LARGE_FILES
                         USE_PERLIO USE_REENTRANT_API
   Built under linux
   Compiled at Apr 25 2008 19:26:38
   @INC:
     /etc/perl
     /usr/local/lib/perl/5.8.8
     /usr/local/share/perl/5.8.8
     /usr/lib/perl5
     /usr/share/perl5
     /usr/lib/perl/5.8
     /usr/share/perl/5.8
     /usr/local/lib/site_perl
     .
dent:~# PERLIO="unix" perl -pe 'BEGIN {my $smaps="/proc/$$/smaps"; open 
STDIN, "<", $smaps or die "$!\n"; system "cat -n $smaps"} 
$_="$.\t$_"'|grep vdso
    232  ffffffffff600000-ffffffffffe00000 ---p 00000000 00:00 0 
           [vdso]
232     ffffffffff600000-ffffffffffe00000 ---p 00000000 00:00 0 
          [vdso]
dent:~# PERLIO="perlio" perl -pe 'BEGIN {my $smaps="/proc/$$/smaps"; 
open STDIN, "<", $smaps or die "$!\n"; system "cat -n $smaps"} 
$_="$.\t$_"'|grep vdso
    232  ffffffffff600000-ffffffffffe00000 ---p 00000000 00:00 0 
           [vdso]
232     ffffffffff600000-ffffffffffe00000 ---p 00000000 00:00 0 
          [vdso]
dent:~# PERLIO="stdio" perl -pe 'BEGIN {my $smaps="/proc/$$/smaps"; open 
STDIN, "<", $smaps or die "$!\n"; system "cat -n $smaps"} 
$_="$.\t$_"'|grep vdso
    232  ffffffffff600000-ffffffffffe00000 ---p 00000000 00:00 0 
           [vdso]
232     ffffffffff600000-ffffffffffe00000 ---p 00000000 00:00 0 
          [vdso]
dent:~#

André

Re: Linux::Smaps kernel/perlio dependencies

Posted by Torsten Foertsch <to...@gmx.net>.
On Tue 03 Jun 2008, Torsten Foertsch wrote:
> Could you please run the following command on various combinations of linux
> kernel and perlio?
>
> PERLIO="stdio" perl -pe 'BEGIN {my $smaps="/proc/$$/smaps";
>   open STDIN, "<", $smaps or die "$!\n"; system "cat -n $smaps"}
>   $_="$.\t$_"' | grep vdso

Thanks to all so far. But could you please try that command for PERLIO=perlio 
and perhaps PERLIO=unix too?

Thanks,
Torsten

--
Need professional mod_perl support?
Just hire me: torsten.foertsch@gmx.net