On Mon, Mar 27, 2017 at 8:30 AM, Fernando Endo fernando.endo2@gmail.com wrote:
I've been using GCC 4.9.4 for a while now (arm-linux-gnueabi-gcc (Linaro GCC 4.9-2017.01) 4.9.4), and I found this strange behavior: ... So, this means that warm_and_run_ is assumed by GCC 4.9.4 to have 32 bits arguments, while they are indeed 64 bits. This seems to be a bug for me. The code in the library is correctly allocating 2*32 bits regs for each argument.
I am not able to reproduce this problem with the info you have provided. I am getting 64-bit args passed to the warm_and_run_ function. Perhaps the reduced testcase doesn't show the problem. I had to modify your testcase to build it, pTHX_ and regnode are not defined for instance, so maybe an important detail was accidentally left out. Or maybe something else went wrong on your end. Maybe you have two copies of the libm5op.h file, and the wrong one was included.
I suggest compiling the regexec.c file with --save-temps, which will leave behind the proprocessor output in the regexec.i file, and the assembler output in the regexec.s file. Check the regexec.i file to make sure the types are OK after preprocessing. If you can send us this file, that would help.
Jim