poke-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

poke-1.0+ on AIX


From: Bruno Haible
Subject: poke-1.0+ on AIX
Date: Mon, 01 Mar 2021 01:39:03 +0100
User-agent: KMail/5.1.3 (Linux/4.4.0-203-generic; KDE/5.18.0; x86_64; ; )

With the submitted patches applied, the built poke crashes on AIX 7.1:

$ ./run poke
Illegal instruction (core dumped)

Let me debug it:

$ ./run bash
$ dbx poke/poke
...
Illegal instruction in . at 0x0 ($t1)
0x0000000000000000 00000000       Invalid opcode.
(dbx) where
.() at 0x0
pvm_alloc_initialize(), line 67 in "pvm-alloc.c"
pvm_init(), line 107 in "pvm.c"
unnamed block in pk_compiler_new(term_if = 0x0000000110000e28), line 69 in 
"libpoke.c"
pk_compiler_new(term_if = 0x0000000110000e28), line 69 in "libpoke.c"
initialize(argc = 1, argv = 0x0ffffffffffff898), line 549 in "poke.c"
main(argc = 1, argv = 0x0ffffffffffff898), line 684 in "poke.c"

pvm_alloc_initialize ()
{
  /* Initialize the Boehm Garbage Collector.  */
  GC_INIT ();                                         // <======= line 67
}

Hmm, so it means that GC_INIT() jumps to address 0.

Setting BDW_GC_LIBS="-lc" and recompiling everything fixes the problem.

We ought to get a link error, not a runtime error, in this situation.

The way to do this is to pass the option '-no-undefined' to libtool.
Documentation:
<https://www.gnu.org/software/libtool/manual/html_node/Link-mode.html>
This option also needs '-lc', otherwise a link error occurs on some platforms.

So, here's a proposed fix. With this change, and without BDW_GC_LIBS="-lc",
we get this link error with xlc:

libtool: link: xlc -q64 -qthreaded -qtls -Wl,-bM:SRE -o 
.libs/libpoke.a.d/libpoke.so.0  .libs/libpoke_la-libpoke.o 
.libs/libpoke_la-pk-val.o .libs/libpoke_la-pkl.o .libs/libpoke_la-pkl-ast.o 
.libs/libpoke_la-pkl-env.o .libs/libpoke_la-pkl-pass.o 
.libs/libpoke_la-pkl-promo.o .libs/libpoke_la-pkl-fold.o 
.libs/libpoke_la-pkl-typify.o .libs/libpoke_la-pkl-anal.o 
.libs/libpoke_la-pkl-trans.o .libs/libpoke_la-pkl-tab.o 
.libs/libpoke_la-pkl-lex.o .libs/libpoke_la-pkl-gen.o 
.libs/libpoke_la-pkl-asm.o .libs/libpoke_la-pkl-diag.o 
.libs/libpoke_la-pkl-parser.o .libs/libpoke_la-pvm.o .libs/libpoke_la-pvm-val.o 
.libs/libpoke_la-pvm-env.o .libs/libpoke_la-pvm-alloc.o 
.libs/libpoke_la-pvm-program.o .libs/libpoke_la-ios.o 
.libs/libpoke_la-ios-dev-file.o .libs/libpoke_la-ios-dev-mem.o 
.libs/libpoke_la-ios-buffer.o .libs/libpoke_la-ios-dev-stream.o 
../common/.libs/libpoke_la-pk-utils.o   ../gl-libpoke/.libs/libgnu.a 
./.libs/libpvmjitter.a  
-Wl,-blibpath:/home/haible/prefix64/lib:/home/haible/prefix64/lib:/usr/vac/lib:/usr/lib:/lib
 -lc -L/home/haible/prefix64/lib -lintl -lpthread 
-L/home/haible/poke-1.0b/build-64-xlc/jitter/lib -liconv -lm -lc -Wl,-bnoentry 
`func_echo_all " -q64 -qthreaded -qtls -g   " | /usr/bin/sed -e "s%-brtl\\([, 
]\\)%-berok\\1%g"`-Wl,-bE:.libs/libpoke.exp -Wl,-bernotok
ld: 0711-317 ERROR: Undefined symbol: .GC_remove_roots
ld: 0711-317 ERROR: Undefined symbol: .GC_malloc
ld: 0711-317 ERROR: Undefined symbol: .GC_realloc
ld: 0711-317 ERROR: Undefined symbol: .GC_strdup
ld: 0711-317 ERROR: Undefined symbol: .GC_register_finalizer_no_order
ld: 0711-317 ERROR: Undefined symbol: .GC_init
ld: 0711-317 ERROR: Undefined symbol: .GC_add_roots
ld: 0711-317 ERROR: Undefined symbol: .GC_gcollect
ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information.
make: The error code from the last command is 8.

and this link error with gcc:

libtool: link: gcc -maix64 -shared -o .libs/libpoke.a.d/libpoke.so.0  
.libs/libpoke_la-libpoke.o .libs/libpoke_la-pk-val.o .libs/libpoke_la-pkl.o 
.libs/libpoke_la-pkl-ast.o .libs/libpoke_la-pkl-env.o 
.libs/libpoke_la-pkl-pass.o .libs/libpoke_la-pkl-promo.o 
.libs/libpoke_la-pkl-fold.o .libs/libpoke_la-pkl-typify.o 
.libs/libpoke_la-pkl-anal.o .libs/libpoke_la-pkl-trans.o 
.libs/libpoke_la-pkl-tab.o .libs/libpoke_la-pkl-lex.o 
.libs/libpoke_la-pkl-gen.o .libs/libpoke_la-pkl-asm.o 
.libs/libpoke_la-pkl-diag.o .libs/libpoke_la-pkl-parser.o 
.libs/libpoke_la-pvm.o .libs/libpoke_la-pvm-val.o .libs/libpoke_la-pvm-env.o 
.libs/libpoke_la-pvm-alloc.o .libs/libpoke_la-pvm-program.o 
.libs/libpoke_la-ios.o .libs/libpoke_la-ios-dev-file.o 
.libs/libpoke_la-ios-dev-mem.o .libs/libpoke_la-ios-buffer.o 
.libs/libpoke_la-ios-dev-stream.o ../common/.libs/libpoke_la-pk-utils.o   
../gl-libpoke/.libs/libgnu.a ./.libs/libpvmjitter.a  
-Wl,-blibpath:/home/haible/prefix64/lib:/home/haible/prefix64/lib:/opt/freeware/lib/gcc/powerpc-ibm-aix7.1.0.0/8.3.0/ppc64:/opt/freeware/lib/gcc/powerpc-ibm-aix7.1.0.0/8.3.0:/opt/freeware/lib/gcc/powerpc-ibm-aix7.1.0.0/8.3.0/../../..:/usr/lib:/lib
 -lc -L/home/haible/prefix64/lib -lintl -lpthread 
-L/home/haible/poke-1.0b/build-64-gcc/jitter/lib -liconv -lncurses -lm -lc 
-Wl,-bnoentry `func_echo_all " -maix64 -g -O2   " | /usr/bin/sed -e 
"s%-brtl\\([, ]\\)%-berok\\1%g"`-Wl,-bE:.libs/libpoke.exp -Wl,-bernotok
ld: 0711-317 ERROR: Undefined symbol: .GC_malloc
ld: 0711-317 ERROR: Undefined symbol: .GC_realloc
ld: 0711-317 ERROR: Undefined symbol: .GC_strdup
ld: 0711-317 ERROR: Undefined symbol: .GC_register_finalizer_no_order
ld: 0711-317 ERROR: Undefined symbol: .GC_init
ld: 0711-317 ERROR: Undefined symbol: _end
ld: 0711-317 ERROR: Undefined symbol: _data
ld: 0711-317 ERROR: Undefined symbol: .GC_add_roots
ld: 0711-317 ERROR: Undefined symbol: .GC_gcollect
ld: 0711-317 ERROR: Undefined symbol: .GC_remove_roots
ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information.
collect2: error: ld returned 8 exit status
make: 1254-004 The error code from the last command is 1.

Attachment: 0002-Enforce-link-error-when-not-linking-with-lgc-on-AIX.patch
Description: Text Data


reply via email to

[Prev in Thread] Current Thread [Next in Thread]