Skip to content

Commit

Permalink
include the GLIBC base prefix
Browse files Browse the repository at this point in the history
- on Linux Intel/AMD
- see discussion at #211 for more information
  • Loading branch information
Arnaud Bouchez committed Jul 25, 2023
1 parent 9db3821 commit 053b098
Show file tree
Hide file tree
Showing 7 changed files with 59 additions and 37 deletions.
12 changes: 12 additions & 0 deletions src/core/mormot.core.os.pas
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
18 changes: 9 additions & 9 deletions src/core/mormot.core.os.posix.inc
Original file line number Diff line number Diff line change
Expand Up @@ -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}

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion src/lib/mormot.lib.static.pas
Original file line number Diff line number Diff line change
Expand Up @@ -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}

Expand Down
2 changes: 1 addition & 1 deletion src/mormot.commit.inc
Original file line number Diff line number Diff line change
@@ -1 +1 @@
'2.1.5681'
'2.1.5682'
3 changes: 3 additions & 0 deletions src/mormot.defines.inc
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,7 @@
{$define FPCLINUX}
{$define OSLINUXANDROID}
{$ifdef CPUX64}
{$define OSLINUXINTEL}
{$define OSLINUXX64}
{$endif CPUX64}
{$else}
Expand All @@ -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}
Expand Down
1 change: 0 additions & 1 deletion src/net/mormot.net.sock.pas
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
58 changes: 33 additions & 25 deletions src/net/mormot.net.sock.posix.inc
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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;
Expand Down Expand Up @@ -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}

Expand All @@ -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;
Expand Down

0 comments on commit 053b098

Please sign in to comment.