Port of Erlang (19.2) on AIX

classic Classic list List threaded Threaded
13 messages Options
Reply | Threaded
Open this post in threaded view
|

Port of Erlang (19.2) on AIX

REIX, Tony

Hi,

I'd like to port Erlang/OTP on AIX.

After browsing several files and ReadMe files in the source and on Erlang web-site, it seems to me that AIX is not yet handled by Erlang.

I've already started to look at the code. And it appears that there is some assembler code for PowerPC, probably for Linux.

However, browsing the code, I see that it talks of ELF (AIX is XCOFF) and of AIX. I'm quite lost.
Moreover, I've read that only 32bit Linux/PowerPC is handled. No 64bits. Correct ?

I'd like to find information about:
  - which parts must be modified/extended for handling AIX (XCOFF) ?
  - which parts must be
modified/extended for handling 64bit in addition to PowerPC 32bit ?

Any other information about where I have to look at for porting Erlang (v 19.2 now) on AIX would be very useful for me.

Thanks

Regards

Tony Reix

ATOS/Bull company
Grenoble - FRANCE


_______________________________________________
erlang-questions mailing list
[hidden email]
http://erlang.org/mailman/listinfo/erlang-questions
Reply | Threaded
Open this post in threaded view
|

Re: Port of Erlang (19.2) on AIX

Boroska András
Hi Tony,

The OTP team at Ericsson stopped supporting AIX a while back (~10 years ago). The good news is that there was AIX support in the past and we can build on it. Since then both Erlang, AIX and CPUs evolved. I managed to run Erlang 17 on AIX 7.1 on Power7 and Power8 architectures with minimal sacrifice of features.*  64 bit is supported and worked fine, but naturally required minimal changes in makefiles. 

So, it is not hopeless. For start, look into the automake files (Erlang uses autoconf). You will need to modify some linker flags. Get prepared to modify some assembly code too. AIX has its own assembler. My strategy was: start with R15, fix things, move to R1602 fix things, move to R1603 fix things, move to R17, fix things. In each step applied fixes from the version before.

Erlang 18 brought breaking changes by the new time handling, and I had no time to fix that. I did not try Erlang 19.

My port is sadly closed source currently. I wish IBM or related companies sponsored the OTP team to support AIX. Currently it is much easier to run Linux on Power CPU and forget about AIX. 

Happy hacking,
Andras

*Supercarriers and kernel poll was not working. On the other hand binding schedulers to cores did work after minimal changes to source. 
Getting kernel poll working would be a few days effort probably.


_______________________________________________
erlang-questions mailing list
[hidden email]
http://erlang.org/mailman/listinfo/erlang-questions
Reply | Threaded
Open this post in threaded view
|

Re: Port of Erlang (19.2) on AIX

REIX, Tony

Hi Andras,

Thanks for your answer !  :)

Sad that your source is a closed source.  :(

About your sentence: "forget about AIX", I'm not so sure, since AIX still provides many features that Linux does not provide yet.

About the port, yes I've already started to modify the assembly code. Not too difficult with the help of our expert. I guess that I'll have to add the XCOFF at some time and to manage some more stuff specific to AIX, but up to now it was not so difficult... except that I have NO idea about the amount of work that remains for finalizing the port with ALL required & interesting features (and with good performance).

Build is now blocked at:  ERLC ../ebin/hipe_rtl.beam   and I have no idea why it takes so long and how many steps are still required before the build is complete. I should build Erlang on Linux/x86 in order to see how long it takes.
Blocked command is:  /opt/freeware/src/packages/BUILD/otp_src_19.2/bin/powerpc-ibm-aix6.1/beam.smp -sbtu -A0 -- -root /opt/freeware/src/packages/BUILD/otp_src_19.2/bootstrap -progname erl -- -home / -- -noshell -noinput -mode minimal -boot start_clean -s erl_compile compile_cmdline -extra -W +debug_info -Werror +inline +warn_unused_import +warn_export_vars -o../ebin hipe_rtl.erl
   No idea about what it does...

Are there some documents describing the main phases of building Erlang ? what are the main features that must be made available ?
I see that Erlang does some bootstrap ? Is it described in some document ?

About "autoconf", for now, that seems to have worked quite good without modifying this. Unless it has messed up things silently...
I'll have a look at linker flags.

My "strategy" was to not look at our old port 15B02 . Rather start with 19.2 directly. However, I'll have a look at our old patches then.


Anyone interested by Erlang on AIX can contact me. I will share my patches with pleasure. It is OpenSource and, once finalized, it will be made available on BullFreeware web-site .

Thanks/Regards,

Tony Reix

http://bullfreeware.com/toolbox.php


Le 13/01/2017 à 17:24, Boroska András a écrit :
Hi Tony,

The OTP team at Ericsson stopped supporting AIX a while back (~10 years ago). The good news is that there was AIX support in the past and we can build on it. Since then both Erlang, AIX and CPUs evolved. I managed to run Erlang 17 on AIX 7.1 on Power7 and Power8 architectures with minimal sacrifice of features.*  64 bit is supported and worked fine, but naturally required minimal changes in makefiles. 

So, it is not hopeless. For start, look into the automake files (Erlang uses autoconf). You will need to modify some linker flags. Get prepared to modify some assembly code too. AIX has its own assembler. My strategy was: start with R15, fix things, move to R1602 fix things, move to R1603 fix things, move to R17, fix things. In each step applied fixes from the version before.

Erlang 18 brought breaking changes by the new time handling, and I had no time to fix that. I did not try Erlang 19.

My port is sadly closed source currently. I wish IBM or related companies sponsored the OTP team to support AIX. Currently it is much easier to run Linux on Power CPU and forget about AIX. 

Happy hacking,
Andras

*Supercarriers and kernel poll was not working. On the other hand binding schedulers to cores did work after minimal changes to source. 
Getting kernel poll working would be a few days effort probably.



_______________________________________________
erlang-questions mailing list
[hidden email]
http://erlang.org/mailman/listinfo/erlang-questions
Reply | Threaded
Open this post in threaded view
|

Re: Port of Erlang (19.2) on AIX

Mikael Pettersson-5
In reply to this post by REIX, Tony
REIX, Tony writes:
 >
 > Hi,
 >
 > I'd like to port Erlang/OTP on AIX.
 >
 > After browsing several files and ReadMe files in the source and on Erlang web-site, it seems to me that AIX is not yet handled by Erlang.
 >
 > I've already started to look at the code. And it appears that there is some assembler code for PowerPC, probably for Linux.
 >
 > However, browsing the code, I see that it talks of ELF (AIX is XCOFF) and of AIX. I'm quite lost.
 > Moreover, I've read that only 32bit Linux/PowerPC is handled. No 64bits. Correct ?
 >
 > I'd like to find information about:
 >   - which parts must be modified/extended for handling AIX (XCOFF) ?
 >   - which parts must be modified/extended for handling 64bit in addition to PowerPC 32bit ?

The Erlang/OTP VM should build without using any of that assembly code.  What you need is:
- a POSIX environment (see HOWTO/INSTALL.md)
- a decent ANSI-C or better yet ISO-C compiler, GCC is preferred
- a libc with pthreads (even that might be optional, c.f. Windows, but might need configure-time overrides)
- a termcap or ncurses library (optional but useful for the Erlang shell; --without-termcap if you don't have it)

Note that the VM builds for Windows which is PE-COFF, so there is no hard dependency on ELF.

HiPE (the native code stuff) does work on 64-bit PowerPC, but the runtime support is written for Linux (ELF)
and some older MacOS so would need updating for XCOFF and the AIX assembler, and re-validation for however
the AIX ABI looks these days.  Just pass --disable-hipe when configuring and ignore that for now.

Threading uses ordinary pthreads.  --disable-threads if the AIX threads are too different.

Threading and SMP support wants atomics.  That's a bit of a mess, using GCC inline assembly code
and fallbacks using (I think) pthreads synchronization primitives and/or libatomic.  Either way, that code
should build and work without any use of inline assembly code.   Try --disable-threads --disable-smp-support
for an initial, basic, but functioning VM.
_______________________________________________
erlang-questions mailing list
[hidden email]
http://erlang.org/mailman/listinfo/erlang-questions
Reply | Threaded
Open this post in threaded view
|

Re: Port of Erlang (19.2) on AIX

Boroska András
Hi Tony,

On Friday I was too quick to reply and among others I missed the part that you are from Bull. :) I used your R1502 version as the starting point. Still, let me add a few more hints. Mind you my memory can fail (I was working with AIX ~ 2 years ago). Hopefully the experts will correct me if I got something wrong. View it as my 2 cents. It is not comprehensive as you will realise it soon.

> “what are the main features that must be made available ?”

AIX users tend to be large banks and similar organisations, and I imagine many of them interested in running RabbitMQ. So, based on my limited knowledge on the matter if you can start RabbitMQ that might be good enough for many. To list the minimal features I would say that SMP, 64bit, SSL are very likely. Others readers might add theirs too.

HIPE:

Hipe is mainly a performance boost for some applications, but many Erlang use cases do not require it and as Mikael said you can ignore it for now. Linux is always there for people preferring performance over AIX features. :)

SMP:

On the other hand I would argue that enabling smp support is probably a must for most use cases and it is not too difficult to achieve. One of the issues is that the AIX provided Assembler does not support the local labels syntax of the GNU Assembler. So, one either experiments with the GNU Assembler or change the labels and jumps in erts/include/internal/ppc32/atomic.h. See [1] and [2].

One can replace the label “1:\t” with “L1%=:\t” and replace the corresponding jump “bne- 1b\n\t” with “bne- L1%=\n\t”. Of course use a different label each time (E.g. L1, L2, L3, ...) This might or might not have performance implications, but definitely better than not having SMP support.

Since Power8 offers up to 96 simultaneous threads, scheduler binding might be of interest of some potential users. To achieve that replace [3] and [4] with:

#include “sys/thread.h”
bindprocessor(BINDTHREAD, thread_self(), (cpu_t) cpu)
or something similar.

64 bit and compiler/linker flags:

OBJECT_MODE=64 env variable needs to be exported obviously.

GCC needs the following flags to link the executable: -Wl,-bexpall,-brtl,-b64 -maix64

For example you might have success bootstrapping by:

CFLAGS=“-maix64 -g -O2 -D_LINUX_SOURCE_COMPAT -L/opt/freeware/lib64 -L/opt/freeware/lib” \
LDFLAGS=“-Wl,-bexpall,-brtl,-b64,-blibpath:/opt/freeware/lib64:opt/freeware/lib -maix64” \
AR=“ar -X64” \
./otp_build autoconf --with-ssl=/opt/freeware --build=<name of your build> --disable-hipe

and then the same flags for running ./otp_build configure

Optionally you can also put the flags into the respective conf files. :)

Maybe some apps will not compile, like os_mon or odbc. Tip to proceed quickly: you can skip any app by placing an empty file called SKIP in their directory. (lib/*/SKIP)

OTHER:

Note that the C standard allows the malloc(0) system call to return either zero or a pointer that cannot be dereferenced. Unixes typically return a non-zero pointer, but AIX returns 0 by default. The C interface of Erlang (erl_interface) calls malloc(0) for empty strings and checks the return value against 0 to catch allocation errors. To prevent core dumps in such cases it helps to define -D_LINUX_SOURCE_COMPAT which enforces the non-zero pointer returns. Defining it will probably not hurt and  users of C drivers will appreciate.

As I mentioned R18 reworked clock/time handling. Expect some incompatibilities in that area.

The missing vsyslog on AIX can potentially be worked around by using printf. Or perhaps you know a better solution.

As openssl versions seems to go obsolete rather quickly, expect that many users will be interested not only in the binary but also in your source rpm package when you upload to BullFreeware, so they can potentially compile and link with a different openssl version.

BASIC TESTING:

To check if core/thread number detection works start the Erlang shell and note the smp information in the first line. It should match the number of CPU threads you have. For example [smp:8:8]. See [5]

Also note the presence of [64-bit] on the same line.

Bonus (may not be critical for many) if you can bind schedulers, for example: erl +sct L0-7c0-7 +stbt db +S8:8
then erlang:system_info(scheduler_bindings). returns {0,1,2,....}

and erlang:system_info(cpu_topology). returns
[{processor,[{core,{logical,0}},{core,{logical,1}},{core,{logical,2}}, ... }]}]

While in the shell issue crypto:start(). that should return ok if linking with ssl worked.

There are also test suites for the emulator. You can run ./otp_build setup with the above CFLAGS, AR, LDFLAGS, add your bin dir to the PATH and run ./otp_build tests. Change dir to release/tests/test_server, run erl, then ts:install(), ts:run(emulator, [batch]).

Take the above information with a grain of salt as I have no access to AIX and not an expert on building Erlang. The OTP team or others might correct my mistakes.

Thank you for your work!

Best regards,

Andras

[1] https://gcc.gnu.org/ml/gcc/2005-12/msg00671.html
[2] http://stackoverflow.com/questions/3898435/labels-in-gcc-inline-assembly
[3] https://github.com/erlang/otp/blob/maint-19/erts/lib_src/common/erl_misc_utils.c#L591
[4] https://github.com/erlang/otp/blob/maint-19/erts/configure.in#L2294
[5] http://erlang.org/doc/man/erl.html

_______________________________________________
erlang-questions mailing list
[hidden email]
http://erlang.org/mailman/listinfo/erlang-questions
Reply | Threaded
Open this post in threaded view
|

Re: Port of Erlang (19.2) on AIX

REIX, Tony
In reply to this post by Mikael Pettersson-5

Hello Mikael,

Thanks for the information !

I'm using GCC v4.8.4 . In general, porting an OpenSource package on AIX is only a matter of small and very small issues, except when assembler is used (Ruby, GCC, GCC Go, Erlang, ...).


After building with Hipe, I've tried without Hipe.
And I got the same result: an infinite loop, in read() from signal_dispatcher_thread_func().
  In:
ERLC   ../ebin/hipe_rtl.beam              with Hipe (--enable-hipe)
  In:
ERLC   ../ebin/hipe_consttab.beam    without Hipe (--disable-hipe) . No idea why "hipe" appears here also.
So, for now, I have a common issue, with or without hipe.

Full configure is (without hipe):

./configure ppc-ibm-aix6.1 --prefix=/opt/freeware --exec-prefix=/opt/freeware --bindir=/opt/freeware/bin --sbindir=/opt/freeware/sbin --sysconfdir=/opt/freeware/etc --datadir=/opt/freeware/share --includedir=/opt/freeware/include --libdir=/opt/freeware/lib --libexecdir=/opt/freeware/libexec --localstatedir=/opt/freeware/var --sharedstatedir=/opt/freeware/com --mandir=/opt/freeware/man --infodir=/opt/freeware/info --enable-shared-zlib --enable-sctp --disable-systemd --disable-hipe --without-jinterface --without-common_test --without-debugger --without-dialyzer --without-et --without-megaco --without-observer --without-reltool --without-typer --without-wx
configure: WARNING: you should use --build, --host, --target

Investigating.


About ELF/XCOFF, thanks for informing me that this part should not be too big.


Now, when building with No SMP support in addition to No threads and No Hipe, the build goes further, up tow Java building:
 JAVAC  /opt/freeware/src/packages/BUILD/otp_src_19.2/lib/ic/priv/com/ericsson/otp/ic/Environment.class
Environment.java:41: package com.ericsson.otp.erlang does not exist
  private com.ericsson.otp.erlang.OtpSelf self;
                                 ^
I'll investigate later.


Now, building with :  --disable-hipe --disable-threads --disable-smp-support --without-javac

I have an issue with LD:

LD     ../priv/lib/powerpc-ibm-aix6.1/dyntrace.so
ld: 0706-012 The -h flag is not recognized.
ld: 0706-012 The -a flag is not recognized.

I'll investigate, fix and go further.


Thanks for indicating the main options of ./configure of Erlang to study at first.


Regards

Tony


Regards,

Tony


Le 15/01/2017 à 10:58, Mikael Pettersson a écrit :
REIX, Tony writes:
 > 
 > Hi,
 > 
 > I'd like to port Erlang/OTP on AIX.
 > 
 > After browsing several files and ReadMe files in the source and on Erlang web-site, it seems to me that AIX is not yet handled by Erlang.
 > 
 > I've already started to look at the code. And it appears that there is some assembler code for PowerPC, probably for Linux.
 > 
 > However, browsing the code, I see that it talks of ELF (AIX is XCOFF) and of AIX. I'm quite lost.
 > Moreover, I've read that only 32bit Linux/PowerPC is handled. No 64bits. Correct ?
 > 
 > I'd like to find information about:
 >   - which parts must be modified/extended for handling AIX (XCOFF) ?
 >   - which parts must be modified/extended for handling 64bit in addition to PowerPC 32bit ?

The Erlang/OTP VM should build without using any of that assembly code.  What you need is:
- a POSIX environment (see HOWTO/INSTALL.md)
- a decent ANSI-C or better yet ISO-C compiler, GCC is preferred
- a libc with pthreads (even that might be optional, c.f. Windows, but might need configure-time overrides)
- a termcap or ncurses library (optional but useful for the Erlang shell; --without-termcap if you don't have it)

Note that the VM builds for Windows which is PE-COFF, so there is no hard dependency on ELF.

HiPE (the native code stuff) does work on 64-bit PowerPC, but the runtime support is written for Linux (ELF)
and some older MacOS so would need updating for XCOFF and the AIX assembler, and re-validation for however
the AIX ABI looks these days.  Just pass --disable-hipe when configuring and ignore that for now.

Threading uses ordinary pthreads.  --disable-threads if the AIX threads are too different.

Threading and SMP support wants atomics.  That's a bit of a mess, using GCC inline assembly code
and fallbacks using (I think) pthreads synchronization primitives and/or libatomic.  Either way, that code
should build and work without any use of inline assembly code.   Try --disable-threads --disable-smp-support
for an initial, basic, but functioning VM.



_______________________________________________
erlang-questions mailing list
[hidden email]
http://erlang.org/mailman/listinfo/erlang-questions
Reply | Threaded
Open this post in threaded view
|

Re: Port of Erlang (19.2) on AIX

Kostis Sagonas-2
On 01/16/2017 05:12 PM, REIX, Tony wrote:
>
> After building with Hipe, I've tried without Hipe.
> And I got the same result: an infinite loop, in read() from
> signal_dispatcher_thread_func().
>   In: ERLC   ../ebin/hipe_rtl.beam              with Hipe (--enable-hipe)
>   In: ERLC   ../ebin/hipe_consttab.beam   without Hipe (--disable-hipe)
> . No idea why "hipe" appears here also.
> So, for now, I have a common issue, with or without hipe.

I can provide some info regarding the behavior you are experiencing:

  - Certain modules of the 'hipe' application, though not all. are
compiled independently of whether HiPE is enabled or not because they
are used by 'dialyzer'.

  - It just so happens that 'hipe' is the first application that is
compiled in the bootstrapping process, so the infinite loop you are
getting is not related to HiPE but shows some deeper problem in the
system you have built.

Bottomline: what you are experiencing is not HiPE-related.  Your system
is broken.

Kostis
_______________________________________________
erlang-questions mailing list
[hidden email]
http://erlang.org/mailman/listinfo/erlang-questions
Reply | Threaded
Open this post in threaded view
|

Re: Port of Erlang (19.2) on AIX

REIX, Tony

Hi Kostis,

Thanks for your help !

Yes. I do understand now that my current issues are not HiPE-related. Good that someone can confirm this hypothesis I had.

I've found that 2 configure.in files have no knowledge of AIX > version 4, so that they use a default *) case.
Patching. Re-Building...

Making progress ! Step by step...

Tony


Le 16/01/2017 à 22:25, Kostis Sagonas a écrit :
On 01/16/2017 05:12 PM, REIX, Tony wrote:

After building with Hipe, I've tried without Hipe.
And I got the same result: an infinite loop, in read() from
signal_dispatcher_thread_func().
  In: ERLC   ../ebin/hipe_rtl.beam              with Hipe (--enable-hipe)
  In: ERLC   ../ebin/hipe_consttab.beam   without Hipe (--disable-hipe)
. No idea why "hipe" appears here also.
So, for now, I have a common issue, with or without hipe.

I can provide some info regarding the behavior you are experiencing:

 - Certain modules of the 'hipe' application, though not all. are compiled independently of whether HiPE is enabled or not because they are used by 'dialyzer'.

 - It just so happens that 'hipe' is the first application that is compiled in the bootstrapping process, so the infinite loop you are getting is not related to HiPE but shows some deeper problem in the system you have built.

Bottomline: what you are experiencing is not HiPE-related.  Your system is broken.

Kostis



_______________________________________________
erlang-questions mailing list
[hidden email]
http://erlang.org/mailman/listinfo/erlang-questions
Reply | Threaded
Open this post in threaded view
|

Re: Port of Erlang (19.2) on AIX

REIX, Tony
In reply to this post by Kostis Sagonas-2

Resending without the attachment.

Tony


Le 17/01/2017 à 11:52, Tony REIX a écrit :

Hi,

With :
      --disable-hipe --disable-threads --disable-smp-support --without-javac

I've been able to build Erlang and to launch the tests by:  ct_run -suite ../compiler_test/andor_SUITE -case t_orelse

However, it fails at beginning: "Failed to start CTH", and it talks about a file "see the CT Log for details"" that I have no idea where it is.

I've only found at: otp_src_19.2/release/tests/test_server :
   ./ct_run.ct@hardy1.2017-01-17_11.14.50/tests.compiler_test.andor_SUITE.t_orelse.logs/run.2017-01-17_11.14.50/suite.log
but it does not help a lot

Any idea which document/file I should have a look at in order to understand the root cause of the failing testing ?
Any idea about the root cause of the failure ?


I've also tried with : erl -s ts install -s ts run all_tests -s init stop .

But it crashes:
  init terminating in do_boot

Crash dump

Looking at: erl_crash.dump , I see:  Current Process CP: 0x00000000 (invalid)

erl_crash.dump file is attached to this email. REMOVED


I guess that I have to learn a little bit ( ;) ) more about how Erlang works.

See below for details.


Thanks

Tony


1) Launch tests :

+ cd /opt/freeware/src/packages/BUILD/otp_src_19.2/release/tests//test_server
+ /opt/freeware/src/packages/BUILD/otp_src_19.2/bin/ct_run -suite ../compiler_test/andor_SUITE -case t_orelse

Common Test starting (cwd is /opt/freeware/src/packages/BUILD/otp_src_19.2/release/tests/test_server)

Eshell V8.2  (abort with ^G)
(ct@hardy1)1>
Common Test: Running make in test directories...
(ct@hardy1)1> Recompile: andor_SUITE
(ct@hardy1)1> andor_SUITE.erl:83: Warning: this clause cannot match because of different types/sizes
(ct@hardy1)1> andor_SUITE.erl:86: Warning: this clause cannot match because a previous clause always matches
(ct@hardy1)1> andor_SUITE.erl:87: Warning: this clause cannot match because a previous clause always matches
(ct@hardy1)1> andor_SUITE.erl:92: Warning: this clause cannot match because of different types/sizes
(ct@hardy1)1> andor_SUITE.erl:169: Warning: the guard for this clause evaluates to 'false'
(ct@hardy1)1> andor_SUITE.erl:170: Warning: the guard for this clause evaluates to 'false'
(ct@hardy1)1> andor_SUITE.erl:170: Warning: the result of the expression is ignored (suppress the warning by assigning the expression to the _ variable)
(ct@hardy1)1> andor_SUITE.erl:171: Warning: the guard for this clause evaluates to 'false'
(ct@hardy1)1> andor_SUITE.erl:172: Warning: the guard for this clause evaluates to 'false'
(ct@hardy1)1> andor_SUITE.erl:179: Warning: this expression will fail with a 'badarg' exception
(ct@hardy1)1> andor_SUITE.erl:194: Warning: this clause cannot match because a previous clause at line 194 always matches
(ct@hardy1)1> andor_SUITE.erl:195: Warning: the guard for this clause evaluates to 'false'
(ct@hardy1)1> andor_SUITE.erl:196: Warning: the guard for this clause evaluates to 'false'
(ct@hardy1)1> andor_SUITE.erl:197: Warning: the guard for this clause evaluates to 'false'
(ct@hardy1)1> andor_SUITE.erl:227: Warning: this clause cannot match because a previous clause at line 227 always matches
(ct@hardy1)1> andor_SUITE.erl:228: Warning: this clause cannot match because a previous clause at line 228 always matches
(ct@hardy1)1> andor_SUITE.erl:229: Warning: this clause cannot match because a previous clause at line 229 always matches
(ct@hardy1)1> andor_SUITE.erl:230: Warning: the guard for this clause evaluates to 'false'
(ct@hardy1)1> Recompile: test_lib
(ct@hardy1)1>
CWD set to: [hidden email]
(ct@hardy1)1>
TEST INFO: 1 test(s), 1 case(s) in 1 suite(s)

(ct@hardy1)1> Testing tests.compiler_test.andor_SUITE.t_orelse: Starting test, 1 test cases
(ct@hardy1)1>
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Error detected: "Failed to start CTH, see the CT Log for details"
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

(ct@hardy1)1> Testing tests.compiler_test.andor_SUITE.t_orelse: *** FAILED {andor_SUITE,init_per_suite} ***
(ct@hardy1)1> Testing tests.compiler_test.andor_SUITE.t_orelse: TEST COMPLETE, 0 ok, 0 failed, 1 skipped of 1 test cases


2) ./ct_run.ct@hardy1.2017-01-17_11.14.50/tests.compiler_test.andor_SUITE.t_orelse.logs/run.2017-01-17_11.14.50/suite.log

=== Suite started at 2017-01-17 11:14:50
=== Starting test, 1 test cases
=cases         1
=user          root
=host          hardy1
=hosts         hardy1
=emulator_vsn  8.2
=emulator      beam
=otp_release   19
=started       2017-01-17 11:14:50
=case          andor_SUITE:init_per_suite
=logfile       andor_suite.init_per_suite.html
=started       2017-01-17 11:14:50
=ended         2017-01-17 11:14:50
=result        failed: "Failed to start CTH, see the CT Log for details", [{andor_SUITE,
                                                                            init_per_suite}]
=== *** FAILED {andor_SUITE,init_per_suite} ***
===
=case          andor_SUITE:t_orelse
=started       2017-01-17 11:14:50
=result        auto_skipped: init_per_suite failed
=== *** Skipping test case #1 {andor_SUITE,t_orelse} ***
===
=case          andor_SUITE:end_per_suite
=started       2017-01-17 11:14:50
=result        auto_skipped: init_per_suite failed
=== *** Skipping {andor_SUITE,end_per_suite} ***
=== TEST COMPLETE, 0 ok, 0 failed, 1 skipped of 1 test cases

=finished      2017-01-17 11:14:50
=failed        0
=successful    0
=user_skipped  0
=auto_skipped  1


3) erl -s ts install -s ts run all_tests -s init stop

# erl -s ts install -s ts run all_tests -s init stop
 Erlang/OTP 19 [erts-8.2] [source]
 
 {"init terminating in do_boot",{undef,[{ts,install,[],[]},{init,start_em,1,[]},{init,do_boot,3,[]}]}}
 init terminating in do_boot ()
 
 Crash dump is being written to: erl_crash.dump...done


=erl_crash_dump:0.3
Tue Jan 17 11:41:15 2017
Slogan: init terminating in do_boot ()
System version: Erlang/OTP 19 [erts-8.2] [source]
Compiled: Tue Jan 17 11:04:33 2017
Taints: erl_tracer
Atoms: 6506
Calling Thread: scheduler:1
=scheduler:1
Scheduler Sleep Info Aux Work:
Current Port:
Run Queue Max Length: 0
Run Queue High Length: 0
Run Queue Normal Length: 1
Run Queue Low Length: 0
Run Queue Port Length: 0
Run Queue Flags: NONEMPTY_NORMAL | OUT_OF_WORK | HALFTIME_OUT_OF_WORK | NONEMPTY | UNKNOWN(134217728)
Current Process: <0.0.0>
Current Process State: Running
Current Process Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL | ACTIVE | RUNNING | TRAP_EXIT | ON_HEAP_MSGQ
Current Process Program counter: 0x202993d4 (init:boot_loop/2 + 28)
Current Process CP: 0x00000000 (invalid)
Current Process Limited Stack Trace:
0x20429544:SReturn addr 0x20088FDC (<terminate process normally>)
...

15000 lines



Le 16/01/2017 à 22:25, Kostis Sagonas a écrit :
On 01/16/2017 05:12 PM, REIX, Tony wrote:

After building with Hipe, I've tried without Hipe.
And I got the same result: an infinite loop, in read() from
signal_dispatcher_thread_func().
  In: ERLC   ../ebin/hipe_rtl.beam              with Hipe (--enable-hipe)
  In: ERLC   ../ebin/hipe_consttab.beam   without Hipe (--disable-hipe)
. No idea why "hipe" appears here also.
So, for now, I have a common issue, with or without hipe.

I can provide some info regarding the behavior you are experiencing:

 - Certain modules of the 'hipe' application, though not all. are compiled independently of whether HiPE is enabled or not because they are used by 'dialyzer'.

 - It just so happens that 'hipe' is the first application that is compiled in the bootstrapping process, so the infinite loop you are getting is not related to HiPE but shows some deeper problem in the system you have built.

Bottomline: what you are experiencing is not HiPE-related.  Your system is broken.

Kostis




_______________________________________________
erlang-questions mailing list
[hidden email]
http://erlang.org/mailman/listinfo/erlang-questions
Reply | Threaded
Open this post in threaded view
|

Re: Port of Erlang (19.2) on AIX

Lukas Larsson-3
There are instructions here: https://github.com/erlang/otp/blob/maint/HOWTO/TESTING.md on how to run the tests.

Looking at the log it seems like you are executing erl -s ts install ..... in the wrong directory. You should be in release/tests/test_server for erl to find all the correct OTP test libraries.

Lukas

On Tue, Jan 17, 2017 at 2:18 PM, REIX, Tony <[hidden email]> wrote:

Resending without the attachment.

Tony


Le 17/01/2017 à 11:52, Tony REIX a écrit :

Hi,

With :
      --disable-hipe --disable-threads --disable-smp-support --without-javac

I've been able to build Erlang and to launch the tests by:  ct_run -suite ../compiler_test/andor_SUITE -case t_orelse

However, it fails at beginning: "Failed to start CTH", and it talks about a file "see the CT Log for details"" that I have no idea where it is.

I've only found at: otp_src_19.2/release/tests/test_server :
   ./ct_run.ct@hardy1.2017-01-17_11.14.50/tests.compiler_test.andor_SUITE.t_orelse.logs/run.2017-01-17_11.14.50/suite.log
but it does not help a lot

Any idea which document/file I should have a look at in order to understand the root cause of the failing testing ?
Any idea about the root cause of the failure ?


I've also tried with : erl -s ts install -s ts run all_tests -s init stop .

But it crashes:
  init terminating in do_boot

Crash dump

Looking at: erl_crash.dump , I see:  Current Process CP: 0x00000000 (invalid)

erl_crash.dump file is attached to this email. REMOVED


I guess that I have to learn a little bit ( ;) ) more about how Erlang works.

See below for details.


Thanks

Tony


1) Launch tests :

+ cd /opt/freeware/src/packages/BUILD/otp_src_19.2/release/tests//test_server
+ /opt/freeware/src/packages/BUILD/otp_src_19.2/bin/ct_run -suite ../compiler_test/andor_SUITE -case t_orelse

Common Test starting (cwd is /opt/freeware/src/packages/BUILD/otp_src_19.2/release/tests/test_server)

Eshell V8.2  (abort with ^G)
(ct@hardy1)1>
Common Test: Running make in test directories...
(ct@hardy1)1> Recompile: andor_SUITE
(ct@hardy1)1> andor_SUITE.erl:83: Warning: this clause cannot match because of different types/sizes
(ct@hardy1)1> andor_SUITE.erl:86: Warning: this clause cannot match because a previous clause always matches
(ct@hardy1)1> andor_SUITE.erl:87: Warning: this clause cannot match because a previous clause always matches
(ct@hardy1)1> andor_SUITE.erl:92: Warning: this clause cannot match because of different types/sizes
(ct@hardy1)1> andor_SUITE.erl:169: Warning: the guard for this clause evaluates to 'false'
(ct@hardy1)1> andor_SUITE.erl:170: Warning: the guard for this clause evaluates to 'false'
(ct@hardy1)1> andor_SUITE.erl:170: Warning: the result of the expression is ignored (suppress the warning by assigning the expression to the _ variable)
(ct@hardy1)1> andor_SUITE.erl:171: Warning: the guard for this clause evaluates to 'false'
(ct@hardy1)1> andor_SUITE.erl:172: Warning: the guard for this clause evaluates to 'false'
(ct@hardy1)1> andor_SUITE.erl:179: Warning: this expression will fail with a 'badarg' exception
(ct@hardy1)1> andor_SUITE.erl:194: Warning: this clause cannot match because a previous clause at line 194 always matches
(ct@hardy1)1> andor_SUITE.erl:195: Warning: the guard for this clause evaluates to 'false'
(ct@hardy1)1> andor_SUITE.erl:196: Warning: the guard for this clause evaluates to 'false'
(ct@hardy1)1> andor_SUITE.erl:197: Warning: the guard for this clause evaluates to 'false'
(ct@hardy1)1> andor_SUITE.erl:227: Warning: this clause cannot match because a previous clause at line 227 always matches
(ct@hardy1)1> andor_SUITE.erl:228: Warning: this clause cannot match because a previous clause at line 228 always matches
(ct@hardy1)1> andor_SUITE.erl:229: Warning: this clause cannot match because a previous clause at line 229 always matches
(ct@hardy1)1> andor_SUITE.erl:230: Warning: the guard for this clause evaluates to 'false'
(ct@hardy1)1> Recompile: test_lib
(ct@hardy1)1>
CWD set to: [hidden email]
(ct@hardy1)1>
TEST INFO: 1 test(s), 1 case(s) in 1 suite(s)

(ct@hardy1)1> Testing tests.compiler_test.andor_SUITE.t_orelse: Starting test, 1 test cases
(ct@hardy1)1>
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Error detected: "Failed to start CTH, see the CT Log for details"
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

(ct@hardy1)1> Testing tests.compiler_test.andor_SUITE.t_orelse: *** FAILED {andor_SUITE,init_per_suite} ***
(ct@hardy1)1> Testing tests.compiler_test.andor_SUITE.t_orelse: TEST COMPLETE, 0 ok, 0 failed, 1 skipped of 1 test cases


2) ./ct_run.ct@hardy1.2017-01-17_11.14.50/tests.compiler_test.andor_SUITE.t_orelse.logs/run.2017-01-17_11.14.50/suite.log

=== Suite started at 2017-01-17 11:14:50
=== Starting test, 1 test cases
=cases         1
=user          root
=host          hardy1
=hosts         hardy1
=emulator_vsn  8.2
=emulator      beam
=otp_release   19
=started       2017-01-17 11:14:50
=case          andor_SUITE:init_per_suite
=logfile       andor_suite.init_per_suite.html
=started       2017-01-17 11:14:50
=ended         2017-01-17 11:14:50
=result        failed: "Failed to start CTH, see the CT Log for details", [{andor_SUITE,
                                                                            init_per_suite}]
=== *** FAILED {andor_SUITE,init_per_suite} ***
===
=case          andor_SUITE:t_orelse
=started       2017-01-17 11:14:50
=result        auto_skipped: init_per_suite failed
=== *** Skipping test case #1 {andor_SUITE,t_orelse} ***
===
=case          andor_SUITE:end_per_suite
=started       2017-01-17 11:14:50
=result        auto_skipped: init_per_suite failed
=== *** Skipping {andor_SUITE,end_per_suite} ***
=== TEST COMPLETE, 0 ok, 0 failed, 1 skipped of 1 test cases

=finished      2017-01-17 11:14:50
=failed        0
=successful    0
=user_skipped  0
=auto_skipped  1


3) erl -s ts install -s ts run all_tests -s init stop

# erl -s ts install -s ts run all_tests -s init stop
 Erlang/OTP 19 [erts-8.2] [source]
 
 {"init terminating in do_boot",{undef,[{ts,install,[],[]},{init,start_em,1,[]},{init,do_boot,3,[]}]}}
 init terminating in do_boot ()
 
 Crash dump is being written to: erl_crash.dump...done


=erl_crash_dump:0.3
Tue Jan 17 11:41:15 2017
Slogan: init terminating in do_boot ()
System version: Erlang/OTP 19 [erts-8.2] [source]
Compiled: Tue Jan 17 11:04:33 2017
Taints: erl_tracer
Atoms: 6506
Calling Thread: scheduler:1
=scheduler:1
Scheduler Sleep Info Aux Work:
Current Port:
Run Queue Max Length: 0
Run Queue High Length: 0
Run Queue Normal Length: 1
Run Queue Low Length: 0
Run Queue Port Length: 0
Run Queue Flags: NONEMPTY_NORMAL | OUT_OF_WORK | HALFTIME_OUT_OF_WORK | NONEMPTY | UNKNOWN(134217728)
Current Process: <0.0.0>
Current Process State: Running
Current Process Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL | ACTIVE | RUNNING | TRAP_EXIT | ON_HEAP_MSGQ
Current Process Program counter: 0x202993d4 (init:boot_loop/2 + 28)
Current Process CP: 0x00000000 (invalid)
Current Process Limited Stack Trace:
0x20429544:SReturn addr 0x20088FDC (<terminate process normally>)
...

15000 lines



Le 16/01/2017 à 22:25, Kostis Sagonas a écrit :
On 01/16/2017 05:12 PM, REIX, Tony wrote:

After building with Hipe, I've tried without Hipe.
And I got the same result: an infinite loop, in read() from
signal_dispatcher_thread_func().
  In: ERLC   ../ebin/hipe_rtl.beam              with Hipe (--enable-hipe)
  In: ERLC   ../ebin/hipe_consttab.beam   without Hipe (--disable-hipe)
. No idea why "hipe" appears here also.
So, for now, I have a common issue, with or without hipe.

I can provide some info regarding the behavior you are experiencing:

 - Certain modules of the 'hipe' application, though not all. are compiled independently of whether HiPE is enabled or not because they are used by 'dialyzer'.

 - It just so happens that 'hipe' is the first application that is compiled in the bootstrapping process, so the infinite loop you are getting is not related to HiPE but shows some deeper problem in the system you have built.

Bottomline: what you are experiencing is not HiPE-related.  Your system is broken.

Kostis




_______________________________________________
erlang-questions mailing list
[hidden email]
http://erlang.org/mailman/listinfo/erlang-questions



_______________________________________________
erlang-questions mailing list
[hidden email]
http://erlang.org/mailman/listinfo/erlang-questions
Reply | Threaded
Open this post in threaded view
|

Re: Port of Erlang (19.2) on AIX

REIX, Tony
In reply to this post by Boroska András

Hi Andras,

Thanks for your information ! :)

Thanks for the list of minimal features (SMP, 64bit, SSL). Once I'm done with running correctly the tests with the minimal case I have now, I'll move forward and I will enable them. For now, I'm using : --disable-hipe --disable-threads --disable-smp-support --without-javac . And that already does not work since tests fail at beginning.

About the assembler issue with 1: labels, my colleague already provided me with a solution, but more complex than yours. I've asked him to explain me what the impact is to use his solution or yours.

HIPE: OK. I'll go back to it later.

SMP: As I said, I have changed some parts of the assembler, including the erts/include/internal/ppc32/atomic.h file. However, I have no idea if my changes are correct... since I'm now not using SMP.  I'll see at the 2 pages you have provided, [1] & [2] .

About "scheduler binding", I'll have to check that the way I build Erlang (by means of a FedoraCore25 modified .spec file) does generate all the appropriate flags. For now, I am in 32bit. For now, I see that some configure and Makefile (erts/emulator/powerpc-ibm-aix6.1/Makefile) files contain : DEXPORT = -Wl,-bexpall,-brtl . However, I do not see them in the traces of the build. However, "make" command hides the details. -b64 and -maix64 should come when I am in 64bit. I'll check.

Though I've been able to build Erlang till the end, the traces do not show any "./otp_build configure". However, as I said, "make" only shows a summary of what it does. And the --trace option is much too verbose.

Applications: it looks that 38 applications where built: asn1 compiler cosEvent cosEventDomain cosFileTransfer cosNotification cosProperty cosTime cosTransactions crypto diameter edoc eldap erl_docgen erl_interface eunit gs hipe ic inets kernel mnesia odbc orber os_mon otp_mibs parsetools percept public_key runtime_tools sasl snmp ssh ssl stdlib syntax_tools tools xmerl
Any important application missing ?

OTHER:

-D_LINUX_SOURCE_COMPAT : YEs !! For sure. We use it sometimes. And I forgot to try with it. I'm rebuilding now with it. Bad news: I see no improvement for my test crash.

- clock/time handling issues ? OK. I'll think of this when looking at issues.

- vsyslog : I've temporaly worked-around this. I'll go back to it later.

- OpenSSL & src.rpm : Yes. We deliver always (or nearly always) the <package>.src.rpm file on BullFreeware.

BASIC TESTING:

# erl
Erlang/OTP 19 [erts-8.2] [source]
Eshell V8.2  (abort with ^G)
1>                                                                     :) That begins to work ! :)

- SMP & core/thread number: since, for now, I'm building without SMP, I'll check this later.

- Binding schedulers: I'll go back to this later.

- erl > crypto:start() : OK : will check. Done:
    2> crypto:start().
   ok

- 3> erlang:system_info(cpu_topology).
undefined
(No SMP yet)

- test suites for the emulator. Hummm I've been able to find some instructions for running tests. No idea for now if these tests include the emulator. I'll look at this once by re-building of Erlang is done.*

-  # ./otp_build tests  : Looks like there is a mismatch in the naming:
Makefile:248: /opt/freeware/src/packages/BUILD/otp_src_19.2/make/powerpc-ibm-aix6.1.9.0/otp_ded.mk: No such file or directory

# find . -name otp_ded.mk
./make/powerpc-ibm-aix6.1/otp_ded.mk
# ln -s /opt/freeware/src/packages/BUILD/otp_src_19.2/make/powerpc-ibm-aix6.1 /opt/freeware/src/packages/BUILD/otp_src_19.2/make/powerpc-ibm-aix6.1.9.0

 With this symlink, the ./otp_build tests  command works fine, doing a lot of things, and ending without error message. However, then:
 # cd release/tests/test_server
 # erl
 ...
 1> ts:install().
 Running /opt/freeware/src/packages/BUILD/otp_src_19.2/release/tests/test_server/configure
 Env: []
 configure: error: cannot find sources (conf_vars.in) in /opt/freeware/src/packages/BUILD/otp_src_19.2/release/tests/test_server or ..
                                                                                                                                     {error,enoent}
 It seems that a file is missing.
 With : cp ./lib/common_test/test_server/conf_vars.in /opt/freeware/src/packages/BUILD/otp_src_19.2/release/tests/test_server
 that works better.
 However, the ERL ts:install(). command fails with:
    Running /opt/freeware/src/packages/BUILD/otp_src_19.2/release/tests/test_server/configure
    Env: []
    ...
    configure: error: don't know how to compile and link dynamic drivers


Salt ? We have very good salt in France ! I'll use !


Thanks a lot for your help !!!
And expect that it will take some time before I manage all the cases you have detailed for me. First, I need to have Erlang to work with the minimum, with good tests results. Then, I'll add the removed features, one by one.


Regards,

Tony

Le 15/01/2017 à 19:43, Boroska András a écrit :
Hi Tony,

On Friday I was too quick to reply and among others I missed the part that you are from Bull. :) I used your R1502 version as the starting point. Still, let me add a few more hints. Mind you my memory can fail (I was working with AIX ~ 2 years ago). Hopefully the experts will correct me if I got something wrong. View it as my 2 cents. It is not comprehensive as you will realise it soon.

> “what are the main features that must be made available ?”

AIX users tend to be large banks and similar organisations, and I imagine many of them interested in running RabbitMQ. So, based on my limited knowledge on the matter if you can start RabbitMQ that might be good enough for many. To list the minimal features I would say that SMP, 64bit, SSL are very likely. Others readers might add theirs too.

HIPE:

Hipe is mainly a performance boost for some applications, but many Erlang use cases do not require it and as Mikael said you can ignore it for now. Linux is always there for people preferring performance over AIX features. :)

SMP:

On the other hand I would argue that enabling smp support is probably a must for most use cases and it is not too difficult to achieve. One of the issues is that the AIX provided Assembler does not support the local labels syntax of the GNU Assembler. So, one either experiments with the GNU Assembler or change the labels and jumps in erts/include/internal/ppc32/atomic.h. See [1] and [2].

One can replace the label “1:\t” with “L1%=:\t” and replace the corresponding jump “bne- 1b\n\t” with “bne- L1%=\n\t”. Of course use a different label each time (E.g. L1, L2, L3, ...) This might or might not have performance implications, but definitely better than not having SMP support.

Since Power8 offers up to 96 simultaneous threads, scheduler binding might be of interest of some potential users. To achieve that replace [3] and [4] with:

#include “sys/thread.h”
bindprocessor(BINDTHREAD, thread_self(), (cpu_t) cpu)
or something similar.

64 bit and compiler/linker flags:

OBJECT_MODE=64 env variable needs to be exported obviously.

GCC needs the following flags to link the executable: -Wl,-bexpall,-brtl,-b64 -maix64

For example you might have success bootstrapping by:

CFLAGS=“-maix64 -g -O2 -D_LINUX_SOURCE_COMPAT -L/opt/freeware/lib64 -L/opt/freeware/lib” \
LDFLAGS=“-Wl,-bexpall,-brtl,-b64,-blibpath:/opt/freeware/lib64:opt/freeware/lib -maix64” \
AR=“ar -X64” \
./otp_build autoconf --with-ssl=/opt/freeware --build=<name of your build> --disable-hipe

and then the same flags for running ./otp_build configure

Optionally you can also put the flags into the respective conf files. :)

Maybe some apps will not compile, like os_mon or odbc. Tip to proceed quickly: you can skip any app by placing an empty file called SKIP in their directory. (lib/*/SKIP)

OTHER:

Note that the C standard allows the malloc(0) system call to return either zero or a pointer that cannot be dereferenced. Unixes typically return a non-zero pointer, but AIX returns 0 by default. The C interface of Erlang (erl_interface) calls malloc(0) for empty strings and checks the return value against 0 to catch allocation errors. To prevent core dumps in such cases it helps to define -D_LINUX_SOURCE_COMPAT which enforces the non-zero pointer returns. Defining it will probably not hurt and  users of C drivers will appreciate.

As I mentioned R18 reworked clock/time handling. Expect some incompatibilities in that area.

The missing vsyslog on AIX can potentially be worked around by using printf. Or perhaps you know a better solution.

As openssl versions seems to go obsolete rather quickly, expect that many users will be interested not only in the binary but also in your source rpm package when you upload to BullFreeware, so they can potentially compile and link with a different openssl version.

BASIC TESTING:

To check if core/thread number detection works start the Erlang shell and note the smp information in the first line. It should match the number of CPU threads you have. For example [smp:8:8]. See [5]

Also note the presence of [64-bit] on the same line.

Bonus (may not be critical for many) if you can bind schedulers, for example: erl +sct L0-7c0-7 +stbt db +S8:8
then erlang:system_info(scheduler_bindings). returns {0,1,2,....}

and erlang:system_info(cpu_topology). returns
[{processor,[{core,{logical,0}},{core,{logical,1}},{core,{logical,2}}, ... }]}]

While in the shell issue crypto:start(). that should return ok if linking with ssl worked.

There are also test suites for the emulator. You can run ./otp_build setup with the above CFLAGS, AR, LDFLAGS, add your bin dir to the PATH and run ./otp_build tests. Change dir to release/tests/test_server, run erl, then ts:install(), ts:run(emulator, [batch]).

Take the above information with a grain of salt as I have no access to AIX and not an expert on building Erlang. The OTP team or others might correct my mistakes.

Thank you for your work!

Best regards,

Andras

[1] https://gcc.gnu.org/ml/gcc/2005-12/msg00671.html
[2] http://stackoverflow.com/questions/3898435/labels-in-gcc-inline-assembly
[3] https://github.com/erlang/otp/blob/maint-19/erts/lib_src/common/erl_misc_utils.c#L591
[4] https://github.com/erlang/otp/blob/maint-19/erts/configure.in#L2294
[5] http://erlang.org/doc/man/erl.html


_______________________________________________
erlang-questions mailing list
[hidden email]
http://erlang.org/mailman/listinfo/erlang-questions
Reply | Threaded
Open this post in threaded view
|

Re: Port of Erlang (19.2) on AIX

REIX, Tony

Hi,

I have this warning:

***************************************************
***************************************************
*** WARNING: System might fail to configure or
***          might be erroneously configured
***          since autoconf version 2.69 is used
***          instead of version 2.59!
***************************************************
***************************************************

Is it really required to use autoconf v2.59 when building Erlang ?

Thanks

Tony



_______________________________________________
erlang-questions mailing list
[hidden email]
http://erlang.org/mailman/listinfo/erlang-questions
Reply | Threaded
Open this post in threaded view
|

Re: Port of Erlang (19.2) on AIX

Kostis Sagonas-2
On 01/18/2017 05:05 PM, REIX, Tony wrote:
> Is it really required to use autoconf v2.59 when building Erlang ?
>

No.  You can safely ignore this warning.

Kostis
_______________________________________________
erlang-questions mailing list
[hidden email]
http://erlang.org/mailman/listinfo/erlang-questions