Lazarus
Free Pascal => General => Topic started by: ozznixon on May 22, 2017, 07:46:05 pm
-
# /usr/bin/ppcx64
Free Pascal Compiler version 2.6.4 [2014/03/07] for x86_64
* not aware of any yum updates or anything... but, now I get:
:o
./buildproduction
Free Pascal Compiler version 2.6.4 [2014/03/07] for x86_64
Copyright (c) 1993-2014 by Florian Klaempfl and others
Target OS: Linux for x86-64
Compiling modernpascal.pp
Compiling _parser.pas
Compiling _types.pas
Compiling _exceptions.pas
Compiling _compiler.pas
Compiling _vartypes.pas
Compiling _emitter.pas
Compiling _interpreter.pas
Compiling _compiler.pas
Compiling _vartypes.pas
Compiling _emitter.pas
Compiling _vartypes2.pas
Compiling _eval.pas
Compiling _vartypes3.pas
Compiling _astree.pas
Compiling _vartypes4.pas
Compiling _vartypes3.pas
Compiling /source/bpdx/dxutil_environment.pas
Compiling /source/bpdx/dxutil_common.pas
Compiling /source/bpdx/dxutil_numeric.pas
Compiling /source/bpdx/dxutil_string.pas
Error: /usr/bin/ppcx64 can't be executed, error message: Failed to execute "/usr/bin/ppcx64", error code: -11 :-[
dxutil* source has not been changed in over a decade. I manually dropped all *.ppu and *.o files and forced with a -B, still same error same file. Skimmed dxutil_string.pas - nothing appears corrupt. 8-)
-
chmod +x /usr/bin/ppcx64 maybe?
It can also be that that is a symlink and ppcx64 is simply missing in /usr/lib/fpc/<what version?> or /usr/local/lib/fpc/<what version?> (version is 3.0.0, 3.0.2 or something)
Because on most nixes that is the real place where the ppcx64 executable is installed and /usr/bin or /usr/local/bin contains a symlink. If the package was built properly or you installed correctly.
-
Thanks @Thaddy, however as said - this is an existing system (e.g. 2.6.4 has been on it since last year) - this is a production build server, I copy source changes to modernpascal (my free pascal interpreter), and run build to deploy to my web servers. I made a change to my process locking code (3 lines) and now cannot deploy the update to my users.
* Code change was rolled back, still same problem.
# whereis ppcx64
/usr/bin/ppcx64
# ls -alrt /usr/bin/ppcx64
lrwxrwxrwx 1 root root 27 Feb 22 2016 /usr/bin/ppcx64 -> /usr/lib64/fpc/2.6.4/ppcx64
# ls -alrt /usr/lib64/fpc/2.6.4/ppcx64
-rwxr-xr-x 1 root root 2869176 Mar 7 2014 /usr/lib64/fpc/2.6.4/ppcx64
*** anyone know what the -11 error code means, or where to find the error numbers for ppc itself?
THANKS!
-
I guess it's signal 11, which is a segmentation violation. It means the compiler binary has crashed.
-
found the code which is causing it. rolled back 1 more version of changes, and viola everything works.
so tracking through the code, it is in an include file, the method looks something like:
procedure doGlobalLock; inline;
{$ifdef unix}
label tryagain;
{$endif}
begin
{$ifdef unix}
tryagain:
if {I can lock then globallocksemaphore}
else begin
{sleep 10ms}
goto tryagain;
end;
{$endif}
doCrossThreadLocking;
end;
-- the goto tryagain raises the -11 error.
-
The problem is the "goto" in an inline routine. IIRC that was fixed in 3.0.
-
so tracking through the code, it is in an include file, the method looks something like:
procedure doGlobalLock; inline;
{$ifdef unix}
label tryagain;
{$endif}
So, I am not sure if it is the goto inside an inline? if I comment the goto call, all works, so I recoded to be a while true loop, just break out on success instead of goto tryagain on fail.
Thanks @jonas (saw your post after I posted this)...