Pharo-dev
By thread
pharo-dev@lists.pharo.org
By month
Messages by month
- ----- 2026 -----
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- 3 participants
- 144615 messages
Re: [Pharo-dev] [Ann] Commander shortcuts in Settings Browser
by Tudor Girba
Nice work!
Doru
> On Mar 6, 2018, at 5:05 PM, Denis Kudriashov <dionisiydk(a)gmail.com> wrote:
>
> Hi.
>
> With latest version of Commander and Calypso we will have all shortcuts explorable and configurable in Settings Browser:
>
> <ShortcutsSettingsBrowser.png>
> â
> Currently it uses command class name and class comment for presentation. We can improve it in future if necessary.
> In addition you can add single shortcut to your own application settings. For example:
>
> MyApp class>>appSettingsOn: aBuilder
> <systemsettings>
>
> ann := ClySpawnFullBrowserCommand classAnnotationAt: #browserShortcutActivation.
> (ann buildSettingNodeOn: aBuilder)
> label: 'My app shortcut';
> description: 'This command opens browser'
>
> Shortcut settings are persisted as all other settings. Only redefined shortcuts are stored into the file.
>
> This version also allows to add commands into the world menu and world shortcuts. Just use CmdWorldMenuContext for command annotations:
>
> CmdOpenFamilyBookCommand class>>worldMenuActivation
> <classAnnotation>
> ^CmdContextMenuCommandActivation byRootGroupItemFor: CmdWorldMenuContext
>
> CmdOpenFamilyBookCommand class>>globalShortcutActivation
> <classAnnotation>
> ^CmdShortcutCommandActivation by: $o meta, $f meta for: CmdWorldMenuContext
>
> (CmdOpenFamilyBookCommand is a command from Commander-Examples package).
>
> Nice detail: all shortcuts are updated immediately when you modify annotations either from settings or programmatically from browser.
>
> Now pull request for Pharo 7 is waiting integration. Soon it will be inside.
>
> Best regards,
> Denis
--
www.tudorgirba.com
www.feenk.com
"When people care, great things can happen."
March 6, 2018
Re: [Pharo-dev] [Vm-dev] FFI Struct Argument Pass By Value Fails on Mac 64 bit
by Todd Blanchard
Silly me.
I have no idea how to update this library. I thought it would be a file. I've used Monticello years ago in Squeak - however trying to load this repository into Pharo 6.1-64 is impossible. Invariably I end up with an undefined symbol and a couple of undismissable progress dialogs.
Also, its .c files that compile into a library, right? Where would such files be in this repository?
I love Smalltalk.
I'm really starting to hate this though.
> On Mar 1, 2018, at 10:25 AM, todd blanchard <tblanchard(a)mac.com> wrote:
>
> I'm mac osx
>
> I will update the test library and ping back
>
>> On Mar 1, 2018, at 10:11 AM, Eliot Miranda <eliot.miranda(a)gmail.com <mailto:eliot.miranda@gmail.com>> wrote:
>>
>> Todd,
>>
>> On Thu, Mar 1, 2018 at 10:01 AM, Eliot Miranda <eliot.miranda(a)gmail.com <mailto:eliot.miranda@gmail.com>> wrote:
>> Hi Todd,
>>
>> On Sun, Nov 26, 2017 at 8:24 AM, Todd Blanchard <tblanchard(a)mac.com <mailto:tblanchard@mac.com>> wrote:
>>
>> i'm getting the idea that we should probably write a test suite/library for FFI
>>
>> See the package FFI-Tests at http://source.squeak.org/FFI <http://source.squeak.org/FFI> and the file sqFFITestFuncs.c <http://sqffitestfuncs.c/>
>>
>> I suggest you extend these with an example that demonstrates your failing case. One thing to be very careful about is the platform. Are you on Mac OS X, linux or Win64? Mac OS X & linux use the SysV ABI (see e.g. https://software.intel.com/sites/default/files/article/402129/mpx-linux64-a… <https://software.intel.com/sites/default/files/article/402129/mpx-linux64-a…>) whereas Win64 uses Microsoft's own ABI (see https://msdn.microsoft.com/en-us/library/ms235286.aspx?f=255&MSPPError=-214… <https://msdn.microsoft.com/en-us/library/ms235286.aspx?f=255&MSPPError=-214…>). In particular under the Sys V ABI certain structs (structs having two 64-bit fields) will be passed in registers, if two registers are available at that point in the parameter list. The ThreadedX64SysVFFIPlugin is written to pass structs in this manner but there may be bugs in the code to identify precisely those structs that fulfill the register passing criterion. Microsoft's own ABI passes structs of size 8, 16, 32, or 64 bits and __m64 in a single register. The ThreadedX64Win64FFIPlugin is written to pass structs in this manner but again there may be bugs in the code to identify precisely those structs that fulfill the register passing criterion.
>>
>>
>> HTH
>>
>>> On Nov 24, 2017, at 12:54 AM, Ben Coman <btc(a)openinworld.com <mailto:btc@openinworld.com>> wrote:
>>>
>>>
>>>
>>> On 24 November 2017 at 13:16, Ben Coman <btc(a)openinworld.com <mailto:btc@openinworld.com>> wrote:
>>>
>>>
>>> On 22 November 2017 at 21:59, Ben Coman <btc(a)openinworld.com <mailto:btc@openinworld.com>> wrote:
>>>
>>>
>>> On 22 November 2017 at 13:38, Todd Blanchard <tblanchard(a)mac.com <mailto:tblanchard@mac.com>> wrote:
>>>
>>> I've been trying to track this down for a couple weeks now.
>>>
>>> I have concluded that structs passed by value to functions on the 64 bit VM are not properly populated. The struct's memory is all zero'd.
>>>
>>> I found this while trying to work with LibClang and found that functions that fetched code locations from code ranges always returned invalid zero'd locations. After spending some time with lldb I have traced the problem into the native code and found that the argument is not correct.
>>>
>>> I've carved out the wee bit of clang to reproduce this in a tiny library.
>>>
>>> The gist of it is below and the entire file is included. Basically the struct passed to the function clang_getRangeStart is zero'd memory regardless of the data I send from the image side.
>>>
>>> The build command I used on sierra is clang -shared -undefined dynamic_lookup -o microclang.dylib microclang.c
>>>
>>> On Ubuntu 16.04 I used...
>>> $ clang -shared -fPIC -o libmicroclang.so microclang.c
>>>
>>> $ clang test.c -L. -l microclang
>>> test.c:6:53: error: no member named 'begin_int_data' in 'CXSourceLocation'
>>> if(clang_getRangeStart(clang_getArbitraryRange()).begin_int_data == 0)
>>>
>>> I presume you meant...
>>> if(clang_getRangeStart(clang_getArbitraryRange()).int_data == 0)
>>> so correcting and continuing...
>>>
>>> $ clang test.c -L. -l microclang
>>> $ LD_LIBRARY_PATH=. ./a.out
>>> That failed
>>>
>>> So I'm not sure how to proceed.
>>> I was expecting that would work while Pharo failed.
>>>
>>> Now interestingly...
>>> $ clang test.c microlang.c
>>> $ ./a.out
>>> That worked
>>>
>>>
>>> So it seems a similar problem exists outside our FFI.
>>>
>>> cheers -ben
>>>
>>> P.S. I refactored you code to extract a header file (attached)
>>>
>>> The issue is still beyond my ken, but I've made some progress towards isolating/understanding the issue.
>>> Attached zip exploded here for easy reference...
>>>
>>>
>>> ___microlang.h___
>>> typedef unsigned uintptr_t;
>>>
>>> typedef struct {
>>> const void *ptr_data[2];
>>> } CXSourceRange_;
>>>
>>> CXSourceRange_ clang_getArbitraryRange_();
>>> int clang_getRangeEnd_(CXSourceRange_ range);
>>>
>>>
>>>
>>> ___microclang.c___
>>> #include "microclang.h"
>>> const char* libraryString = "library_pointer";
>>>
>>> CXSourceRange_ clang_getArbitraryRange_()
>>> { CXSourceRange_ range = {0};
>>> range.ptr_data[0] = (void*)libraryString;
>>> return range;
>>> }
>>>
>>> int clang_getRangeEnd_(CXSourceRange_ range)
>>> { // Special decoding for CXSourceLocations for CXLoadedDiagnostics.
>>> if ((uintptr_t)range.ptr_data[0] & 0x1)
>>> { return 0; }
>>> else
>>> { return 1; }
>>> }
>>>
>>>
>>>
>>>
>>> ___test.c___
>>> #include <stdio.h>
>>> #include "microclang.h"
>>> const char* localString = "local_pointer";
>>>
>>> void test( CXSourceRange_ range, char *note )
>>> { int result = clang_getRangeEnd_(range);
>>> if(result == 0)
>>> { printf("That failed (%s)\n", note); }
>>> else
>>> { printf("That worked (%s)\n", note); }
>>> }
>>>
>>> int main()
>>> { CXSourceRange_ range1 = clang_getArbitraryRange_();
>>> test(range1, "library string");
>>>
>>> CXSourceRange_ range2 = {0};
>>> range2.ptr_data[0] = (void*)localString;
>>> test(range2, "local string");
>>> }
>>>
>>>
>>>
>>> ___Makefile___
>>> default: clean static shared
>>>
>>> clean:
>>> rm -f *so *App
>>> @echo
>>>
>>> shared:
>>> clang -g -o libmicroclang.so -shared -fPIC microclang.c
>>> clang -g -o sharedApp test.c -L. -lmicroclang
>>> LD_LIBRARY_PATH=. ./sharedApp
>>> @echo
>>>
>>> static:
>>> clang -g -o staticApp test.c microclang.c
>>> ./staticApp
>>> @echo
>>>
>>>
>>>
>>> Now running...
>>> $ make > report
>>>
>>> gives...
>>> ___report___
>>> rm -f *so *App
>>>
>>> clang -g -o staticApp test.c microclang.c
>>> ./staticApp
>>> That worked (library string)
>>> That worked (local string)
>>>
>>> clang -g -o libmicroclang.so -shared -fPIC microclang.c
>>> clang -g -o sharedApp test.c -L. -lmicroclang
>>> LD_LIBRARY_PATH=. ./sharedApp
>>> That failed (library string)
>>> That worked (local string)
>>>
>>>
>>> Further simplification dealing *only* with strings (see attached sharedLibString.zip)
>>> (also attached is clang3.zip as a step along the way)
>>>
>>> ___microclang.c___
>>> typedef unsigned uintptr_t;
>>> const char* myLibraryString = "library_pointer";
>>>
>>> const char * lib_getLibraryString()
>>> { return myLibraryString;
>>> }
>>>
>>> int lib_testString( const char *aString )
>>> { unsigned test = (uintptr_t)aString & 0x1;
>>> printf("\n test=%d, aString-->%d\n", test, (uintptr_t)aString);
>>> if (test)
>>> { return 0; }
>>> else
>>> { return 1; }
>>> }
>>>
>>>
>>> ___test.c___
>>> #include <stdio.h>
>>> int lib_testString( const char *aString );
>>> const char *lib_getLibraryString();
>>> const char *localString = "local_pointer";
>>>
>>> void test( int result, char *note )
>>> { if(result == 0)
>>> { printf("That failed (%s)\n", note); }
>>> else
>>> { printf("That worked (%s)\n", note); }
>>> }
>>>
>>> int main()
>>> { const char * libraryString = lib_getLibraryString();
>>> test(lib_testString(libraryString), "library string");
>>>
>>> test(lib_testString(localString), "local string");
>>> }
>>>
>>>
>>> $ make > report
>>>
>>> ___report___
>>> rm -f *so *App
>>>
>>> clang -g -o staticApp test.c microclang.c
>>> ./staticApp
>>>
>>> test=0, aString-->4196150
>>> That worked (library string)
>>>
>>> test=0, aString-->4196068
>>> That worked (local string)
>>>
>>> clang -g -o libmicroclang.so -shared -fPIC microclang.c
>>> clang -g -o sharedApp test.c -L. -lmicroclang
>>> LD_LIBRARY_PATH=. ./sharedApp
>>>
>>> test=1, aString-->-792512599
>>> That failed (library string)
>>>
>>> test=0, aString-->4196484
>>> That worked (local string)
>>>
>>>
>>> cheers -ben
>>>
>>> <sharedLibString.zip><clang3.zip>
>>
>>
>>
>>
>>
>> --
>> _,,,^..^,,,_
>> best, Eliot
>>
>>
>>
>> --
>> _,,,^..^,,,_
>> best, Eliot
>
March 6, 2018
Buffer overriuns detected by fortify in the AioPlugin (was Re: Pharo6 with Ubuntu and OSSubprocess/threaded heartbeat crashes and problems
by Eliot Miranda
Hi,
aioEnable et al should really check the fd argument against FD_SETSIZE
and answer error codes that get tested in clients. See two messages below:
On Tue, Mar 6, 2018 at 2:49 AM, Sabine Manaa <manaa.sabine(a)gmail.com> wrote:
> Hi,
>
> I can report the following:
>
> The problem with the Buffer overflow remains also with OSProcess.
> Also with the normal vm (https://get.pharo.org ).
>
> Summary: I have buffer overflow crashes with my application on Linux.
> The same code runs without problems on MacOS and on Windows.
> I have the same test data/database and do exactly the same.
>
> The problem occurs only after calling several times OSProcess/OSSubprocess.
> This is the reason why I first had a suspicion that OSSubprocess is
> responsible for the crashes.
>
> Can anyone tell me how to proceed to find the reason for the buffer
> overflow?
> There is no PharoDebug.log
>
> Help is very appreciated!
>
> This is the message when terminating:
>
> root@Pharo_ubuntu_16:/spf/build# ./pharo Pharo-Productive-SPF.image
> --no-quit
>
> SmalltalkImageInstanceID class>>startUp*** buffer overflow detected ***:
> /spf/build/pharo-vm/lib/pharo/5.0-201707201942/pharo terminated
>
> ======= Backtrace: =========
>
> /lib/i386-linux-gnu/libc.so.6(+0x67377)[0xf75b9377]
>
> /lib/i386-linux-gnu/libc.so.6(__fortify_fail+0x68)[0xf7649708]
>
> /lib/i386-linux-gnu/libc.so.6(+0xf58f8)[0xf76478f8]
>
> /lib/i386-linux-gnu/libc.so.6(+0xf75fa)[0xf76495fa]
>
> /spf/build/pharo-vm/lib/pharo/5.0-201707201942/pharo(aioEnab
> le+0x31)[0x80c9811]
>
> /spf/build/pharo-vm/lib/pharo/5.0-201707201942/pharo[0x81215ee]
>
> [0x90010e0]
>
> [0x90ad2d0]
>
> [0x90db8b4]
>
> [0x90ad24a]
>
> [0x900be6b]
>
> [0x900b04d]
>
> [0x9007a3e]
>
> [0x9004247]
>
> [0x9004572]
>
> [0x9001020]
>
> [0xa98c524]
>
> [0xb1755db]
>
> [0x9003efc]
>
> [0x9001020]
>
> [0xdcb558c]
>
> [0xb0d4d95]
>
> [0x9000ff0]
>
> ======= Memory map: ========
>
> 08048000-08164000 r-xp 00000000 00:1b 1183256
> /spf/build/pharo-vm/lib/pharo/5.0-201707201942/pharo
>
> 08164000-08165000 r--p 0011b000 00:1b 1183256
> /spf/build/pharo-vm/lib/pharo/5.0-201707201942/pharo
>
> 08165000-08170000 rw-p 0011c000 00:1b 1183256
> /spf/build/pharo-vm/lib/pharo/5.0-201707201942/pharo
>
> 08170000-081a7000 rw-p 00000000 00:00 0
>
> 08fdd000-08ffe000 rw-p 00000000 00:00 0
> [heap]
>
> 09000000-09100000 rwxp 00000000 00:00 0
>
> 09100000-11200000 rw-p 00000000 00:00 0
>
> f552e000-f554a000 r-xp 00000000 00:1b 8244
> /lib/i386-linux-gnu/libgcc_s.so.1
>
> f554a000-f554b000 rw-p 0001b000 00:1b 8244
> /lib/i386-linux-gnu/libgcc_s.so.1
>
> f554b000-f684c000 rw-p 00000000 00:00 0
>
> f684c000-f684f000 r-xp 00000000 00:1b 1183242
> /spf/build/pharo-vm/lib/pharo/5.0-201707201942/JPEGReaderPlugin.so
>
> f684f000-f6850000 r--p 00002000 00:1b 1183242
> /spf/build/pharo-vm/lib/pharo/5.0-201707201942/JPEGReaderPlugin.so
>
> f6850000-f6851000 rw-p 00003000 00:1b 1183242
> /spf/build/pharo-vm/lib/pharo/5.0-201707201942/JPEGReaderPlugin.so
>
> f6851000-f68b2000 r-xp 00000000 00:1b 1183230
> /spf/build/pharo-vm/lib/pharo/5.0-201707201942/libssl.so.1.0.0
>
> f68b2000-f68b3000 ---p 00061000 00:1b 1183230
> /spf/build/pharo-vm/lib/pharo/5.0-201707201942/libssl.so.1.0.0
>
> f68b3000-f68b5000 r--p 00061000 00:1b 1183230
> /spf/build/pharo-vm/lib/pharo/5.0-201707201942/libssl.so.1.0.0
>
> f68b5000-f68b9000 rw-p 00063000 00:1b 1183230
> /spf/build/pharo-vm/lib/pharo/5.0-201707201942/libssl.so.1.0.0
>
> f68b9000-f6a7b000 r-xp 00000000 00:1b 1183239
> /spf/build/pharo-vm/lib/pharo/5.0-201707201942/libcrypto.so.1.0.0
>
> f6a7b000-f6a7c000 ---p 001c2000 00:1b 1183239
> /spf/build/pharo-vm/lib/pharo/5.0-201707201942/libcrypto.so.1.0.0
>
> f6a7c000-f6a8c000 r--p 001c2000 00:1b 1183239
> /spf/build/pharo-vm/lib/pharo/5.0-201707201942/libcrypto.so.1.0.0
>
> f6a8c000-f6a93000 rw-p 001d2000 00:1b 1183239
> /spf/build/pharo-vm/lib/pharo/5.0-201707201942/libcrypto.so.1.0.0
>
> f6a93000-f6a96000 rw-p 00000000 00:00 0
>
> f6a96000-f6a9b000 r-xp 00000000 00:1b 1183249
> /spf/build/pharo-vm/lib/pharo/5.0-201707201942/SqueakSSL.so
>
> f6a9b000-f6a9c000 r--p 00004000 00:1b 1183249
> /spf/build/pharo-vm/lib/pharo/5.0-201707201942/SqueakSSL.so
>
> f6a9c000-f6a9d000 rw-p 00005000 00:1b 1183249
> /spf/build/pharo-vm/lib/pharo/5.0-201707201942/SqueakSSL.so
>
> f6a9d000-f6ab1000 r-xp 00000000 00:1b 7925
> /lib/i386-linux-gnu/libresolv-2.23.so
>
> f6ab1000-f6ab2000 ---p 00014000 00:1b 7925
> /lib/i386-linux-gnu/libresolv-2.23.so
>
> f6ab2000-f6ab3000 r--p 00014000 00:1b 7925
> /lib/i386-linux-gnu/libresolv-2.23.so
>
> f6ab3000-f6ab4000 rw-p 00015000 00:1b 7925
> /lib/i386-linux-gnu/libresolv-2.23.so
>
> f6ab4000-f6ab6000 rw-p 00000000 00:00 0
>
> f6ab6000-f6abb000 r-xp 00000000 00:1b 7931
> /lib/i386-linux-gnu/libnss_dns-2.23.so
>
> f6abb000-f6abc000 r--p 00004000 00:1b 7931
> /lib/i386-linux-gnu/libnss_dns-2.23.so
>
> f6abc000-f6abd000 rw-p 00005000 00:1b 7931
> /lib/i386-linux-gnu/libnss_dns-2.23.so
>
> f6abd000-f6c05000 rw-p 00000000 00:00 0
>
> f6c05000-f6c2e000 r-xp 00000000 00:1b 8373
> /lib/i386-linux-gnu/libpng12.so.0.54.0
>
> f6c2e000-f6c2f000 r--p 00028000 00:1b 8373
> /lib/i386-linux-gnu/libpng12.so.0.54.0
>
> f6c2f000-f6c30000 rw-p 00029000 00:1b 8373
> /lib/i386-linux-gnu/libpng12.so.0.54.0
>
> f6c30000-f6c49000 r-xp 00000000 00:1b 8362
> /lib/i386-linux-gnu/libz.so.1.2.8
>
> f6c49000-f6c4a000 r--p 00018000 00:1b 8362
> /lib/i386-linux-gnu/libz.so.1.2.8
>
> f6c4a000-f6c4b000 rw-p 00019000 00:1b 8362
> /lib/i386-linux-gnu/libz.so.1.2.8
>
> f6c4b000-f6cf6000 r-xp 00000000 00:1b 8395
> /usr/lib/i386-linux-gnu/libfreetype.so.6.12.1
>
> f6cf6000-f6cfa000 r--p 000aa000 00:1b 8395
> /usr/lib/i386-linux-gnu/libfreetype.so.6.12.1
>
> f6cfa000-f6cfb000 rw-p 000ae000 00:1b 8395
> /usr/lib/i386-linux-gnu/libfreetype.so.6.12.1
>
> f6cfb000-f6d02000 r-xp 00000000 00:1b 1183229
> /spf/build/pharo-vm/lib/pharo/5.0-201707201942/FT2Plugin.so
>
> f6d02000-f6d03000 r--p 00006000 00:1b 1183229
> /spf/build/pharo-vm/lib/pharo/5.0-201707201942/FT2Plugin.so
>
> f6d03000-f6d04000 rw-p 00007000 00:1b 1183229
> /spf/build/pharo-vm/lib/pharo/5.0-201707201942/FT2Plugin.so
>
> f6d04000-f6d0f000 r-xp 00000000 00:1b 7934
> /lib/i386-linux-gnu/libnss_files-2.23.so
>
> f6d0f000-f6d10000 r--p 0000a000 00:1b 7934
> /lib/i386-linux-gnu/libnss_files-2.23.so
>
> f6d10000-f6d11000 rw-p 0000b000 00:1b 7934
> /lib/i386-linux-gnu/libnss_files-2.23.so
>
> f6d11000-f6d38000 rw-p 00000000 00:00 0
>
> f6d38000-f6d39000 ---p 00000000 00:00 0
>
> f6d39000-f7539000 rw-p 00000000 00:00 0
> [stack:21188]
>
> f7539000-f753b000 r-xp 00000000 00:1b 7968
> /usr/lib/i386-linux-gnu/gconv/MACINTOSH.so
>
> f753b000-f753c000 r--p 00001000 00:1b 7968
> /usr/lib/i386-linux-gnu/gconv/MACINTOSH.so
>
> f753c000-f753d000 rw-p 00002000 00:1b 7968
> /usr/lib/i386-linux-gnu/gconv/MACINTOSH.so
>
> f753d000-f7544000 r--s 00000000 00:1b 7977
> /usr/lib/i386-linux-gnu/gconv/gconv-modules.cache
>
> f7544000-f754a000 r-xp 00000000 00:1b 1183240
> /spf/build/pharo-vm/lib/pharo/5.0-201707201942/vm-sound-OSS.so
>
> f754a000-f754b000 r--p 00005000 00:1b 1183240
> /spf/build/pharo-vm/lib/pharo/5.0-201707201942/vm-sound-OSS.so
>
> f754b000-f754c000 rw-p 00006000 00:1b 1183240
> /spf/build/pharo-vm/lib/pharo/5.0-201707201942/vm-sound-OSS.so
>
> f754c000-f754e000 r-xp 00000000 00:1b 1183257
> /spf/build/pharo-vm/lib/pharo/5.0-201707201942/vm-display-null.so
>
> f754e000-f754f000 r--p 00001000 00:1b 1183257
> /spf/build/pharo-vm/lib/pharo/5.0-201707201942/vm-display-null.so
>
> f754f000-f7550000 rw-p 00002000 00:1b 1183257
> /spf/build/pharo-vm/lib/pharo/5.0-201707201942/vm-display-null.so
>
> f7550000-f7552000 rw-p 00000000 00:00 0
>
> f7552000-f7702000 r-xp 00000000 00:1b 7921
> /lib/i386-linux-gnu/libc-2.23.so
>
> f7702000-f7704000 r--p 001af000 00:1b 7921
> /lib/i386-linux-gnu/libc-2.23.so
>
> f7704000-f7705000 rw-p 001b1000 00:1b 7921
> /lib/i386-linux-gnu/libc-2.23.so
>
> f7705000-f7708000 rw-p 00000000 00:00 0
>
> f7708000-f775b000 r-xp 00000000 00:1b 7917
> /lib/i386-linux-gnu/libm-2.23.so
>
> f775b000-f775c000 r--p 00052000 00:1b 7917
> /lib/i386-linux-gnu/libm-2.23.so
>
> f775c000-f775d000 rw-p 00053000 00:1b 7917
> /lib/i386-linux-gnu/libm-2.23.so
>
> f775d000-f7776000 r-xp 00000000 00:1b 7920
> /lib/i386-linux-gnu/libpthread-2.23.so
>
> f7776000-f7777000 r--p 00018000 00:1b 7920
> /lib/i386-linux-gnu/libpthread-2.23.so
>
> f7777000-f7778000 rw-p 00019000 00:1b 7920
> /lib/i386-linux-gnu/libpthread-2.23.so
>
> f7778000-f777a000 rw-p 00000000 00:00 0
>
> f777a000-f777d000 r-xp 00000000 00:1b 7923
> /lib/i386-linux-gnu/libdl-2.23.so
>
> f777d000-f777e000 r--p 00002000 00:1b 7923
> /lib/i386-linux-gnu/libdl-2.23.so
>
> f777e000-f777f000 rw-p 00003000 00:1b 7923
> /lib/i386-linux-gnu/libdl-2.23.so
>
> f777f000-f7780000 rw-p 00000000 00:00 0
>
> f7780000-f7781000 r-xp 00000000 00:00 0
> [vdso]
>
> f7781000-f77a4000 r-xp 00000000 00:1b 7919
> /lib/i386-linux-gnu/ld-2.23.so
>
> f77a4000-f77a5000 r--p 00022000 00:1b 7919
> /lib/i386-linux-gnu/ld-2.23.so
>
> f77a5000-f77a6000 rw-p 00023000 00:1b 7919
> /lib/i386-linux-gnu/ld-2.23.so
>
> ffc55000-ffcd1000 rw-p 00000000 00:00 0
> [stack]
>
> ./pharo: line 11: 14639 Aborted "$DIR"/"pharo-vm/pharo"
> --nodisplay "$@"
>
>
On Tue, Mar 6, 2018 at 5:26 AM, Henrik Sperre Johansen <
henrik.s.johansen(a)veloxit.no> wrote:
> Seems to me aioEnable somehow triggers this.
> It maintains buffers of size FD_SETSIZE (1024 on Linux)*, so an fd
> parameter** >= that, could probably trigger such an error.
> Maybe you could put a halt in whichever method in OSSubprocess/OSProcess
> calls the primitive triggered when condition occurs, to see if that is the
> cause?
> If so, identifying *why* you end up with fd's that high (which, afaik,
> isn't
> normal), will probably lead to a workaround/solution...
>
> Cheers,
> Henry
>
> *
> https://github.com/pharo-project/pharo-vm/blob/e0ce2d9d78c3c
> 7b37bbc12cd8730c6a15f1f057c/opensmalltalk-vm/platforms/unix/vm/aio.c
> **
> https://github.com/pharo-project/pharo-vm/blob/c50dec02d2875
> de56c84d11889c78484e2d5cda8/mc/VMConstruction-Plugins-
> AioPlugin.package/UnixAioPlugin.class/instance/primitiveAioEnable.st
>
> --
> Sent from: http://forum.world.st/Pharo-Smalltalk-Developers-f1294837.html
>
_,,,^..^,,,_
best, Eliot
March 6, 2018
Re: [Pharo-dev] [ANN] 64 bits support preview
by Cyril Ferlicot D.
Le 06/03/2018 à 04:19, Mariano Martinez Peck a écrit :
> Hi guys,
>
Hi!
> Thanks for Guillermo Polito we now have 64 bits support for
> OSSubprocess. You can see the required changes in this PR [1].
Cool :)
I made a
> branch called `support64bits` so that you can help us test it even if CI
> said it was good [2]. If you do test it and come back to us with the
> results, please tell us which OS you used.Â
>
> To install from the branch:
>
> Metacello new
> Â configuration: 'OSSubprocess';
> Â repository: 'github://marianopeck/OSSubprocess:support64bits/repository';
> version: #stable;
> load.
>
>
> Roadmap: Current release is v0.2.5. So I will let that release for Pharo
> <= 5.0. I will make a new release with the Pharo 64 bits and call it
> v0.3. That release should be used for Pharo 6.x. Once v0.3 is out, I
> will make a new release v0.4 with some changes I wanted to do since a
> loooong time and its a small refactor to minimize OSSubprocess
> dependency on OSProcesses primitives (at VM side). This is thanks
> to Holger Freyther and Alistair Grant [3]. As that requires a new VM,
> then v0.4 should be used in Pharo >= 7.0.
>
If it brings an incompatibility with older Pharo, maybe it should be a
major release instead of a minor?
> Cheers,Â
>
>
> [1]Â https://github.com/marianopeck/OSSubprocess/pull/30
> [2]Â https://travis-ci.org/guillep/OSSubprocess/builds/349280174
> [3]Â https://github.com/pharo-project/pharo-vm/pull/142
>
> --
> Mariano
> http://marianopeck.wordpress.com
--
Cyril Ferlicot
https://ferlicot.fr
March 6, 2018
Metacello locking system
by Cyril Ferlicot D.
> Cyril,
>
> For development I tend to use Metacello locking instead of hard-wired
> dependencies in the BaselineOf and that works very well --- it
> completely avoids the need to edit a baseline for development purposes
> and this approach works really well for me ... perhaps we can discuss
> this in more detail in a separate thread or even private email? This all
> seems to be more complicated for you guys than has been my experience
> and of course you guys _appear_ to be completely ignoring the Metacello
> locking feature so I'm curious why ...
>
> Dale
>
Hi Dale,
As asked I start a new thread.
I can see some possible reasons I do not use Metacello locking feature.
1) I did not understand well enough what it was
2) We have a way to work different and mine might be incompatible with
the lock feature
3) I just did not see how it could help me
To know which one is the reason I'll present you a little what I
understood of the lock feature and how I usually work and you'll be able
to advise me.
For the lock feature:
If I understood correctly it is a feature allowing to lock a certain
version of a project in the Metacello registry. For example if I load
Seaside 3.1, lock it and then install a project having Seaside 3.2 as
dependency, the lock will block the update of Seaside.
Now how do I usually work:
Let's take the example of MaterialDesignLite that I maintain.
The master branch is a branch that should only contains stable MDL
versions. Ideally I would like for each commit of this branch to be
tagged with a semantic versionning tag.
The development happen in the development branch and new features are
merged into this branch before making it to master.
In general I prefer to have stricter dependencies in master than in
development. So the baseline in the development branch can be different
than in master.
For all my projects I try to have a Jenkins building Pharo images for at
least master and development, and potentially big feature branches
before they are merged. The Jenkins also test the images.
Then when I need to work on something, I download the Jenkins archive of
the corresponding branch, double click on the image (some setting are
then loaded) and I'm ready to develop because Jenkins and my settings
have done all the setup.
I try to keep my Jenkins script as simple as possible for the loading.
Ideally I like to have something like this:
./pharo $PROJECT_NAME.image eval --save "
Metacello new
baseline: #MaterialDesignLite;
githubUser: 'DuneSt' project: 'MaterialDesignLite' commitish:
'$VERSION' path: 'src';
onWarningLog;
load.
".
With this way to work, I do not really see how locks can help me.
Because I don't want to have to manage possible versions I accept from
all the dependencies in **development**. I want to accept the maximum of
update and when it breaks either I edit the code to work with the new
version of the dependency or I fix the dependency version because it
will be too much work.
Just to explain why I don't want to manage by hand all the dependencies
version in development: I work on a project that at one time had more
than 70 dependencies (transitively).
Now that you know what I understood of the lock feature and that you
know my way to work: Did I miss something on the lock mechanism? Do you
think it can help me during my development? If yes, how would you
include it in my development workflow?
Thank you for the time you spend to help us improve our way to work!
--
Cyril Ferlicot
https://ferlicot.fr
March 6, 2018
Re: [Pharo-dev] [Ann] Commander shortcuts in Settings Browser
by Cyril Ferlicot D.
Le 06/03/2018 à 17:05, Denis Kudriashov a écrit :
> Hi.
>
> With latest version of Commander and Calypso we will have all shortcuts
> explorable and configurable in Settings Browser:
>
>
> â
> Currently it uses command class name and class comment for presentation.
> We can improve it in future if necessary.
> In addition you can add single shortcut to your own application
> settings. For example:
>
> MyApp class>>appSettingsOn: aBuilder
> Â Â <systemsettings>
>
>
> Â Â ann := ClySpawnFullBrowserCommand classAnnotationAt:
> #browserShortcutActivation.
>
> Â Â (ann buildSettingNodeOn: aBuilder)
>
> Â Â Â Â label: 'My app shortcut';
>
> Â Â Â Â description: 'This command opens browser'
>
>
> Shortcut settings are persisted as all other settings. Only redefined
> shortcuts are stored into the file.
>
> This version also allows to add commands into the world menu and world
> shortcuts. Just use CmdWorldMenuContext for command annotations:
>
> CmdOpenFamilyBookCommand class>>worldMenuActivation
> Â <classAnnotation>
> Â ^CmdContextMenuCommandActivation byRootGroupItemFor:
> CmdWorldMenuContextÂ
>
>
> CmdOpenFamilyBookCommand class>>globalShortcutActivation
> Â <classAnnotation>
> Â ^CmdShortcutCommandActivation by: $o meta, $f meta for:
> CmdWorldMenuContextÂ
>
> (CmdOpenFamilyBookCommand is a command from Commander-Examples package).
>
> Nice detail: all shortcuts are updated immediately when you modify
> annotations either from settings or programmatically from browser.Â
>
> Now pull request for Pharo 7
> <https://github.com/pharo-project/pharo/pull/1037> is waiting
> integration. Soon it will be inside.
>
> Best regards,
> Denis
Hi!
This is really cool :)
Indeed, for the Pharo release it would be much much better to have a
titles instead of method selectors to display.
Also, maybe we could have a way to group shortcut settings. Because
latter if Commander is more used, we should have "Editor shortcuts",
"Debugger shortcuts", "Iceberg shortcuts"...
Thank you for the work!
--
Cyril Ferlicot
https://ferlicot.fr
March 6, 2018
Re: [Pharo-dev] Released versions in Pharo Bootstrap
by Dale Henrichs
On 03/06/2018 06:21 AM, Guillermo Polito wrote:
> Hi Dale!
>
> On Mon, Mar 5, 2018 at 8:07 PM, Dale Henrichs
> <dale.henrichs(a)gemtalksystems.com
> <mailto:dale.henrichs@gemtalksystems.com>> wrote:
>
>
>
> On 03/05/2018 09:07 AM, Guillermo Polito wrote:
>
> On the other side, there is the fact that Metacello baselines
> are so far nice to describe release project dependencies, but
> they are not so nice to describe subprojects/development
> dependencies that may get edited along with the parent
> project. Kind of what we used to do with #bleedingEdge. I feel
> this is a complex problem, that not even SBT or maven that are
> there since years are capable of solving nicely... Tode and
> Iceberg metacello integration try to solve this problem by
> "ignoring the dependency and using the loaded repository" but
> this may not be successful either...
>
>
> I have not been following this thread in detail, but this comment
> leads me to believe that the issue that you guys are running into
> has to do with trying to ongoing distributed development across
> multiple projects and multiple platform versions ...
>
>
> I don't know exactly the case of Calypso, but I don't think it is
> being maintained for other than latest Pharo 7.
>
> The Calypso case as I understand it is that it has a couple of
> dependencies
>
> Â Calypso
> Â Â | - commander
> Â Â | - class annotations
>
> The three projects are hosted in different repositories, but Denis
> wants to work on "bleeding edge" of the three of them at the same time.
> Then when he loads calypso in a new image, if he just uses a baseline
> he will load specific versions of the dependencies and not the latest
> ones...
>
> I think this is the particular use case for locking, isn't it?
Yes this is exactly the use case for locking.
>
>
> If so then I think that the moral equivalent of #bleedingEdge
> should be a branch structure along the lines of:
>
> Â master branch --- the project release that is known to work on
> all supported platform versions.
> Â dev_pharo6Â Â Â Â Â --- the current #bleedingEdge for Pharo6.0
> Â dev_pharo7Â Â Â Â Â --- the current #bleedingEdge for Pharo7.0
>
> In an image where you want to use the dev_pharo7 for a project,
> you do a Metacello lock on github://xxxx/xxx:dev_pharo7/src BEFORE
> loading the project ... if there are multiple projects that need
> to all coordinate development then you follow the same convention
> and use a Metacello lock for each of the projects ... Executing
> expressions to lock projects is tedious to use and manage.
>
>
> It is not that complicated I think ^^.
I have found that "load specifications" are much easier to work with
than "load expressions", similar to the way class definitions are
superior to smalltalk code for creating classes, one can reason about a
"load specification" for example it is possible to merge two load
specifications to produce a single load specification whereas this kind
of thing is not possible if you are given two arbitrary Smalltalk
expressions to merge ...
>
>
> In tODE I started using project entries[1] that are downloaded to
> disk and shared by multiple images that allow a developer to
> specify what branch/tag/commit they are interested in using ...
> each image that is started up in a "cluster" uses the project
> entry to do a Metacello lock on the project "automagically"... if
> there is a series of projects where the developer needs to use
> dev_pharo6 they can arrange to edit the project entry to reflect
> the proper branches for the set of projects that need special
> _development_ treatment ... these .ston files can be shared
> amongst groups of developers ... of course once the local clones
> of these projects are on the local disk, then it is up to the
> developer (or a set of scripts) to periodically update to the
> latest development version of each of the projects ...
>
>
> YES. This gets closer to what I want. What I don't like from locking
> is that I have to:
> Â - know in advance all the projects (+ dependencies) I want to
> develop (specially if I'm not the main project developer)
> Â - know where they are stored in the disk
> Â - do an explicit locking on each of them
Haha, and that is why I created the project entries ("load
specifications") in the first place:)
>
> There is a missing abstraction that probably you get in Rowan or tODE
> with that project entry specification?
Yes, tODE project entries are an implementation that I have been using
for several years now and over time I have found some limitations in the
tODE implementation that I am attempting to correct in the Rowan
implementation ... The Rowan spec I originally referenced[1] is actually
"load expression" that is the equivalent of a Gofer load expression ...
I have classes for a Metacello-based "load expression" but I haven't
gotten to the point where I have integrated Metacello into Rowan.
[1] https://github.com/dalehenrich/Rowan/blob/master/specs/Rowan.ston
> Because the reality is that personally I'm starting a new image every
> a couple of days, and having a specification for it would be much
> easier than locking here and there...
> I want just to specify "My project X at development time requires Y,
> Z, H and Z and H are subprojects".
> Then, he should realize he should lock Z and H for me.
Yes this is exactly the problem I was dealing with in the early
implementation of tODE and with project entries.
You might want to look again at my FAST talk on "Dangerous Liaisons:
Smalltalk, Files, And Git"[2] as I talk about "image clusters" that
share a collection of project entries and the fact that each image needs
to be able to have a private set of "project entries" ... now that you
are experiencing the pain my talk might make more sense:)
... also I am thinking in terms of an "image specification" that is made
up of a collection of Rowan "load specifications" ... Rowan has the
notion of a Project Set and it is possible to load a set of projects. So
it is not that big of a stretch to imagine a .ston image specification
(collection load specifications) can be passed around and then
customized if needed by individual developers and then project set can
be used to create the image or images ....
[2] https://www.youtube.com/watch?v=Ejmqs0xLvSk
>
> Now, If subprojects Z and H are in the same repository as X, that
> should not be complicated :).
> In Denis' case it could be more complicated...
Right but once Denis gets his dependent projects cloned to local disk he
can update each of the projects on his schedule by pulling later
versions of the projects as he goes ... I lean to disk-based clones that
can be shared by multiple images (an "image cluster") ... tODE does not
have the notion of image clusters, but I do have sets of images that are
sharing a common set of projects where a number of those projects are on
development-specific branches so Iknow that this concept makes sense ...
>
>
> To share a specific configuration of development git repos, you
> need to know that SHA anyway, so the image can produce a
> collection of project entries with the SHA of the commit and those
> project entries can be included in a bug report ...
>
> For Rowan[2], I am using a "load specification"[3], which is a
> second generation project entry .... the Rowan work is still
> evolving ...
>
> Anyway, I think that putting the control of what is being used for
> development completely in the developers hands and avoiding the
> need to edit baselines is a good thing ... and I think that the
> idea of having specifications that are shared by a cluster of
> images is a good way to go ...
>
> Dale
>
> [1]
> https://github.com/GsDevKit/GsDevKit_home/blob/gh-pages/Seaside32.ston
> <https://github.com/GsDevKit/GsDevKit_home/blob/gh-pages/Seaside32.ston>
> [2] https://github.com/dalehenrich/Rowan
> <https://github.com/dalehenrich/Rowan>
> [3]
> https://github.com/dalehenrich/Rowan/blob/master/specs/Rowan.ston
> <https://github.com/dalehenrich/Rowan/blob/master/specs/Rowan.ston>
>
>
>
>
> --
>
>
>
> Guille Polito
>
> Research Engineer
>
> Centre de Recherche en Informatique, Signal et Automatique de Lille
>
> CRIStAL - UMR 9189
>
> French National Center for Scientific Research - _http://www.cnrs.fr_
>
>
> *Web:* _http://guillep.github.io_
>
> *Phone: *+33 06 52 70 66 13
>
March 6, 2018
[Pharo 7.0-dev] Build #659: 21507-remove-SugsSmalltalkEditorContext
by ci-pharo-ci-jenkins2@inria.fr
There is a new Pharo build available!
The status of the build #659 was: SUCCESS.
The Pull Request #1036 was integrated: "21507-remove-SugsSmalltalkEditorContext"
Pull request url: https://github.com/pharo-project/pharo/pull/1036
Issue Url: https://pharo.fogbugz.com/f/cases/21507
Build Url: https://ci.inria.fr/pharo-ci-jenkins2/job/Test%20pending%20pull%20request%2…
March 6, 2018
[Ann] Commander shortcuts in Settings Browser
by Denis Kudriashov
Hi.
With latest version of Commander and Calypso we will have all shortcuts
explorable and configurable in Settings Browser:
â
Currently it uses command class name and class comment for presentation. We
can improve it in future if necessary.
In addition you can add single shortcut to your own application settings.
For example:
MyApp class>>appSettingsOn: aBuilder
<systemsettings>
ann := ClySpawnFullBrowserCommand classAnnotationAt:
#browserShortcutActivation.
(ann buildSettingNodeOn: aBuilder)
label: 'My app shortcut';
description: 'This command opens browser'
Shortcut settings are persisted as all other settings. Only redefined
shortcuts are stored into the file.
This version also allows to add commands into the world menu and world
shortcuts. Just use CmdWorldMenuContext for command annotations:
CmdOpenFamilyBookCommand class>>worldMenuActivation
<classAnnotation>
^CmdContextMenuCommandActivation byRootGroupItemFor: CmdWorldMenuContext
CmdOpenFamilyBookCommand class>>globalShortcutActivation
<classAnnotation>
^CmdShortcutCommandActivation by: $o meta, $f meta for:
CmdWorldMenuContext
(CmdOpenFamilyBookCommand is a command from Commander-Examples package).
Nice detail: all shortcuts are updated immediately when you modify
annotations either from settings or programmatically from browser.
Now pull request for Pharo 7
<https://github.com/pharo-project/pharo/pull/1037> is waiting integration.
Soon it will be inside.
Best regards,
Denis
March 6, 2018
Re: [Pharo-dev] [Pharo 7.0-dev] Build #657: 21491 Simplify #testAllButFirstNElements and #testAllButLastNElements
by Marcus Denker
> On 6 Mar 2018, at 16:04, ci-pharo-ci-jenkins2(a)inria.fr wrote:
>
> There is a new Pharo build available!
>
> The status of the build #657 was: FAILURE.
>
> The Pull Request #1024 was integrated: "21491 Simplify #testAllButFirstNElements and #testAllButLastNElements"
> Pull request url: https://github.com/pharo-project/pharo/pull/1024
>
> Issue Url: https://pharo.fogbugz.com/f/cases/21491
> Build Url: https://ci.inria.fr/pharo-ci-jenkins2/job/Test%20pending%20pull%20request%2…
I restarted the build and it was now green!
This actually contains more PRs...
21478 Improve ThreadSafeTranscript isSelfEvaluating (detail / githubweb)
20258 Fix to make recursive links work Add test for 20258 (detail / githubweb)
21483 Cleanup romanNumber and add test (detail / githubweb)
21491 Simplify testAllButFirstNElements, testAllButLastNElements (detail / githubweb)
21501 remove NautilusGroupAutoBuilder (detail / githubweb)
21506 add back two lost inspector extensions (detail / githubweb)
for 20258 Fix to make recursive links work:
------------------------------------------
This is work done with Benoit Verhaeghe to finally get meta-links work in deep "recursive" situations.
Imagine you want to do something even on methods like #new. But that something for sure will call
#new again in the code that you call...
With the PR, now a link that calls #new can be installed on Behavior>>#new:
link := MetaLink new
metaObject: [ Object new ];
level: 0.
(Behavior>>#new) ast link: link.
... and it does not lead to a recursion.
The "level: 0" means that we are only interested in base-level execution. Every time a link activates, the "level"
increases. E.g. if it is put to 1, the link would be active in the meta-level code itself.
You can inspect Behavior>>#new and see what kind of code we create at the bytecode level. This is of course slower than
just calling a method, so one should only use this mechanism if really needed, and we need to see if this can be optimised.
For now this does not take into account any process forking happening on the Meta Level, this needs to be analyzed in
the future (past versions just made sure the state is inherited).
But that should be a rare case and should make the whole thing more usable already.
Marcus
March 6, 2018