Building DMD on SmartOS
flamencofantasy via Digitalmars-d
digitalmars-d at puremagic.com
Thu Jun 25 14:03:34 PDT 2015
On Thursday, 25 June 2015 at 20:26:05 UTC, Jason King wrote:
> The first thing I would suggest running the program via truss
> and see if
> any calls to write() are returning EBADF.. If so, see what fd#
> is being
> passed (or if something is calling close() on fd1).
>
> On Thu, Jun 25, 2015 at 2:57 PM, flamencofantasy via
> Digitalmars-d < digitalmars-d at puremagic.com> wrote:
>
>> On Sunday, 17 May 2015 at 19:36:54 UTC, Joakim wrote:
>>
>>> On Tuesday, 5 May 2015 at 15:41:47 UTC, Joakim wrote:
>>>
>>>> On Tuesday, 5 May 2015 at 05:42:33 UTC, Kai Nacke wrote:
>>>>
>>>>> BTW: You can by-pass the Solaris ld by setting environment
>>>>> variable LD_ALTEXEC to the ld binary you want to use.
>>>>>
>>>>
>>>> Thanks for the tip: I set that to the binutils ld and got
>>>> almost all of druntime's tests to pass with a 64-bit binary.
>>>> I only had to comment out the additional druntime tests
>>>> having to do with exceptions. Maybe that's related to the
>>>> link error flamencofantasy pasted.
>>>>
>>>> I also tried running the phobos unit tests, but I got a ton
>>>> of link errors, seemingly for stuff that should be there.
>>>> I'll let someone else track those down.
>>>>
>>>
>>> Before I chuck this large SmartOS VM on my external backup, I
>>> thought I'd
>>> take another shot at getting the phobos tests running.
>>> Turned out to be
>>> pretty easy and I started hacking around the test failures
>>> until it got too
>>> tedious, when the std.path tests wouldn't run because "Memory
>>> allocation
>>> failed."
>>> Here's the last patch I used:
>>>
>>> https://gist.github.com/joakim-noah/6094789851ba1db1170b
>>>
>>> Some notes:
>>>
>>> - I disabled the tests for std.datetime and std.parallelism
>>> in the test
>>> runner because they were both failing somewhere.
>>> - All it took to get the phobos test runner linked was to add
>>> all the
>>> additional necessary libraries that curl needed on Solaris to
>>> posix.mak.
>>> - getcwd will not accept a zero size on Solaris.
>>> - Solaris seems to have similar issues to Android with
>>> formatting NaN and
>>> hex in std.format.
>>>
>>
>> Hello,
>>
>> This is my test program;
>>
>> import std.stdio;
>>
>> void main()
>> {
>> try
>> {
>> writeln("Hello");
>> }
>> catch (Exception e)
>> {
>> import core.stdc.stdio;
>> printf(e.msg.ptr);
>> }
>> }
>>
>>
>> The output is;
>> Bad file number
>>
>> It has to do with stdout not being valid but I am unable to
>> figure out why
>> by reading the source code.
>> I am new to unix in general and SmartOS/Solaris in particular.
>>
>> Long story short my fairly large project which builds and runs
>> flawlessly
>> on Windows and Linux, compiles successfully on SmartOS with no
>> warnings but
>> any invocation of writeln (and relatives) throws the exception
>> above.
>> If anyone is willing to help I have a smart zone with ssh
>> access I can
>> provide you with so you can play.
>>
>> Thanks!
Thanks, I've been trying truss and gdb but I wasn't able to spot
anything useful.
The exception is checked and thrown in user space so I don't
think truss sees anything.
But here is the full truss dump of the program above;
[root at smartDmachine ~]# truss ./main
execve("main", 0xFFFFFD7FFFDFFC88, 0xFFFFFD7FFFDFFC98) argc = 1
sysinfo(SI_MACHINE, "i86pc", 257) = 6
mmap(0x00000000, 56, PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0xFFFFFD7FFF390000
mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0xFFFFFD7FFF380000
mmap(0x00000000, 4096, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0xFFFFFD7FFF370000
mmap(0x00000000, 4096, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0xFFFFFD7FFF360000
memcntl(0xFFFFFD7FFF398000, 96976, MC_ADVISE, MADV_WILLNEED, 0,
0) = 0
mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0xFFFFFD7FFF350000
memcntl(0x00400000, 6040, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0
resolvepath("/lib/amd64/ld.so.1", "/lib/amd64/ld.so.1", 1023) = 18
getcwd("/root", 1018) = 0
resolvepath("/root/main", "/root/main", 1023) = 10
stat("/root/main", 0xFFFFFD7FFFDFF960) = 0
open("/var/ld/64/ld.config", O_RDONLY) = 3
fstat(3, 0xFFFFFD7FFFDFF6C0) = 0
mmap(0x00000000, 160, PROT_READ, MAP_SHARED, 3, 0) =
0xFFFFFD7FFF340000
close(3) = 0
stat("/opt/local/lib//libpthread.so.1", 0xFFFFFD7FFFDFF050) Err#2
ENOENT
stat("/opt/local/gcc47/x86_64-sun-solaris2.11/lib/amd64/libpthread.so.1", 0xFFFFFD7FFFDFF050) Err#2 ENOENT
stat("/opt/local/gcc47/lib/amd64/libpthread.so.1",
0xFFFFFD7FFFDFF050) Err#2 ENOENT
stat("/lib/64/libpthread.so.1", 0xFFFFFD7FFFDFF050) = 0
resolvepath("/lib/64/libpthread.so.1",
"/lib/amd64/libpthread.so.1", 1023) = 26
open("/lib/64/libpthread.so.1", O_RDONLY) = 3
mmapobj(3, MMOBJ_INTERPRET, 0xFFFFFD7FFF350C80,
0xFFFFFD7FFFDFEBAC, 0x00000000) = 0
close(3) = 0
mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0xFFFFFD7FFF330000
stat("/opt/local/lib//libm.so.2", 0xFFFFFD7FFFDFF050) Err#2 ENOENT
stat("/opt/local/gcc47/x86_64-sun-solaris2.11/lib/amd64/libm.so.2", 0xFFFFFD7FFFDFF050) Err#2 ENOENT
stat("/opt/local/gcc47/lib/amd64/libm.so.2", 0xFFFFFD7FFFDFF050)
Err#2 ENOENT
stat("/lib/64/libm.so.2", 0xFFFFFD7FFFDFF050) = 0
resolvepath("/lib/64/libm.so.2", "/lib/amd64/libm.so.2", 1023) =
20
open("/lib/64/libm.so.2", O_RDONLY) = 3
mmapobj(3, MMOBJ_INTERPRET, 0xFFFFFD7FFF3309A0,
0xFFFFFD7FFFDFEBAC, 0x00000000) = 0
close(3) = 0
mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0xFFFFFD7FFF320000
memcntl(0xFFFFFD7FFEED0000, 89056, MC_ADVISE, MADV_WILLNEED, 0,
0) = 0
stat("/opt/local/lib//libc.so.1", 0xFFFFFD7FFFDFF050) Err#2 ENOENT
stat("/opt/local/gcc47/x86_64-sun-solaris2.11/lib/amd64/libc.so.1", 0xFFFFFD7FFFDFF050) Err#2 ENOENT
stat("/opt/local/gcc47/lib/amd64/libc.so.1", 0xFFFFFD7FFFDFF050)
Err#2 ENOENT
stat("/lib/64/libc.so.1", 0xFFFFFD7FFFDFF050) = 0
resolvepath("/lib/64/libc.so.1", "/lib/amd64/libc.so.1", 1023) =
20
open("/lib/64/libc.so.1", O_RDONLY) = 3
mmapobj(3, MMOBJ_INTERPRET, 0xFFFFFD7FFF320A68,
0xFFFFFD7FFFDFEBAC, 0x00000000) = 0
close(3) = 0
mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0xFFFFFD7FFF170000
memcntl(0xFFFFFD7FFF180000, 465912, MC_ADVISE, MADV_WILLNEED, 0,
0) = 0
mmap(0x00010000, 24576, PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_PRIVATE|MAP_ANON|MAP_ALIGN, -1, 0) = 0xFFFFFD7FFF160000
getcontext(0xFFFFFD7FFFDFF3B0)
getrlimit(RLIMIT_STACK, 0xFFFFFD7FFFDFF710) = 0
getpid() = 23127 [23126]
lwp_private(0, 0, 0xFFFFFD7FFF162A80) = 0x00000000
setustack(0xFFFFFD7FFF162B28)
lwp_cond_broadcast(0xFFFFFD7FFF1701A8) = 0
lwp_cond_broadcast(0xFFFFFD7FFF3201A8) = 0
lwp_cond_broadcast(0xFFFFFD7FFF3501A8) = 0
lwp_cond_broadcast(0xFFFFFD7FFF3301A8) = 0
sysi86(SI86FPSTART, 0xFFFFFD7FFFDFFC3C, 0x0000133F, 0x00001F80) =
0x00000001
brk(0x0063E270) = 0
brk(0x00642270) = 0
time() = 1435265935
time() = 1435265935
sigfillset(0xFFFFFD7FFF319500) = 0
schedctl() =
0xFFFFFD7FFF15D000
sigaction(SIGUSR1, 0xFFFFFD7FFFDFF8E0, 0x00000000) = 0
sigaction(SIGUSR2, 0xFFFFFD7FFFDFF8E0, 0x00000000) = 0
sysconfig(_CONFIG_SEM_VALUE_MAX) = 2147483647
mmap(0x00000000, 1048576, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0xFFFFFD7FFF05C000
brk(0x00642270) = 0
brk(0x00646270) = 0
brk(0x00646270) = 0
brk(0x0064A270) = 0
brk(0x0064A270) = 0
brk(0x0064E270) = 0
clock_getres(4, 0xFFFFFD7FFFDFF940) = 0
clock_getres(4, 0xFFFFFD7FFFDFF920) = 0
clock_gettime(4, 0xFFFFFD7FFFDFF930) = 0
priocntlsys(1, 0xFFFFFD7FFFDFF7B0, 3, 0xFFFFFD7FFFDFF8E8, 0) =
23127
priocntlsys(1, 0xFFFFFD7FFFDFF7B0, 1, 0xFFFFFD7FFFDFF918, 0) = 4
sysconfig(_CONFIG_PAGESIZE) = 4096
sigaction(SIGSEGV, 0xFFFFFD7FFFDFF950, 0xFFFFFD7FFFDFFA58) = 0
sigaction(SIGBUS, 0xFFFFFD7FFFDFF950, 0xFFFFFD7FFFDFFA78) = 0
sigaction(SIGSEGV, 0xFFFFFD7FFFDFF940, 0x00000000) = 0
sigaction(SIGBUS, 0xFFFFFD7FFFDFF940, 0x00000000) = 0
mmap(0x00010000, 65536, PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_PRIVATE|MAP_ANON|MAP_ALIGN, 4294967295, 0) =
0xFFFFFD7FFF040000
ioctl(1, TCGETA, 0xFFFFFD7FFFDFE670) = 0
fstat(1, 0xFFFFFD7FFFDFE5F0) = 0
brk(0x0064E270) = 0
brk(0x00652270) = 0
munmap(0xFFFFFD7FFF05C000, 1048576) = 0
munmap(0x00000000, 0) Err#22 EINVAL
lseek(0, 0, SEEK_CUR) = 6056
(Bad file number)write(1, " ( B a d f i l e n".., 18) =
18
_exit(0)
[root at smartDmachine ~]#
More information about the Digitalmars-d
mailing list