diff --git a/src/core/mormot.core.os.pas b/src/core/mormot.core.os.pas index 4b3f272db..5920abff4 100644 --- a/src/core/mormot.core.os.pas +++ b/src/core/mormot.core.os.pas @@ -2618,6 +2618,18 @@ function FileTimeToUnixMSTime(const FT: TFileTime): TUnixMSTime; {$else} +const + /// allow to assign proper signed symbol table name for a libc.so.6 method + {$ifdef OSLINUXX64} + LIBC_SUFFIX = '@GLIBC_2.2.5'; + {$else} + {$ifdef OSLINUXX86} + LIBC_SUFFIX = '@GLIBC_2.0'; + {$else} + LIBC_SUFFIX = ''; // no suffix seems needed outside of Intel/AMD systems + {$endif OSLINUXX86} + {$endif OSLINUXX64} + type /// system-specific type returned by FileAge(): UTC 64-bit Epoch on POSIX TFileAge = TUnixTime; diff --git a/src/core/mormot.core.os.posix.inc b/src/core/mormot.core.os.posix.inc index 94342af28..3ae269499 100644 --- a/src/core/mormot.core.os.posix.inc +++ b/src/core/mormot.core.os.posix.inc @@ -737,10 +737,10 @@ const // GetTickCount64 fpc 2 494 563 op/sec // GetTickCount64 libc 119 919 893 op/sec function clock_gettime(clk_id: clockid_t; tp: ptimespec): cint; - cdecl external clib name 'clock_gettime'; + cdecl external clib name 'clock_gettime' + LIBC_SUFFIX; function gettimeofday(tp: ptimeval; tzp: ptimezone): cint; - cdecl external clib name 'gettimeofday'; + cdecl external clib name 'gettimeofday' + LIBC_SUFFIX; {$endif OSBSD} @@ -2870,20 +2870,20 @@ type // retrieve information of a given user by name function getpwnam(name: PAnsiChar): PPasswd; - cdecl external clib name 'getpwnam'; + cdecl external clib name 'getpwnam' + LIBC_SUFFIX; // sets the supplementary group IDs for the calling process function setgroups(n: size_t; groups: PGid): integer; - cdecl external clib name 'setgroups'; + cdecl external clib name 'setgroups' + LIBC_SUFFIX; function setuid(uid: TUid): integer; - cdecl external clib name 'setuid'; + cdecl external clib name 'setuid' + LIBC_SUFFIX; function setgid(gid: TGid): integer; - cdecl external clib name 'setgid'; + cdecl external clib name 'setgid' + LIBC_SUFFIX; // changes the root directory of the calling process function chroot(rootpath: PAnsiChar): integer; - cdecl external clib name 'chroot'; + cdecl external clib name 'chroot' + LIBC_SUFFIX; function DropPriviledges(const UserName: RawUtf8): boolean; var @@ -3301,13 +3301,13 @@ end; {$else} function getpagesize: integer; - cdecl external clib name 'getpagesize'; + cdecl external clib name 'getpagesize' + LIBC_SUFFIX; {$endif OSANDROID} {$ifdef OSLINUX} function get_nprocs: integer; - cdecl external clib name 'get_nprocs'; + cdecl external clib name 'get_nprocs' + LIBC_SUFFIX; procedure SetLinuxDistrib(const release: RawUtf8); var diff --git a/src/lib/mormot.lib.static.pas b/src/lib/mormot.lib.static.pas index 3191d6c12..0dcb5ee5d 100644 --- a/src/lib/mormot.lib.static.pas +++ b/src/lib/mormot.lib.static.pas @@ -681,7 +681,7 @@ function setlocale(category: integer; locale: PAnsiChar): PAnsiChar; cdecl; // NetBSD has a new setlocale function defined in /usr/include/locale.h external 'c' name '__setlocale_mb_len_max_32'; {$else} - external 'c' name 'setlocale'; // regular libc POSIX call + external 'c' name 'setlocale' + LIBC_SUFFIX; // regular libc POSIX call {$endif NETBSD} {$endif OSWINDOWS} diff --git a/src/mormot.commit.inc b/src/mormot.commit.inc index 9c228fdb5..f4909a729 100644 --- a/src/mormot.commit.inc +++ b/src/mormot.commit.inc @@ -1 +1 @@ -'2.1.5681' +'2.1.5682' diff --git a/src/mormot.defines.inc b/src/mormot.defines.inc index 5cb4d84a0..61b3ac668 100644 --- a/src/mormot.defines.inc +++ b/src/mormot.defines.inc @@ -261,6 +261,7 @@ {$define FPCLINUX} {$define OSLINUXANDROID} {$ifdef CPUX64} + {$define OSLINUXINTEL} {$define OSLINUXX64} {$endif CPUX64} {$else} @@ -271,6 +272,8 @@ {$define OSLINUXANDROID} {$define NOPATCHRTL} // don't mess with asm stuff {$ifdef CPUX86} + {$define OSLINUXINTEL} + {$define OSLINUXX86} {$define FPC_PIC} {$endif CPUX86} {$ifdef CPUAARCH64} diff --git a/src/net/mormot.net.sock.pas b/src/net/mormot.net.sock.pas index 49cb31db3..83c982985 100644 --- a/src/net/mormot.net.sock.pas +++ b/src/net/mormot.net.sock.pas @@ -493,7 +493,6 @@ function GetIPAddressesText(const Sep: RawUtf8 = ' '; // - may be set to force detection after HW configuration change procedure MacIPAddressFlush; - type /// interface name/address pairs as returned by GetMacAddresses TMacAddress = record diff --git a/src/net/mormot.net.sock.posix.inc b/src/net/mormot.net.sock.posix.inc index 93933edf6..2fd5e2c15 100644 --- a/src/net/mormot.net.sock.posix.inc +++ b/src/net/mormot.net.sock.posix.inc @@ -174,7 +174,8 @@ type {$ifdef SOCKDIRECTSYSCALL} function gethostbyname(name: PAnsiChar): PHostEnt; cdecl; - external clib name 'gethostbyname'; // no syscall available from FPC + external clib name 'gethostbyname' + LIBC_SUFFIX; + // no syscall available from FPC -> use libc wrapper function socket(af, struct, protocol: integer): integer; inline; begin @@ -210,7 +211,8 @@ end; function getnameinfo(addr: PSockAddr; namelen: tsocklen; host: PAnsiChar; hostlen: tsocklen; serv: PAnsiChar; servlen: tsocklen; flags: integer): integer; cdecl; - external clib name 'getnameinfo'; // no syscall available from FPC + external clib name 'getnameinfo' + LIBC_SUFFIX; + // no syscall available from FPC function bind(s: integer; addr: PSockAddr; namelen: tsocklen): integer; inline; begin @@ -234,7 +236,8 @@ end; {$ifdef HASACCEPT4} function accept4(s: integer; addr: PSockAddr; var addrlen: tsocklen; flags: integer): integer; cdecl; - external clib name 'accept4'; // no syscall available from FPC + external clib name 'accept4'; + // no syscall available from FPC {$endif HASACCEPT4} function connect(s: integer; name: PSockAddr; namelen: tsocklen): integer; inline; @@ -282,72 +285,77 @@ end; // like gethostbyname() or accept4() are not available as fp* syscalls function gethostbyname(name: PAnsiChar): PHostEnt; cdecl; - external clib name 'gethostbyname'; + external clib name 'gethostbyname' + LIBC_SUFFIX; function socket(af, struct, protocol: integer): integer; cdecl; - external clib name 'socket'; + external clib name 'socket' + LIBC_SUFFIX; function setsockopt(s: integer; level, optname: integer; optval: pointer; optlen: integer): integer; cdecl; - external clib name 'setsockopt'; + external clib name 'setsockopt' + LIBC_SUFFIX; function getsockopt(s: integer; level, optname: integer; optval: pointer; optlen: PInteger): integer; cdecl; - external clib name 'getsockopt'; + external clib name 'getsockopt' + LIBC_SUFFIX; function ioctlsocket(s: integer; cmd: cardinal): integer; cdecl; varargs; - external clib name 'ioctl'; + external clib name 'ioctl' + LIBC_SUFFIX; function shutdown(s: integer; how: integer): integer; cdecl; - external clib name 'shutdown'; + external clib name 'shutdown' + LIBC_SUFFIX; function closesocket(s: integer): integer; cdecl; - external clib name 'close'; + external clib name 'close' + LIBC_SUFFIX; function getnameinfo(addr: PSockAddr; namelen: tsocklen; host: PAnsiChar; hostlen: tsocklen; serv: PAnsiChar; servlen: tsocklen; flags: integer): integer; cdecl; - external clib name 'getnameinfo'; + external clib name 'getnameinfo' + LIBC_SUFFIX; function bind(s: integer; addr: PSockAddr; namelen: tsocklen): integer; cdecl; - external clib name 'bind'; + external clib name 'bind' + LIBC_SUFFIX; function getsockname(s: integer; name: PSockAddr; var namelen: tsocklen): integer; cdecl; - external clib name 'getsockname'; + external clib name 'getsockname' + LIBC_SUFFIX; function listen(s: integer; backlog: integer): integer; cdecl; - external clib name 'listen'; + external clib name 'listen' + LIBC_SUFFIX; function accept(s: integer; addr: PSockAddr; var addrlen: tsocklen): integer; cdecl; - external clib name 'accept'; + external clib name 'accept' + LIBC_SUFFIX; + +{$undef ACCEPT4_SYSCALL} {$ifdef HASACCEPT4} -function accept4(s: integer; addr: PSockAddr; var addrlen: tsocklen; flags: integer): integer; cdecl; - external clib name 'accept4'; + +function accept4(s: integer; addr: PSockAddr; var addrlen: tsocklen; flags: integer): integer; + cdecl; external clib name 'accept4' // no LIBC_SUFFIX: libc 2.10 is required + {$ifdef OSLINUXINTEL} + '@GLIBC_2.10' {$endif} ; + {$endif HASACCEPT4} function connect(s: integer; name: PSockAddr; namelen: tsocklen): integer; cdecl; - external clib name 'connect'; + external clib name 'connect' + LIBC_SUFFIX; function select(nfds: integer; readfds, writefds, exceptfds: PFDSet; timeout: PTimeVal): integer; cdecl; - external clib name 'select'; + external clib name 'select' + LIBC_SUFFIX; function recv(s: integer; Buf: Pointer; len: size_t; flags: integer): ssize_t; cdecl; - external clib name 'recv'; + external clib name 'recv' + LIBC_SUFFIX; function recvfrom(s: integer; Buf: Pointer; len: size_t; flags: integer; from: PSockAddr; fromlen: Pinteger): ssize_t; cdecl; - external clib name 'recvfrom'; + external clib name 'recvfrom' + LIBC_SUFFIX; function send(s: integer; Buf: Pointer; len: size_t; flags: integer): ssize_t; cdecl; - external clib name 'send'; + external clib name 'send' + LIBC_SUFFIX; function sendto(s: integer; Buf: Pointer; len: size_t; flags: integer; addrto: PSockAddr; tolen: integer): ssize_t; cdecl; - external clib name 'sendto'; + external clib name 'sendto' + LIBC_SUFFIX; function getpeername(s: integer; name: PSockAddr; var namelen: tsocklen): integer; cdecl; - external clib name 'getpeername'; + external clib name 'getpeername' + LIBC_SUFFIX; {$endif SOCKDIRECTSYSCALL} @@ -359,7 +367,7 @@ begin end; {$else} function poll(fds: PPollFD; nfds, timeout: integer): integer; cdecl; - external clib name 'poll'; + external clib name 'poll' + LIBC_SUFFIX; {$endif OSDARWIN} function sockerrno: integer; inline;