On 14/09/2011 1:43 AM, Marco atzeri wrote:
On 9/14/2011 4:52 AM, Paul wrote:
I am using the 2011-08-29 snapshot at http://cygwin.com/snapshots
because
cygwin-1.7.9-1 does not allow me to write to, or create, files on
network drives
(http://cygwin.com/packages/cygwin/cygwin-1.7.9-1).
snapshot is fine.
(1.7.9-1 has a bug that does not allow to plot on any MS system)
I am using Windows 7 Enterprise 64-bit.
My current problem is using plotting commands from Octave. It is not
a gnuplot
problem because I can plot from gnuplot. If I plot the simplest
thing from
octave [ e.g. plot( 1:10 , 1:10 ) ], I get:
5 [main] octave-3.4.2 2892 child_info_fork::abort: address space
needed by
'max.oct' (004F0000) is already occupied
error: popen2: process creation failed -- Resource temporarily
unavailable
error: called from:
error: /usr/share/octave/3.4.2/m/plot/__gnuplot_open_stream__.m
at line 30,
column 44
error: /usr/share/octave/3.4.2/m/plot/__gnuplot_drawnow__.m at
line 72,
column 19
I already did rebaseall and peflagsall from ash. I ensured there
were no cygwin
processes running, then invoked ash from the DOS command prompt. I also
rebooted after peflagsall.
What else can I try?
Hi Paul,
your problem is a new one :-(
max.oct is a dll of octave, and its base address is not 004F0000
$ objdump -p /lib/octave/3.4.2/oct/i686-pc-cygwin/max.oct |grep ImageBase
ImageBase 686c0000
I guess that another dll is loaded at 686c0000, so max.oct
is loaded too near at 004000000, the base address of any exe
$ objdump -p /bin/gnuplot.exe |grep ImageBase
ImageBase 00400000
$ objdump -p /bin/octave-3.4.2.exe |grep ImageBase
ImageBase 00400000
So when octave fork gnuplot, gnuplot take that address space
and max.oct can not be loaded at the previous 004F0000.
peflagsall is not aware that .oct are also dll, so you could try with
$ peflagsall -s 'exe|dll|so|oct'
Wouldn't rebaseall need similar treatment? My understanding from Corinna
is that peflagsall is not particularly helpful (though not harmful either).
As for the rebase error, it's not new, unfortunately. Rebasing helps
(especially if it picks up .oct files), but that message means that
Windows ASLR dropped "something" on the child (statically-linked dll,
thread stack, heap, etc.) in a place that a dynamically-loaded dll
occupied in the parent. Cygwin has exactly zero control over such
address space clobbers, though sometimes restarting the offending parent
a few times produces a process with a less vulnerable address space layout.
There is some evidence [1] that flagging cygwin .exe as large address
aware and rebasing all libraries (excepting cygwin1.dll?) into high
addresses makes it immune to ASLR problems (the latter apparently only
mucks with low addresses), but I don't know if anybody has ever tested
it on octave. Emacs broke in nasty ways when marked large address-aware
[2], though the problem has since been fixed [3].
[1] http://cygwin.com/ml/cygwin-developers/2011-06/msg00002.html
[2] http://cygwin.com/ml/cygwin/2011-08/msg00153.html
[3] http://cygwin.com/ml/cygwin/2011-08/msg00312.html
Ryan
--
Problem reports: http://cygwin.com/problems.html
FAQ: http://cygwin.com/faq/
Documentation: http://cygwin.com/docs.html
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple