From a4dd0ad63c00f4dee3b86dfd3075d1d61b2b3180 Mon Sep 17 00:00:00 2001 From: sanine Date: Sat, 27 Aug 2022 23:52:56 -0500 Subject: add plibsys --- 3rdparty/plibsys/platforms/vms-general/README.md | 49 ++ .../plibsys/platforms/vms-general/build_vms.com | 616 +++++++++++++++++++++ 3rdparty/plibsys/platforms/vms-general/plibsys.opt | 540 ++++++++++++++++++ .../platforms/vms-general/vms_shorten_symbol.c | 238 ++++++++ 4 files changed, 1443 insertions(+) create mode 100644 3rdparty/plibsys/platforms/vms-general/README.md create mode 100644 3rdparty/plibsys/platforms/vms-general/build_vms.com create mode 100644 3rdparty/plibsys/platforms/vms-general/plibsys.opt create mode 100644 3rdparty/plibsys/platforms/vms-general/vms_shorten_symbol.c (limited to '3rdparty/plibsys/platforms/vms-general') diff --git a/3rdparty/plibsys/platforms/vms-general/README.md b/3rdparty/plibsys/platforms/vms-general/README.md new file mode 100644 index 0000000..9bbfc85 --- /dev/null +++ b/3rdparty/plibsys/platforms/vms-general/README.md @@ -0,0 +1,49 @@ +## OpenVMS + +This directory contains mainly a build script for OpenVMS. + +## Requirements + +* OpenVMS 8.4 or later (Alpha or IA64), VAX is not supported +* DEC CC 6.5 or later +* DEC CXX 7.1 or later (for tests only) + +## Building + +Library can be built with 32-bit or 64-bit pointers. By default 64-bit +pointers are used. Use `32` parameter to switch behaviour. + +Test suit is optional and is not built by default. Use `TESTS` parameter to +enable tests. + +There are other build parametes available, plese look inside the +`build_vms.com` (a DCL-based script) to see the detailed description for +all of them. + +Object library (.OLB) and shareable image (.EXE) are built. An object +library acts like a widely-known static library, and a shareable image +acts like a shared library. All libraries and tests are placed inside the +`[.ALPHA]` or `[.IA64]` directory depending on a host architecture. + +Do not forget to define a logical name for a shareable image of the library +before running programs which use it: + +`DEFINE PLIBSYS SYS$SYSROOT:[BUILD_DIR]PLIBSYS.EXE` + +You can also place an image into the `SYS$SHARE` directory instead of +defining a logical name. + +Here are some examples of the build commands: + +* `@build_vms.com` builds only the libraries (64-bit pointers). +* `@build_vms.com 32 TESTS` builds libraries (32-bit pointers) and all +the tests. +* `@build_vms.com NOLIB RUN_TESTS` only runs already built tests. +* `@build_vms.com CLEAN` cleans all the files produced during a build. + +## More + +OpenVMS can mangle long (> 31 characters) symbol names in a compiled object +to fit the limit. Sometimes it is useful to know the mangled name of a +symbol. Use the `vms_shorten_symbol.c` program to get a mangled name. See +details inside. diff --git a/3rdparty/plibsys/platforms/vms-general/build_vms.com b/3rdparty/plibsys/platforms/vms-general/build_vms.com new file mode 100644 index 0000000..ce5e95c --- /dev/null +++ b/3rdparty/plibsys/platforms/vms-general/build_vms.com @@ -0,0 +1,616 @@ +$! +$! Copyright 2011, Richard Levitte +$! Copyright 2014, John Malmberg +$! Copyright 2016-2018, Alexander Saprykin +$! +$! Permission to use, copy, modify, and/or distribute this software for any +$! purpose with or without fee is hereby granted, provided that the above +$! copyright notice and this permission notice appear in all copies. +$! +$! THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +$! WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +$! MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +$! ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +$! WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +$! ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +$! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +$! +$!=========================================================================== +$! Command-line options: +$! +$! 32 Compile with 32-bit pointers. +$! BIGENDIAN Compile for a big endian host. +$! CCQUAL=x Add "x" to the C compiler qualifiers. +$! DEBUG Build in debug mode. +$! CLEAN Only perform clean after the previous build. +$! TESTS=(x) Build library tests. Comma separated test names or leave +$! empty to build all the tests. +$! Example 1 (curtain tests): TESTS=(pmem,puthread) +$! Example 2 (all tests): TESTS +$! RUN_TESTS Runs all tests. +$! NOLIB Skip library buidling. Useful when you want to rebuild +$! particular tests. +$!=========================================================================== +$! +$! +$! Save the original default dev:[dir], and arrange for its restoration +$! at exit. +$!--------------------------------------------------------------------- +$ orig_def = f$environment("DEFAULT") +$ on error then goto common_exit +$ on severe_error then goto common_exit +$ on control_y then goto common_exit +$! +$ ctrl_y = 1556 +$ proc = f$environment("PROCEDURE") +$ proc_fid = f$file_attributes(proc, "FID") +$ proc_dev = f$parse(proc, , , "DEVICE") +$ proc_dir = f$parse(proc, , , "DIRECTORY") +$ proc_name = f$parse(proc, , , "NAME") +$ proc_type = f$parse(proc, , , "TYPE") +$ proc_dev_dir = proc_dev + proc_dir +$! +$! Have to manually parse the device for a search list. +$! Can not use the f$parse() as it will return the first name +$! in the search list. +$! +$ orig_def_dev = f$element(0, ":", orig_def) + ":" +$ if orig_def_dev .eqs. "::" then orig_def_dev = "sys$disk:" +$ test_proc = orig_def_dev + proc_dir + proc_name + proc_type +$! +$! If we can find this file using the default directory +$! then we know that we should use the original device from the +$! default directory which could be a search list. +$! +$ test_proc_fid = f$file_attributes(test_proc, "FID") +$! +$ if (test_proc_fid .eq. proc_fid) +$ then +$ proc_dev_dir = orig_def_dev + proc_dir +$ endif +$! +$! Verbose output message stuff. Define symbol to "write sys$output". +$! vo_c - verbose output for compile +$! +$ vo_c := "write sys$output" +$! +$! Determine the main distribution directory ("[--]") in an +$! ODS5-tolerant (case-insensitive) way. (We do assume that the only +$! "]" or ">" is the one at the end.) +$! +$! Some non-US VMS installations report ">" for the directory delimiter +$! so do not assume that it is "]". +$! +$ orig_def_len = f$length(orig_def) +$ delim = f$extract(orig_def_len - 1, 1, orig_def) +$! +$ set default 'proc_dev_dir' +$ set default [--.src] +$ base_src_dir = f$environment("default") +$ set default 'proc_dev_dir' +$! +$! Define the architecture-specific destination directory name +$! ----------------------------------------------------------- +$! +$ if (f$getsyi("HW_MODEL") .lt. 1024) +$ then +$ 'vo_c' "%PLIBSYS-F-NOTSUP, VAX platform is not supported, sorry :(" +$ goto common_exit +$ else +$ arch_name = "" +$ arch_name = arch_name + f$edit(f$getsyi("ARCH_NAME"), "UPCASE") +$! +$ if (arch_name .eqs. "") then arch_name = "UNK" +$! +$ node_swvers = f$getsyi("node_swvers") +$ version_patch = f$extract(1, f$length(node_swvers), node_swvers) +$ maj_ver = f$element(0, ".", version_patch) +$ min_ver_patch = f$element(1, ".", version_patch) +$ min_ver = f$element(0, "-", min_ver_patch) +$ patch = f$element(1, "-", min_ver_patch) +$! +$ if maj_ver .lts. "8" .or. min_ver .lts. "4" +$ then +$ 'vo_c' "%PLIBSYS-F-NOTSUP, only OpenVMS 8.4 and above are supported, sorry :(" +$ goto common_exit +$ endif +$ endif +$! +$ objdir = proc_dev_dir - delim + ".''arch_name'" + delim +$! +$! Parse input arguments +$! --------------------- +$! Allow arguments to be grouped together with comma or separated by spaces +$! Do no know if we will need more than 8. +$ args = "," + p1 + "," + p2 + "," + p3 + "," + p4 + "," +$ args = args + p5 + "," + p6 + "," + p7 + "," + p8 + "," +$! +$! Provide lower case version to simplify parsing. +$ args_lower = f$edit(args, "LOWERCASE,COLLAPSE") +$! +$ args_len = f$length(args) +$ args_lower_len = f$length(args_lower) +$! +$ if f$locate(",clean,", args_lower) .lt. args_lower_len +$ then +$ 'vo_c' "Cleaning up previous build..." +$ set default 'proc_dev_dir' +$! +$ if f$search("''arch_name'.DIR") .nes. "" +$ then +$ set prot=w:d []'arch_name'.DIR;* +$ delete/tree [.'arch_name'...]*.*;* +$ delete []'arch_name'.DIR;* +$ endif +$! +$ goto common_exit +$ endif +$! +$ build_64 = 1 +$ if f$locate(",32,", args_lower) .lt. args_lower_len +$ then +$ build_64 = 0 +$ endif +$! +$ big_endian = 0 +$ if f$locate(",bigendian,", args_lower) .lt. args_lower_len +$ then +$ big_endian = 1 +$ endif +$! +$ cc_extra = "" +$ args_loc = f$locate(",ccqual=", args_lower) +$ if args_loc .lt. args_lower_len +$ then +$ arg = f$extract(args_loc + 1, args_lower_len, args_lower) +$ arg_val = f$element(0, ",", arg) +$ cc_extra = f$element(1, "=", arg_val) +$ endif +$! +$ is_debug = 0 +$ if f$locate(",debug,", args_lower) .lt. args_lower_len +$ then +$ is_debug = 1 +$ endif +$! +$ is_tests = 0 +$ test_list = "" +$ if f$locate(",tests,", args_lower) .lt. args_lower_len +$ then +$ is_tests = 1 +$ else +$ args_loc = f$locate(",tests=(", args_lower) +$ if args_loc .lt. args_lower_len +$ then +$ is_tests = 1 +$ arg = f$extract(args_loc + 1, args_lower_len, args_lower) +$ arg_val = f$element(0, ")", arg) +$ test_list_val = f$element(1, "=", arg_val) - "(" - ")" +$ test_list_val = f$edit(test_list_val, "COLLAPSE") +$ test_list_counter = 0 +$ +$ test_list_loop: +$ next_test_val = f$element (test_list_counter, ",", test_list_val) +$ if next_test_val .nes. "" .and. next_test_val .nes. "," +$ then +$ test_list = test_list + next_test_val + " " +$ test_list_counter = test_list_counter + 1 +$ goto test_list_loop +$ endif +$ endif +$ endif +$! +$ run_tests = 0 +$ if f$locate(",run_tests,", args_lower) .lt. args_lower_len +$ then +$ run_tests = 1 +$ endif +$! +$! Prepare build directory +$! ----------------------- +$! +$! When building on a search list, need to do a create to make sure that +$! the output directory exists, since the clean procedure tries to delete +$! it. +$! +$ if f$search("''proc_dev_dir'''arch_name'.DIR") .eqs. "" +$ then +$ create/dir 'objdir'/prot=o:rwed +$ endif +$! +$ set default 'objdir' +$ if f$search("CXX_REPOSITORY.DIR") .nes. "" +$ then +$ set prot=w:d []CXX_REPOSITORY.DIR;* +$ delete/tree [.CXX_REPOSITORY...]*.*;* +$ delete []CXX_REPOSITORY.DIR;* +$ endif +$! +$ if f$locate(",nolib,", args_lower) .lt. args_lower_len +$ then +$ goto build_tests +$ endif +$! +$! Generate platform-specific config file +$! -------------------------------------- +$! +$ if f$search("plibsysconfig.h") .nes. "" then delete plibsysconfig.h;* +$! +$! Get the version number +$! ---------------------- +$! +$ i = 0 +$ open/read/error=version_loop_end vhf [---]CMakeLists.txt +$ version_loop: +$ read/end=version_loop_end vhf line_in +$! +$ if line_in .eqs. "" then goto version_loop +$! +$ if f$locate("set (PLIBSYS_VERSION_MAJOR ", line_in) .eq. 0 +$ then +$ plibsys_vmajor = f$element(2, " ", line_in) - ")" +$ i = i + 1 +$ endif +$! +$ if f$locate("set (PLIBSYS_VERSION_MINOR ", line_in) .eq. 0 +$ then +$ plibsys_vminor = f$element(2, " ", line_in) - ")" +$ i = i + 1 +$ endif +$! +$ if f$locate("set (PLIBSYS_VERSION_PATCH ", line_in) .eq. 0 +$ then +$ plibsys_vpatch = f$element(2, " ", line_in) - ")" +$ i = i + 1 +$ endif +$! +$ if f$locate("set (PLIBSYS_VERSION_NUM ", line_in) .eq. 0 +$ then +$ plibsys_vnum = f$element(2, " ", line_in) - ")" +$ i = i + 1 +$ endif +$! +$ if i .lt 4 then goto version_loop +$ version_loop_end: +$ close vhf +$! +$! Write config file +$! ----------------- +$! +$ open/write/error=config_write_end chf plibsysconfig.h +$ write chf "#ifndef PLIBSYS_HEADER_PLIBSYSCONFIG_H" +$ write chf "#define PLIBSYS_HEADER_PLIBSYSCONFIG_H" +$ write chf "" +$ write chf "#define PLIBSYS_VERSION_MAJOR ''plibsys_vmajor'" +$ write chf "#define PLIBSYS_VERSION_MINOR ''plibsys_vminor'" +$ write chf "#define PLIBSYS_VERSION_PATCH ''plibsys_vpatch'" +$ write chf "#define PLIBSYS_VERSION_STR ""''plibsys_vmajor'.''plibsys_vminor'.''plibsys_vpatch'""" +$ write chf "#define PLIBSYS_VERSION ''plibsys_vnum'" +$ write chf "" +$ write chf "#define PLIBSYS_SIZEOF_SAFAMILY_T 1" +$ write chf "" +$ write chf "#include " +$ write chf "" +$ write chf "#include " +$ write chf "#include " +$ write chf "" +$ write chf "P_BEGIN_DECLS" +$ write chf "" +$ write chf "#define P_MINFLOAT FLT_MIN" +$ write chf "#define P_MAXFLOAT FLT_MAX" +$ write chf "#define P_MINDOUBLE DBL_MIN" +$ write chf "#define P_MAXDOUBLE DBL_MAX" +$ write chf "#define P_MINSHORT SHRT_MIN" +$ write chf "#define P_MAXSHORT SHRT_MAX" +$ write chf "#define P_MAXUSHORT USHRT_MAX" +$ write chf "#define P_MININT INT_MIN" +$ write chf "#define P_MAXINT INT_MAX" +$ write chf "#define P_MAXUINT UINT_MAX" +$ write chf "#define P_MINLONG LONG_MIN" +$ write chf "#define P_MAXLONG LONG_MAX" +$ write chf "#define P_MAXULONG ULONG_MAX" +$ write chf "" +$ write chf "#define PLIBSYS_MMAP_HAS_MAP_ANONYMOUS" +$ write chf "#define PLIBSYS_HAS_NANOSLEEP" +$ write chf "#define PLIBSYS_HAS_GETADDRINFO" +$ write chf "#define PLIBSYS_HAS_POSIX_SCHEDULING" +$ write chf "#define PLIBSYS_HAS_POSIX_STACKSIZE" +$ write chf "#define PLIBSYS_HAS_SOCKADDR_STORAGE" +$ write chf "#define PLIBSYS_SOCKADDR_HAS_SA_LEN" +$ write chf "#define PLIBSYS_SOCKADDR_IN6_HAS_SCOPEID" +$ write chf "#define PLIBSYS_SOCKADDR_IN6_HAS_FLOWINFO" +$ write chf "" +$! +$ if build_64 .eqs. "1" +$ then +$ write chf "#define PLIBSYS_SIZEOF_VOID_P 8" +$ write chf "#define PLIBSYS_SIZEOF_SIZE_T 8" +$ else +$ write chf "#define PLIBSYS_SIZEOF_VOID_P 4" +$ write chf "#define PLIBSYS_SIZEOF_SIZE_T 4" +$ endif +$! +$ write chf "#define PLIBSYS_SIZEOF_LONG 4" +$ write chf "" +$! +$ if big_endian .eqs. "1" +$ then +$ write chf "#define P_BYTE_ORDER P_BIG_ENDIAN" +$ else +$ write chf "#define P_BYTE_ORDER P_LITTLE_ENDIAN" +$ endif +$! +$ write chf "" +$ write chf "P_END_DECLS" +$ write chf "" +$ write chf "#endif /* PLIBSYS_HEADER_PLIBSYSCONFIG_H */" +$ config_write_end: +$ close chf +$! +$! Prepare sources for compilation +$! ------------------------------- +$! +$ cc_link_params = "" +$ cc_params = "/NAMES=(AS_IS,SHORTENED)" +$ cc_params = cc_params + "/DEFINE=(PLIBSYS_COMPILATION,_REENTRANT,_POSIX_EXIT)" +$ cc_params = cc_params + "/INCLUDE_DIRECTORY=(''objdir',''base_src_dir')" +$ cc_params = cc_params + "/FLOAT=IEEE/IEEE_MODE=DENORM_RESULTS" +$! +$ if build_64 .eqs. "1" +$ then +$ cc_params = cc_params + "/POINTER_SIZE=64" +$ else +$ cc_params = cc_params + "/POINTER_SIZE=32" +$ endif +$! +$ if cc_extra .nes. "" +$ then +$ cc_params = cc_params + " " + cc_extra +$ endif +$! +$ if is_debug .eqs. "1" +$ then +$ cc_params = cc_params + "/DEBUG/NOOPTIMIZE/LIST/SHOW=ALL" +$ cc_link_params = "/DEBUG/TRACEBACK" +$ else +$ cc_link_params = "/NODEBUG/NOTRACEBACK" +$ endif +$! +$ plibsys_src = "patomic-decc.c pcondvariable-posix.c pcryptohash-gost3411.c pcryptohash-md5.c" +$ plibsys_src = plibsys_src + " pcryptohash-sha1.c pcryptohash-sha2-256.c pcryptohash-sha2-512.c" +$ plibsys_src = plibsys_src + " pcryptohash-sha3.c pcryptohash.c pdir-posix.c pdir.c" +$ plibsys_src = plibsys_src + " perror.c pfile.c phashtable.c pinifile.c pipc.c plibraryloader-posix.c" +$ plibsys_src = plibsys_src + " plist.c pmain.c pmem.c pmutex-posix.c pprocess.c prwlock-posix.c" +$ plibsys_src = plibsys_src + " psemaphore-posix.c pshm-posix.c pshmbuffer.c psocket.c" +$ plibsys_src = plibsys_src + " psocketaddress.c pspinlock-decc.c pstring.c psysclose-unix.c" +$ plibsys_src = plibsys_src + " ptimeprofiler-posix.c ptimeprofiler.c ptree-avl.c ptree-bst.c" +$ plibsys_src = plibsys_src + " ptree-rb.c ptree.c puthread-posix.c puthread.c" +$! +$! Inform about building +$! --------------------- +$! +$ if build_64 .eqs. "1" +$ then +$ 'vo_c' "Building for ''arch_name' (64-bit)" +$ else +$ 'vo_c' "Building for ''arch_name' (32-bit)" +$ endif +$! +$! Compile library modules +$! ----------------------- +$! +$ 'vo_c' "Compiling object modules..." +$ src_counter = 0 +$ plibsys_src = f$edit(plibsys_src, "COMPRESS") +$ plibsys_objs = "" +$! +$ src_loop: +$ next_src = f$element (src_counter, " ", plibsys_src) +$ if next_src .nes. "" .and. next_src .nes. " " +$ then +$ 'vo_c' "[CC] ''next_src'" +$ cc [---.src]'next_src' 'cc_params' +$! +$ src_counter = src_counter + 1 +$! +$ obj_file = f$extract (0, f$length (next_src) - 1, next_src) + "obj" +$ plibsys_objs = plibsys_objs + "''obj_file'," +$ purge 'obj_file' +$! +$ goto src_loop +$ endif +$! +$ plibsys_objs = f$extract (0, f$length (plibsys_objs) - 1, plibsys_objs) +$! +$! Create library +$! -------------- +$! +$ 'vo_c' "Creating object library..." +$ library/CREATE/INSERT/REPLACE /LIST=PLIBSYS.LIS PLIBSYS.OLB 'plibsys_objs' +$ library/COMPRESS PLIBSYS.OLB +$ purge PLIBSYS.OLB +$ purge PLIBSYS.LIS +$! +$ 'vo_c' "Creating shared library..." +$ link/SHAREABLE=PLIBSYS.EXE /MAP=PLIBSYS.MAP 'cc_link_params' 'plibsys_objs', [-]plibsys.opt/OPTION +$ purge PLIBSYS.EXE +$ purge PLIBSYS.MAP +$! +$! Testing area +$! ------------ +$! +$ build_tests: +$ test_list_full = "patomic pcondvariable pcryptohash pdir" +$ test_list_full = test_list_full + " perror pfile phashtable pinifile plibraryloader plist" +$ test_list_full = test_list_full + " pmacros pmain pmem pmutex pprocess prwlock psemaphore" +$ test_list_full = test_list_full + " pshm pshmbuffer psocket psocketaddress pspinlock pstdarg" +$ test_list_full = test_list_full + " pstring ptimeprofiler ptree ptypes puthread" +$! +$ if is_tests .eqs. "0" +$ then +$ goto build_done +$ endif +$! +$! Write link options file +$! ----------------------- +$! +$ if f$search("plibsys_link.opt") .nes. "" then delete plibsys_link.opt;* +$! +$ open/write/error=link_write_end lhf plibsys_link.opt +$ write lhf "''objdir'PLIBSYS.EXE/SHARE" +$ write lhf "" +$ link_write_end: +$ close lhf +$! +$! Compile tests +$! ------------------------- +$! +$ if test_list .nes. "" +$ then +$ plibsys_tests = f$edit(test_list, "TRIM") +$ else +$ plibsys_tests = test_list_full +$ endif +$! +$ 'vo_c' "Compiling test executables..." +$ test_counter = 0 +$ plibsys_tests = f$edit(plibsys_tests, "COMPRESS") +$! +$ cxx_params = "/INCLUDE=(''objdir',''base_src_dir')" +$ cxx_params = cxx_params + "/DEFINE=(__USE_STD_IOSTREAM)/NAMES=(AS_IS, SHORTENED)" +$ cxx_params = cxx_params + "/FLOAT=IEEE/IEEE_MODE=DENORM_RESULTS" +$! +$ if build_64 .eqs. "1" +$ then +$ set noon +$ define/user/nolog sys$output NL: +$ define/user/nolog sys$error NL: +$ cxx/POINTER_SIZE=64=ARGV NL: +$! +$ if ($STATUS .and. %X0FFF0000) .eq. %X00030000 +$ then +$! +$! If we got here, it means DCL complained like this: +$! %DCL-W-NOVALU, value not allowed - remove value specification +$! \64=\ +$! +$! If the compiler was run, logicals defined in /USER would +$! have been deassigned automatically. However, when DCL +$! complains, they aren't, so we do it here (it might be +$! unnecessary, but just in case there will be another error +$! message further on that we don't want to miss). +$! +$ deassign/user/nolog sys$error +$ deassign/user/nolog sys$output +$ cxx_params = cxx_params + "/POINTER_SIZE=64" +$ else +$ cxx_params = cxx_params + "/POINTER_SIZE=64=ARGV" +$ endif +$ else +$ cxx_params = cxx_params + "/POINTER_SIZE=32" +$ endif +$! +$ if is_debug .eqs. "1" +$ then +$ cxx_params = cxx_params + "/DEBUG/NOOPTIMIZE/LIST/SHOW=ALL" +$ endif +$! +$ test_loop: +$ next_test = f$element (test_counter, " ", plibsys_tests) +$ if next_test .nes. "" .and. next_test .nes. " " +$ then +$ next_test = next_test + "_test" +$ 'vo_c' "[CXX ] ''next_test'.cpp" +$ cxx [---.tests]'next_test'.cpp 'cxx_params' +$! +$ 'vo_c' "[CXXLINK] ''next_test'.obj" +$ cxxlink 'next_test'.obj,'objdir'plibsys_link.opt/OPTION /THREADS_ENABLE +$! +$ if f$search("CXX_REPOSITORY.DIR") .nes. "" +$ then +$ set prot=w:d []CXX_REPOSITORY.DIR;* +$ delete/tree [.CXX_REPOSITORY...]*.*;* +$ delete []CXX_REPOSITORY.DIR;* +$ endif +$! +$ purge 'next_test'.obj +$ purge 'next_test'.exe +$! +$ test_counter = test_counter + 1 +$ goto test_loop +$ endif +$! +$ build_done: +$ 'vo_c' "Build done." +$! +$! Run unit tests +$! -------------- +$! +$ if run_tests .eqs. "0" +$ then +$ if is_tests .eqs. "1" +$ then +$ 'vo_c' "To run tests invoke: @build_vms.com NOLIB RUN_TESTS" +$ endif +$ goto common_exit +$ endif +$! +$ 'vo_c' "Running tests..." +$ test_counter = 0 +$ tests_passed = 0 +$! +$ run_loop: +$ next_test = f$element (test_counter, " ", test_list_full) +$ if next_test .nes. "" .and. next_test .nes. " " +$ then +$ if f$search("''next_test'_test.exe") .eqs. "" +$ then +$ 'vo_c' "[SKIP] Test not found: ''next_test'" +$ goto run_loop_next +$ endif +$! +$ 'vo_c' "[RUN ] ''next_test'" +$! +$ define/user/nolog sys$error NL: +$ define/user/nolog sys$output NL: +$ define/user/nolog plibsys 'objdir'PLIBSYS.EXE +$ define/user/nolog test_imgdir 'objdir' +$! +$! Disable error cheking for the test binary +$! +$ set noon +$! +$ xrun := $test_imgdir:'next_test'_test.exe +$ if next_test .eqs. "plibraryloader" +$ then +$ xrun 'objdir'PLIBSYS.EXE +$ else +$ xrun +$ endif +$! +$ if $STATUS .eqs. "%X00000001" +$ then +$ 'vo_c' "[PASS] Test passed: ''next_test'" +$ tests_passed = tests_passed + 1 +$ else +$ 'vo_c' "[FAIL] *** Test failed: ''next_test'" +$ endif +$! +$ set on +$! +$ run_loop_next: +$ test_counter = test_counter + 1 +$ goto run_loop +$ endif +$! +$ 'vo_c' "Tests passed: ''tests_passed'/''test_counter'" +$! +$! In case of error during the last test +$ deassign/user/nolog sys$error +$ deassign/user/nolog sys$output +$ deassign/user/nolog plibsys +$ deassign/user/nolog test_imgdir +$! +$ common_exit: +$ set default 'orig_def' +$ exit diff --git a/3rdparty/plibsys/platforms/vms-general/plibsys.opt b/3rdparty/plibsys/platforms/vms-general/plibsys.opt new file mode 100644 index 0000000..408b884 --- /dev/null +++ b/3rdparty/plibsys/platforms/vms-general/plibsys.opt @@ -0,0 +1,540 @@ +GSMATCH=LEQUAL,3,0 +IDENTIFICATION="plibsys" +CASE_SENSITIVE=YES +! +! patomic.h +! +SYMBOL_VECTOR=(p_atomic_int_get=PROCEDURE) +SYMBOL_VECTOR=(P_ATOMIC_INT_GET/p_atomic_int_get=PROCEDURE) +SYMBOL_VECTOR=(p_atomic_int_set=PROCEDURE) +SYMBOL_VECTOR=(P_ATOMIC_INT_SET/p_atomic_int_set=PROCEDURE) +SYMBOL_VECTOR=(p_atomic_int_inc=PROCEDURE) +SYMBOL_VECTOR=(P_ATOMIC_INT_INC/p_atomic_int_inc=PROCEDURE) +SYMBOL_VECTOR=(p_atomic_int_dec_and_test=PROCEDURE) +SYMBOL_VECTOR=(P_ATOMIC_INT_DEC_AND_TEST/p_atomic_int_dec_and_test=PROCEDURE) +SYMBOL_VECTOR=(p_atomic_int_compare_an2fhrots$=PROCEDURE) +SYMBOL_VECTOR=(P_ATOMIC_INT_COMPARE_AN2UA3PBG$/p_atomic_int_compare_an2fhrots$=PROCEDURE) +SYMBOL_VECTOR=(p_atomic_int_add=PROCEDURE) +SYMBOL_VECTOR=(P_ATOMIC_INT_ADD/p_atomic_int_add=PROCEDURE) +SYMBOL_VECTOR=(p_atomic_int_and=PROCEDURE) +SYMBOL_VECTOR=(P_ATOMIC_INT_AND/p_atomic_int_and=PROCEDURE) +SYMBOL_VECTOR=(p_atomic_int_or=PROCEDURE) +SYMBOL_VECTOR=(P_ATOMIC_INT_OR/p_atomic_int_or=PROCEDURE) +SYMBOL_VECTOR=(p_atomic_int_xor=PROCEDURE) +SYMBOL_VECTOR=(P_ATOMIC_INT_XOR/p_atomic_int_xor=PROCEDURE) +SYMBOL_VECTOR=(p_atomic_pointer_get=PROCEDURE) +SYMBOL_VECTOR=(P_ATOMIC_POINTER_GET/p_atomic_pointer_get=PROCEDURE) +SYMBOL_VECTOR=(p_atomic_pointer_set=PROCEDURE) +SYMBOL_VECTOR=(P_ATOMIC_POINTER_SET/p_atomic_pointer_set=PROCEDURE) +SYMBOL_VECTOR=(p_atomic_pointer_compar0usq95l$=PROCEDURE) +SYMBOL_VECTOR=(P_ATOMIC_POINTER_COMPAR19ERBSM$/p_atomic_pointer_compar0usq95l$=PROCEDURE) +SYMBOL_VECTOR=(p_atomic_pointer_add=PROCEDURE) +SYMBOL_VECTOR=(P_ATOMIC_POINTER_ADD/p_atomic_pointer_add=PROCEDURE) +SYMBOL_VECTOR=(p_atomic_pointer_and=PROCEDURE) +SYMBOL_VECTOR=(P_ATOMIC_POINTER_AND/p_atomic_pointer_and=PROCEDURE) +SYMBOL_VECTOR=(p_atomic_pointer_or=PROCEDURE) +SYMBOL_VECTOR=(P_ATOMIC_POINTER_OR/p_atomic_pointer_or=PROCEDURE) +SYMBOL_VECTOR=(p_atomic_pointer_xor=PROCEDURE) +SYMBOL_VECTOR=(P_ATOMIC_POINTER_XOR/p_atomic_pointer_xor=PROCEDURE) +SYMBOL_VECTOR=(p_atomic_is_lock_free=PROCEDURE) +SYMBOL_VECTOR=(P_ATOMIC_IS_LOCK_FREE/p_atomic_is_lock_free=PROCEDURE) +! +! pcondvariable.h +! +SYMBOL_VECTOR=(p_cond_variable_new=PROCEDURE) +SYMBOL_VECTOR=(P_COND_VARIABLE_NEW/p_cond_variable_new=PROCEDURE) +SYMBOL_VECTOR=(p_cond_variable_free=PROCEDURE) +SYMBOL_VECTOR=(P_COND_VARIABLE_FREE/p_cond_variable_free=PROCEDURE) +SYMBOL_VECTOR=(p_cond_variable_wait=PROCEDURE) +SYMBOL_VECTOR=(P_COND_VARIABLE_WAIT/p_cond_variable_wait=PROCEDURE) +SYMBOL_VECTOR=(p_cond_variable_signal=PROCEDURE) +SYMBOL_VECTOR=(P_COND_VARIABLE_SIGNAL/p_cond_variable_signal=PROCEDURE) +SYMBOL_VECTOR=(p_cond_variable_broadcast=PROCEDURE) +SYMBOL_VECTOR=(P_COND_VARIABLE_BROADCAST/p_cond_variable_broadcast=PROCEDURE) +! +! pcryptohash.h +! +SYMBOL_VECTOR=(p_crypto_hash_new=PROCEDURE) +SYMBOL_VECTOR=(P_CRYPTO_HASH_NEW/p_crypto_hash_new=PROCEDURE) +SYMBOL_VECTOR=(p_crypto_hash_update=PROCEDURE) +SYMBOL_VECTOR=(P_CRYPTO_HASH_UPDATE/p_crypto_hash_update=PROCEDURE) +SYMBOL_VECTOR=(p_crypto_hash_reset=PROCEDURE) +SYMBOL_VECTOR=(P_CRYPTO_HASH_RESET/p_crypto_hash_reset=PROCEDURE) +SYMBOL_VECTOR=(p_crypto_hash_get_string=PROCEDURE) +SYMBOL_VECTOR=(P_CRYPTO_HASH_GET_STRING/p_crypto_hash_get_string=PROCEDURE) +SYMBOL_VECTOR=(p_crypto_hash_get_digest=PROCEDURE) +SYMBOL_VECTOR=(P_CRYPTO_HASH_GET_DIGEST/p_crypto_hash_get_digest=PROCEDURE) +SYMBOL_VECTOR=(p_crypto_hash_get_length=PROCEDURE) +SYMBOL_VECTOR=(P_CRYPTO_HASH_GET_LENGTH/p_crypto_hash_get_length=PROCEDURE) +SYMBOL_VECTOR=(p_crypto_hash_get_type=PROCEDURE) +SYMBOL_VECTOR=(P_CRYPTO_HASH_GET_TYPE/p_crypto_hash_get_type=PROCEDURE) +SYMBOL_VECTOR=(p_crypto_hash_free=PROCEDURE) +SYMBOL_VECTOR=(P_CRYPTO_HASH_FREE/p_crypto_hash_free=PROCEDURE) +! +! pdir.h +! +SYMBOL_VECTOR=(p_dir_new=PROCEDURE) +SYMBOL_VECTOR=(P_DIR_NEW/p_dir_new=PROCEDURE) +SYMBOL_VECTOR=(p_dir_create=PROCEDURE) +SYMBOL_VECTOR=(P_DIR_CREATE/p_dir_create=PROCEDURE) +SYMBOL_VECTOR=(p_dir_remove=PROCEDURE) +SYMBOL_VECTOR=(P_DIR_REMOVE/p_dir_remove=PROCEDURE) +SYMBOL_VECTOR=(p_dir_is_exists=PROCEDURE) +SYMBOL_VECTOR=(P_DIR_IS_EXISTS/p_dir_is_exists=PROCEDURE) +SYMBOL_VECTOR=(p_dir_get_path=PROCEDURE) +SYMBOL_VECTOR=(P_DIR_GET_PATH/p_dir_get_path=PROCEDURE) +SYMBOL_VECTOR=(p_dir_get_next_entry=PROCEDURE) +SYMBOL_VECTOR=(P_DIR_GET_NEXT_ENTRY/p_dir_get_next_entry=PROCEDURE) +SYMBOL_VECTOR=(p_dir_rewind=PROCEDURE) +SYMBOL_VECTOR=(P_DIR_REWIND/p_dir_rewind=PROCEDURE) +SYMBOL_VECTOR=(p_dir_entry_free=PROCEDURE) +SYMBOL_VECTOR=(P_DIR_ENTRY_FREE/p_dir_entry_free=PROCEDURE) +SYMBOL_VECTOR=(p_dir_free=PROCEDURE) +SYMBOL_VECTOR=(P_DIR_FREE/p_dir_free=PROCEDURE) +! +! perror.h +! +SYMBOL_VECTOR=(p_error_new=PROCEDURE) +SYMBOL_VECTOR=(P_ERROR_NEW/p_error_new=PROCEDURE) +SYMBOL_VECTOR=(p_error_new_literal=PROCEDURE) +SYMBOL_VECTOR=(P_ERROR_NEW_LITERAL/p_error_new_literal=PROCEDURE) +SYMBOL_VECTOR=(p_error_get_message=PROCEDURE) +SYMBOL_VECTOR=(P_ERROR_GET_MESSAGE/p_error_get_message=PROCEDURE) +SYMBOL_VECTOR=(p_error_get_code=PROCEDURE) +SYMBOL_VECTOR=(P_ERROR_GET_CODE/p_error_get_code=PROCEDURE) +SYMBOL_VECTOR=(p_error_get_native_code=PROCEDURE) +SYMBOL_VECTOR=(P_ERROR_GET_NATIVE_CODE/p_error_get_native_code=PROCEDURE) +SYMBOL_VECTOR=(p_error_get_domain=PROCEDURE) +SYMBOL_VECTOR=(P_ERROR_GET_DOMAIN/p_error_get_domain=PROCEDURE) +SYMBOL_VECTOR=(p_error_get_last_system=PROCEDURE) +SYMBOL_VECTOR=(P_ERROR_GET_LAST_SYSTEM/p_error_get_last_system=PROCEDURE) +SYMBOL_VECTOR=(p_error_get_last_net=PROCEDURE) +SYMBOL_VECTOR=(P_ERROR_GET_LAST_NET/p_error_get_last_net=PROCEDURE) +SYMBOL_VECTOR=(p_error_copy=PROCEDURE) +SYMBOL_VECTOR=(P_ERROR_COPY/p_error_copy=PROCEDURE) +SYMBOL_VECTOR=(p_error_set_error=PROCEDURE) +SYMBOL_VECTOR=(P_ERROR_SET_ERROR/p_error_set_error=PROCEDURE) +SYMBOL_VECTOR=(p_error_set_error_p=PROCEDURE) +SYMBOL_VECTOR=(P_ERROR_SET_ERROR_P/p_error_set_error_p=PROCEDURE) +SYMBOL_VECTOR=(p_error_set_code=PROCEDURE) +SYMBOL_VECTOR=(P_ERROR_SET_CODE/p_error_set_code=PROCEDURE) +SYMBOL_VECTOR=(p_error_set_native_code=PROCEDURE) +SYMBOL_VECTOR=(P_ERROR_SET_NATIVE_CODE/p_error_set_native_code=PROCEDURE) +SYMBOL_VECTOR=(p_error_set_message=PROCEDURE) +SYMBOL_VECTOR=(P_ERROR_SET_MESSAGE/p_error_set_message=PROCEDURE) +SYMBOL_VECTOR=(p_error_set_last_system=PROCEDURE) +SYMBOL_VECTOR=(P_ERROR_SET_LAST_SYSTEM/p_error_set_last_system=PROCEDURE) +SYMBOL_VECTOR=(p_error_set_last_net=PROCEDURE) +SYMBOL_VECTOR=(P_ERROR_SET_LAST_NET/p_error_set_last_net=PROCEDURE) +SYMBOL_VECTOR=(p_error_clear=PROCEDURE) +SYMBOL_VECTOR=(P_ERROR_CLEAR/p_error_clear=PROCEDURE) +SYMBOL_VECTOR=(p_error_free=PROCEDURE) +SYMBOL_VECTOR=(P_ERROR_FREE/p_error_free=PROCEDURE) +! +! pfile.h +! +SYMBOL_VECTOR=(p_file_is_exists=PROCEDURE) +SYMBOL_VECTOR=(P_ERROR_IS_EXISTS/p_file_is_exists=PROCEDURE) +SYMBOL_VECTOR=(p_file_remove=PROCEDURE) +SYMBOL_VECTOR=(P_FILE_REMOVE/p_file_remove=PROCEDURE) +! +! phashtable.h +! +SYMBOL_VECTOR=(p_hash_table_new=PROCEDURE) +SYMBOL_VECTOR=(P_HASH_TABLE_NEW/p_hash_table_new=PROCEDURE) +SYMBOL_VECTOR=(p_hash_table_insert=PROCEDURE) +SYMBOL_VECTOR=(P_HASH_TABLE_INSERT/p_hash_table_insert=PROCEDURE) +SYMBOL_VECTOR=(p_hash_table_lookup=PROCEDURE) +SYMBOL_VECTOR=(P_HASH_TABLE_LOOKUP/p_hash_table_lookup=PROCEDURE) +SYMBOL_VECTOR=(p_hash_table_keys=PROCEDURE) +SYMBOL_VECTOR=(P_HASH_TABLE_KEYS/p_hash_table_keys=PROCEDURE) +SYMBOL_VECTOR=(p_hash_table_values=PROCEDURE) +SYMBOL_VECTOR=(P_HASH_TABLE_VALUES/p_hash_table_values=PROCEDURE) +SYMBOL_VECTOR=(p_hash_table_free=PROCEDURE) +SYMBOL_VECTOR=(P_HASH_TABLE_FREE/p_hash_table_free=PROCEDURE) +SYMBOL_VECTOR=(p_hash_table_remove=PROCEDURE) +SYMBOL_VECTOR=(P_HASH_TABLE_REMOVE/p_hash_table_remove=PROCEDURE) +SYMBOL_VECTOR=(p_hash_table_lookup_by_value=PROCEDURE) +SYMBOL_VECTOR=(P_HASH_TABLE_LOOKUP_BY_VALUE/p_hash_table_lookup_by_value=PROCEDURE) +! +! pinifile.h +! +SYMBOL_VECTOR=(p_ini_file_new=PROCEDURE) +SYMBOL_VECTOR=(P_INI_FILE_NEW/p_ini_file_new=PROCEDURE) +SYMBOL_VECTOR=(p_ini_file_free=PROCEDURE) +SYMBOL_VECTOR=(P_INI_FILE_FREE/p_ini_file_free=PROCEDURE) +SYMBOL_VECTOR=(p_ini_file_parse=PROCEDURE) +SYMBOL_VECTOR=(P_INI_FILE_PARSE/p_ini_file_parse=PROCEDURE) +SYMBOL_VECTOR=(p_ini_file_is_parsed=PROCEDURE) +SYMBOL_VECTOR=(P_INI_FILE_IS_PARSED/p_ini_file_is_parsed=PROCEDURE) +SYMBOL_VECTOR=(p_ini_file_sections=PROCEDURE) +SYMBOL_VECTOR=(P_INI_FILE_SECTIONS/p_ini_file_sections=PROCEDURE) +SYMBOL_VECTOR=(p_ini_file_keys=PROCEDURE) +SYMBOL_VECTOR=(P_INI_FILE_KEYS/p_ini_file_keys=PROCEDURE) +SYMBOL_VECTOR=(p_ini_file_is_key_exists=PROCEDURE) +SYMBOL_VECTOR=(P_INI_FILE_IS_KEY_EXISTS/p_ini_file_is_key_exists=PROCEDURE) +SYMBOL_VECTOR=(p_ini_file_parameter_string=PROCEDURE) +SYMBOL_VECTOR=(P_INI_FILE_PARAMETER_STRING/p_ini_file_parameter_string=PROCEDURE) +SYMBOL_VECTOR=(p_ini_file_parameter_int=PROCEDURE) +SYMBOL_VECTOR=(P_INI_FILE_PARAMETER_INT/p_ini_file_parameter_int=PROCEDURE) +SYMBOL_VECTOR=(p_ini_file_parameter_double=PROCEDURE) +SYMBOL_VECTOR=(P_INI_FILE_PARAMETER_DOUBLE/p_ini_file_parameter_double=PROCEDURE) +SYMBOL_VECTOR=(p_ini_file_parameter_boolean=PROCEDURE) +SYMBOL_VECTOR=(P_INI_FILE_PARAMETER_BOOLEAN/p_ini_file_parameter_boolean=PROCEDURE) +SYMBOL_VECTOR=(p_ini_file_parameter_list=PROCEDURE) +SYMBOL_VECTOR=(P_INI_FILE_PARAMETER_LIST/p_ini_file_parameter_list=PROCEDURE) +! +! plibraryloader.h +! +SYMBOL_VECTOR=(p_library_loader_new=PROCEDURE) +SYMBOL_VECTOR=(P_LIBRARY_LOADER_NEW/p_library_loader_new=PROCEDURE) +SYMBOL_VECTOR=(p_library_loader_get_symbol=PROCEDURE) +SYMBOL_VECTOR=(P_LIBRARY_LOADER_GET_SYMBOL/p_library_loader_get_symbol=PROCEDURE) +SYMBOL_VECTOR=(p_library_loader_free=PROCEDURE) +SYMBOL_VECTOR=(P_LIBRARY_LOADER_FREE/p_library_loader_free=PROCEDURE) +SYMBOL_VECTOR=(p_library_loader_get_last_error=PROCEDURE) +SYMBOL_VECTOR=(P_LIBRARY_LOADER_GET_LAST_ERROR/p_library_loader_get_last_error=PROCEDURE) +SYMBOL_VECTOR=(p_library_loader_is_ref_counted=PROCEDURE) +SYMBOL_VECTOR=(P_LIBRARY_LOADER_IS_REF_COUNTED/p_library_loader_is_ref_counted=PROCEDURE) +! +! plist.h +! +SYMBOL_VECTOR=(p_list_append=PROCEDURE) +SYMBOL_VECTOR=(P_LIST_APPEND/p_list_append=PROCEDURE) +SYMBOL_VECTOR=(p_list_remove=PROCEDURE) +SYMBOL_VECTOR=(P_LIST_REMOVE/p_list_remove=PROCEDURE) +SYMBOL_VECTOR=(p_list_foreach=PROCEDURE) +SYMBOL_VECTOR=(P_LIST_FOREACH/p_list_foreach=PROCEDURE) +SYMBOL_VECTOR=(p_list_free=PROCEDURE) +SYMBOL_VECTOR=(P_LIST_FREE/p_list_free=PROCEDURE) +SYMBOL_VECTOR=(p_list_last=PROCEDURE) +SYMBOL_VECTOR=(P_LIST_LAST/p_list_last=PROCEDURE) +SYMBOL_VECTOR=(p_list_length=PROCEDURE) +SYMBOL_VECTOR=(P_LIST_LENGTH/p_list_length=PROCEDURE) +SYMBOL_VECTOR=(p_list_prepend=PROCEDURE) +SYMBOL_VECTOR=(P_LIST_PREPEND/p_list_prepend=PROCEDURE) +SYMBOL_VECTOR=(p_list_reverse=PROCEDURE) +SYMBOL_VECTOR=(P_LIST_REVERSE/p_list_reverse=PROCEDURE) +! +! pmain.h +! +SYMBOL_VECTOR=(p_libsys_init=PROCEDURE) +SYMBOL_VECTOR=(P_LIBSYS_INIT/p_libsys_init=PROCEDURE) +SYMBOL_VECTOR=(p_libsys_init_full=PROCEDURE) +SYMBOL_VECTOR=(P_LIBSYS_INIT_FULL/p_libsys_init_full=PROCEDURE) +SYMBOL_VECTOR=(p_libsys_shutdown=PROCEDURE) +SYMBOL_VECTOR=(P_LIBSYS_SHUTDOWN/p_libsys_shutdown=PROCEDURE) +SYMBOL_VECTOR=(p_libsys_version=PROCEDURE) +SYMBOL_VECTOR=(P_LIBSYS_VERSION/p_libsys_version=PROCEDURE) +! +! pmem.h +! +SYMBOL_VECTOR=(p_malloc=PROCEDURE) +SYMBOL_VECTOR=(P_MALLOC/p_malloc=PROCEDURE) +SYMBOL_VECTOR=(p_malloc0=PROCEDURE) +SYMBOL_VECTOR=(P_MALLOC0/p_malloc0=PROCEDURE) +SYMBOL_VECTOR=(p_realloc=PROCEDURE) +SYMBOL_VECTOR=(P_REALLOC/p_realloc=PROCEDURE) +SYMBOL_VECTOR=(p_free=PROCEDURE) +SYMBOL_VECTOR=(P_FREE/p_free=PROCEDURE) +SYMBOL_VECTOR=(p_mem_set_vtable=PROCEDURE) +SYMBOL_VECTOR=(P_MEM_SET_VTABLE/p_mem_set_vtable=PROCEDURE) +SYMBOL_VECTOR=(p_mem_restore_vtable=PROCEDURE) +SYMBOL_VECTOR=(P_MEM_RESTORE_VTABLE/p_mem_restore_vtable=PROCEDURE) +SYMBOL_VECTOR=(p_mem_mmap=PROCEDURE) +SYMBOL_VECTOR=(P_MEM_MMAP/p_mem_mmap=PROCEDURE) +SYMBOL_VECTOR=(p_mem_munmap=PROCEDURE) +SYMBOL_VECTOR=(P_MEM_MUNMAP/p_mem_munmap=PROCEDURE) +! +! pmutex.h +! +SYMBOL_VECTOR=(p_mutex_new=PROCEDURE) +SYMBOL_VECTOR=(P_MUTEX_NEW/p_mutex_new=PROCEDURE) +SYMBOL_VECTOR=(p_mutex_lock=PROCEDURE) +SYMBOL_VECTOR=(P_MUTEX_LOCK/p_mutex_lock=PROCEDURE) +SYMBOL_VECTOR=(p_mutex_trylock=PROCEDURE) +SYMBOL_VECTOR=(P_MUTEX_TRYLOCK/p_mutex_trylock=PROCEDURE) +SYMBOL_VECTOR=(p_mutex_unlock=PROCEDURE) +SYMBOL_VECTOR=(P_MUTEX_UNLOCK/p_mutex_unlock=PROCEDURE) +SYMBOL_VECTOR=(p_mutex_free=PROCEDURE) +SYMBOL_VECTOR=(P_MUTEX_FREE/p_mutex_free=PROCEDURE) +! +! pprocess.h +! +SYMBOL_VECTOR=(p_process_get_current_pid=PROCEDURE) +SYMBOL_VECTOR=(P_PROCESS_GET_CURRENT_PID/p_process_get_current_pid=PROCEDURE) +SYMBOL_VECTOR=(p_process_is_running=PROCEDURE) +SYMBOL_VECTOR=(P_PROCESS_IS_RUNNING/p_process_is_running=PROCEDURE) +! +! prwlock.h +! +SYMBOL_VECTOR=(p_rwlock_new=PROCEDURE) +SYMBOL_VECTOR=(P_RWLOCK_NEW/p_rwlock_new=PROCEDURE) +SYMBOL_VECTOR=(p_rwlock_reader_lock=PROCEDURE) +SYMBOL_VECTOR=(P_RWLOCK_READER_LOCK/p_rwlock_reader_lock=PROCEDURE) +SYMBOL_VECTOR=(p_rwlock_reader_trylock=PROCEDURE) +SYMBOL_VECTOR=(P_RWLOCK_READER_TRYLOCK/p_rwlock_reader_trylock=PROCEDURE) +SYMBOL_VECTOR=(p_rwlock_reader_unlock=PROCEDURE) +SYMBOL_VECTOR=(P_RWLOCK_READER_UNLOCK/p_rwlock_reader_unlock=PROCEDURE) +SYMBOL_VECTOR=(p_rwlock_writer_lock=PROCEDURE) +SYMBOL_VECTOR=(P_RWLOCK_WRITER_LOCK/p_rwlock_writer_lock=PROCEDURE) +SYMBOL_VECTOR=(p_rwlock_writer_trylock=PROCEDURE) +SYMBOL_VECTOR=(P_RWLOCK_WRITER_TRYLOCK/p_rwlock_writer_trylock=PROCEDURE) +SYMBOL_VECTOR=(p_rwlock_writer_unlock=PROCEDURE) +SYMBOL_VECTOR=(P_RWLOCK_WRITER_UNLOCK/p_rwlock_writer_unlock=PROCEDURE) +SYMBOL_VECTOR=(p_rwlock_free=PROCEDURE) +SYMBOL_VECTOR=(P_RWLOCK_FREE/p_rwlock_free=PROCEDURE) +! +! psemaphore.h +! +SYMBOL_VECTOR=(p_semaphore_new=PROCEDURE) +SYMBOL_VECTOR=(P_SEMAPHORE_NEW/p_semaphore_new=PROCEDURE) +SYMBOL_VECTOR=(p_semaphore_take_ownership=PROCEDURE) +SYMBOL_VECTOR=(P_SEMAPHORE_TAKE_OWNERSHIP/p_semaphore_take_ownership=PROCEDURE) +SYMBOL_VECTOR=(p_semaphore_acquire=PROCEDURE) +SYMBOL_VECTOR=(P_SEMAPHORE_ACQUIRE/p_semaphore_acquire=PROCEDURE) +SYMBOL_VECTOR=(p_semaphore_release=PROCEDURE) +SYMBOL_VECTOR=(P_SEMAPHORE_RELEASE/p_semaphore_release=PROCEDURE) +SYMBOL_VECTOR=(p_semaphore_free=PROCEDURE) +SYMBOL_VECTOR=(P_SEMAPHORE_FREE/p_semaphore_free=PROCEDURE) +! +! pshm.h +! +SYMBOL_VECTOR=(p_shm_new=PROCEDURE) +SYMBOL_VECTOR=(P_SHM_NEW/p_shm_new=PROCEDURE) +SYMBOL_VECTOR=(p_shm_take_ownership=PROCEDURE) +SYMBOL_VECTOR=(P_SHM_TAKE_OWNERSHIP/p_shm_take_ownership=PROCEDURE) +SYMBOL_VECTOR=(p_shm_free=PROCEDURE) +SYMBOL_VECTOR=(P_SHM_FREE/p_shm_free=PROCEDURE) +SYMBOL_VECTOR=(p_shm_lock=PROCEDURE) +SYMBOL_VECTOR=(P_SHM_LOCK/p_shm_lock=PROCEDURE) +SYMBOL_VECTOR=(p_shm_unlock=PROCEDURE) +SYMBOL_VECTOR=(P_SHM_UNLOCK/p_shm_unlock=PROCEDURE) +SYMBOL_VECTOR=(p_shm_get_address=PROCEDURE) +SYMBOL_VECTOR=(P_SHM_GET_ADDRESS/p_shm_get_address=PROCEDURE) +SYMBOL_VECTOR=(p_shm_get_size=PROCEDURE) +SYMBOL_VECTOR=(P_SHM_GET_SIZE/p_shm_get_size=PROCEDURE) +! +! pshmbuffer.h +! +SYMBOL_VECTOR=(p_shm_buffer_new=PROCEDURE) +SYMBOL_VECTOR=(P_SHM_BUFFER_NEW/p_shm_buffer_new=PROCEDURE) +SYMBOL_VECTOR=(p_shm_buffer_free=PROCEDURE) +SYMBOL_VECTOR=(P_SHM_BUFFER_FREE/p_shm_buffer_free=PROCEDURE) +SYMBOL_VECTOR=(p_shm_buffer_take_ownership=PROCEDURE) +SYMBOL_VECTOR=(P_SHM_BUFFER_TAKE_OWNERSHIP/p_shm_buffer_take_ownership=PROCEDURE) +SYMBOL_VECTOR=(p_shm_buffer_read=PROCEDURE) +SYMBOL_VECTOR=(P_SHM_BUFFER_READ/p_shm_buffer_read=PROCEDURE) +SYMBOL_VECTOR=(p_shm_buffer_write=PROCEDURE) +SYMBOL_VECTOR=(P_SHM_BUFFER_WRITE/p_shm_buffer_write=PROCEDURE) +SYMBOL_VECTOR=(p_shm_buffer_get_free_space=PROCEDURE) +SYMBOL_VECTOR=(P_SHM_BUFFER_GET_FREE_SPACE/p_shm_buffer_get_free_space=PROCEDURE) +SYMBOL_VECTOR=(p_shm_buffer_get_used_space=PROCEDURE) +SYMBOL_VECTOR=(P_SHM_BUFFER_GET_USED_SPACE/p_shm_buffer_get_used_space=PROCEDURE) +SYMBOL_VECTOR=(p_shm_buffer_clear=PROCEDURE) +SYMBOL_VECTOR=(P_SHM_BUFFER_CLEAR/p_shm_buffer_clear=PROCEDURE) +! +! psocket.h +! +SYMBOL_VECTOR=(p_socket_new_from_fd=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_NEW_FROM_FD/p_socket_new_from_fd=PROCEDURE) +SYMBOL_VECTOR=(p_socket_new=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_NEW/p_socket_new=PROCEDURE) +SYMBOL_VECTOR=(p_socket_get_fd=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_GET_FD/p_socket_get_fd=PROCEDURE) +SYMBOL_VECTOR=(p_socket_get_family=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_GET_FAMILY/p_socket_get_family=PROCEDURE) +SYMBOL_VECTOR=(p_socket_get_type=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_GET_TYPE/p_socket_get_type=PROCEDURE) +SYMBOL_VECTOR=(p_socket_get_protocol=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_GET_PROTOCOL/p_socket_get_protocol=PROCEDURE) +SYMBOL_VECTOR=(p_socket_get_keepalive=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_GET_KEEPALIVE/p_socket_get_keepalive=PROCEDURE) +SYMBOL_VECTOR=(p_socket_get_blocking=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_GET_BLOCKING/p_socket_get_blocking=PROCEDURE) +SYMBOL_VECTOR=(p_socket_get_listen_backlog=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_GET_LISTEN_BACKLOG/p_socket_get_listen_backlog=PROCEDURE) +SYMBOL_VECTOR=(p_socket_get_timeout=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_GET_TIMEOUT/p_socket_get_timeout=PROCEDURE) +SYMBOL_VECTOR=(p_socket_get_local_address=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_GET_LOCAL_ADDRESS/p_socket_get_local_address=PROCEDURE) +SYMBOL_VECTOR=(p_socket_get_remote_address=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_GET_REMOTE_ADDRESS/p_socket_get_remote_address=PROCEDURE) +SYMBOL_VECTOR=(p_socket_is_connected=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_IS_CONNECTED/p_socket_is_connected=PROCEDURE) +SYMBOL_VECTOR=(p_socket_is_closed=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_IS_CLOSED/p_socket_is_closed=PROCEDURE) +SYMBOL_VECTOR=(p_socket_check_connect_result=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_CHECK_CONNECT_RESULT/p_socket_check_connect_result=PROCEDURE) +SYMBOL_VECTOR=(p_socket_set_keepalive=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_SET_KEEPALIVE/p_socket_set_keepalive=PROCEDURE) +SYMBOL_VECTOR=(p_socket_set_blocking=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_SET_BLOCKING/p_socket_set_blocking=PROCEDURE) +SYMBOL_VECTOR=(p_socket_set_listen_backlog=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_SET_LISTEN_BACKLOG/p_socket_set_listen_backlog=PROCEDURE) +SYMBOL_VECTOR=(p_socket_set_timeout=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_SET_TIMEOUT/p_socket_set_timeout=PROCEDURE) +SYMBOL_VECTOR=(p_socket_bind=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_BIND/p_socket_bind=PROCEDURE) +SYMBOL_VECTOR=(p_socket_connect=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_CONNECT/p_socket_connect=PROCEDURE) +SYMBOL_VECTOR=(p_socket_listen=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_LISTEN/p_socket_listen=PROCEDURE) +SYMBOL_VECTOR=(p_socket_accept=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_ACCEPT/p_socket_accept=PROCEDURE) +SYMBOL_VECTOR=(p_socket_receive=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_RECEIVE/p_socket_receive=PROCEDURE) +SYMBOL_VECTOR=(p_socket_receive_from=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_RECEIVE_FROM/p_socket_receive_from=PROCEDURE) +SYMBOL_VECTOR=(p_socket_send=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_SEND/p_socket_send=PROCEDURE) +SYMBOL_VECTOR=(p_socket_send_to=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_SEND_TO/p_socket_send_to=PROCEDURE) +SYMBOL_VECTOR=(p_socket_close=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_CLOSE/p_socket_close=PROCEDURE) +SYMBOL_VECTOR=(p_socket_shutdown=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_SHUTDOWN/p_socket_shutdown=PROCEDURE) +SYMBOL_VECTOR=(p_socket_free=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_FREE/p_socket_free=PROCEDURE) +SYMBOL_VECTOR=(p_socket_set_buffer_size=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_SET_BUFFER_SIZE/p_socket_set_buffer_size=PROCEDURE) +SYMBOL_VECTOR=(p_socket_io_condition_wait=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_IO_CONDITION_WAIT/p_socket_io_condition_wait=PROCEDURE) +! +! psocketaddress.h +! +SYMBOL_VECTOR=(p_socket_address_new_fr1g0bamc$=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_ADDRESS_NEW_FR0V6PAD7$/p_socket_address_new_fr1g0bamc$=PROCEDURE) +SYMBOL_VECTOR=(p_socket_address_new=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_ADDRESS_NEW/p_socket_address_new=PROCEDURE) +SYMBOL_VECTOR=(p_socket_address_new_any=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_ADDRESS_NEW_ANY/p_socket_address_new_any=PROCEDURE) +SYMBOL_VECTOR=(p_socket_address_new_loopback=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_ADDRESS_NEW_LOOPBACK/p_socket_address_new_loopback=PROCEDURE) +SYMBOL_VECTOR=(p_socket_address_to_native=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_ADDRESS_TO_NATIVE/p_socket_address_to_native=PROCEDURE) +SYMBOL_VECTOR=(p_socket_address_get_na1kai9ab$=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_ADDRESS_GET_NA0SBOC5O$/p_socket_address_get_na1kai9ab$=PROCEDURE) +SYMBOL_VECTOR=(p_socket_address_get_family=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_ADDRESS_GET_FAMILY/p_socket_address_get_family=PROCEDURE) +SYMBOL_VECTOR=(p_socket_address_get_address=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_ADDRESS_GET_ADDRESS/p_socket_address_get_address=PROCEDURE) +SYMBOL_VECTOR=(p_socket_address_get_port=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_ADDRESS_GET_PORT/p_socket_address_get_port=PROCEDURE) +SYMBOL_VECTOR=(p_socket_address_get_flow_info=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_ADDRESS_GET_FLOW_INFO/p_socket_address_get_flow_info=PROCEDURE) +SYMBOL_VECTOR=(p_socket_address_get_scope_id=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_ADDRESS_GET_SCOPE_ID/p_socket_address_get_scope_id=PROCEDURE) +SYMBOL_VECTOR=(p_socket_address_set_flow_info=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_ADDRESS_SET_FLOW_INFO/p_socket_address_set_flow_info=PROCEDURE) +SYMBOL_VECTOR=(p_socket_address_set_scope_id=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_ADDRESS_SET_SCOPE_ID/p_socket_address_set_scope_id=PROCEDURE) +SYMBOL_VECTOR=(p_socket_address_is_flo3bgg0hi$=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_ADDRESS_IS_FLO1N1P65T$/p_socket_address_is_flo3bgg0hi$=PROCEDURE) +SYMBOL_VECTOR=(p_socket_address_is_sco2c7455c$=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_ADDRESS_IS_SCO1COK854$/p_socket_address_is_sco2c7455c$=PROCEDURE) +SYMBOL_VECTOR=(p_socket_address_is_ipv3s9t3vi$=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_ADDRESS_IS_IPV13UAVM5$/p_socket_address_is_ipv3s9t3vi$=PROCEDURE) +SYMBOL_VECTOR=(p_socket_address_is_any=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_ADDRESS_IS_ANY/p_socket_address_is_any=PROCEDURE) +SYMBOL_VECTOR=(p_socket_address_is_loopback=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_ADDRESS_IS_LOOPBACK/p_socket_address_is_loopback=PROCEDURE) +SYMBOL_VECTOR=(p_socket_address_free=PROCEDURE) +SYMBOL_VECTOR=(P_SOCKET_ADDRESS_FREE/p_socket_address_free=PROCEDURE) +! +! pspinlock.h +! +SYMBOL_VECTOR=(p_spinlock_new=PROCEDURE) +SYMBOL_VECTOR=(P_SPINLOCK_NEW/p_spinlock_new=PROCEDURE) +SYMBOL_VECTOR=(p_spinlock_lock=PROCEDURE) +SYMBOL_VECTOR=(P_SPINLOCK_LOCK/p_spinlock_lock=PROCEDURE) +SYMBOL_VECTOR=(p_spinlock_trylock=PROCEDURE) +SYMBOL_VECTOR=(P_SPINLOCK_TRYLOCK/p_spinlock_trylock=PROCEDURE) +SYMBOL_VECTOR=(p_spinlock_unlock=PROCEDURE) +SYMBOL_VECTOR=(P_SPINLOCK_UNLOCK/p_spinlock_unlock=PROCEDURE) +SYMBOL_VECTOR=(p_spinlock_free=PROCEDURE) +SYMBOL_VECTOR=(P_SPINLOCK_FREE/p_spinlock_free=PROCEDURE) +! +! pstring.h +! +SYMBOL_VECTOR=(p_strdup=PROCEDURE) +SYMBOL_VECTOR=(P_STRDUP/p_strdup=PROCEDURE) +SYMBOL_VECTOR=(p_strchomp=PROCEDURE) +SYMBOL_VECTOR=(P_STRCHOMP/p_strchomp=PROCEDURE) +SYMBOL_VECTOR=(p_strtok=PROCEDURE) +SYMBOL_VECTOR=(P_STRTOK/p_strtok=PROCEDURE) +SYMBOL_VECTOR=(p_strtod=PROCEDURE) +SYMBOL_VECTOR=(P_STRTOD/p_strtod=PROCEDURE) +! +! ptimeprofiler.h +! +SYMBOL_VECTOR=(p_time_profiler_new=PROCEDURE) +SYMBOL_VECTOR=(P_TIME_PROFILER_NEW/p_time_profiler_new=PROCEDURE) +SYMBOL_VECTOR=(p_time_profiler_reset=PROCEDURE) +SYMBOL_VECTOR=(P_TIME_PROFILER_RESET/p_time_profiler_reset=PROCEDURE) +SYMBOL_VECTOR=(p_time_profiler_elapsed_usecs=PROCEDURE) +SYMBOL_VECTOR=(P_TIME_PROFILER_ELAPSED_USECS/p_time_profiler_elapsed_usecs=PROCEDURE) +SYMBOL_VECTOR=(p_time_profiler_free=PROCEDURE) +SYMBOL_VECTOR=(P_TIME_PROFILER_FREE/p_time_profiler_free=PROCEDURE) +! +! ptree.h +! +SYMBOL_VECTOR=(p_tree_new=PROCEDURE) +SYMBOL_VECTOR=(P_TREE_NEW/p_tree_new=PROCEDURE) +SYMBOL_VECTOR=(p_tree_new_with_data=PROCEDURE) +SYMBOL_VECTOR=(P_TREE_NEW_WITH_DATA/p_tree_new_with_data=PROCEDURE) +SYMBOL_VECTOR=(p_tree_new_full=PROCEDURE) +SYMBOL_VECTOR=(P_TREE_NEW_FULL/p_tree_new_full=PROCEDURE) +SYMBOL_VECTOR=(p_tree_insert=PROCEDURE) +SYMBOL_VECTOR=(P_TREE_INSERT/p_tree_insert=PROCEDURE) +SYMBOL_VECTOR=(p_tree_remove=PROCEDURE) +SYMBOL_VECTOR=(P_TREE_REMOVE/p_tree_remove=PROCEDURE) +SYMBOL_VECTOR=(p_tree_lookup=PROCEDURE) +SYMBOL_VECTOR=(P_TREE_LOOKUP/p_tree_lookup=PROCEDURE) +SYMBOL_VECTOR=(p_tree_foreach=PROCEDURE) +SYMBOL_VECTOR=(P_TREE_FOREACH/p_tree_foreach=PROCEDURE) +SYMBOL_VECTOR=(p_tree_clear=PROCEDURE) +SYMBOL_VECTOR=(P_TREE_CLEAR/p_tree_clear=PROCEDURE) +SYMBOL_VECTOR=(p_tree_get_type=PROCEDURE) +SYMBOL_VECTOR=(P_TREE_GET_TYPE/p_tree_get_type=PROCEDURE) +SYMBOL_VECTOR=(p_tree_get_nnodes=PROCEDURE) +SYMBOL_VECTOR=(P_TREE_GET_NNODES/p_tree_get_nnodes=PROCEDURE) +SYMBOL_VECTOR=(p_tree_free=PROCEDURE) +SYMBOL_VECTOR=(P_TREE_FREE/p_tree_free=PROCEDURE) +! +! puthread.h +! +SYMBOL_VECTOR=(p_uthread_create_full=PROCEDURE) +SYMBOL_VECTOR=(P_UTHREAD_CREATE_FULL/p_uthread_create_full=PROCEDURE) +SYMBOL_VECTOR=(p_uthread_create=PROCEDURE) +SYMBOL_VECTOR=(P_UTHREAD_CREATE/p_uthread_create=PROCEDURE) +SYMBOL_VECTOR=(p_uthread_exit=PROCEDURE) +SYMBOL_VECTOR=(P_UTHREAD_EXIT/p_uthread_exit=PROCEDURE) +SYMBOL_VECTOR=(p_uthread_join=PROCEDURE) +SYMBOL_VECTOR=(P_UTHREAD_JOIN/p_uthread_join=PROCEDURE) +SYMBOL_VECTOR=(p_uthread_sleep=PROCEDURE) +SYMBOL_VECTOR=(P_UTHREAD_SLEEP/p_uthread_sleep=PROCEDURE) +SYMBOL_VECTOR=(p_uthread_set_priority=PROCEDURE) +SYMBOL_VECTOR=(P_UTHREAD_SET_PRIORITY/p_uthread_set_priority=PROCEDURE) +SYMBOL_VECTOR=(p_uthread_yield=PROCEDURE) +SYMBOL_VECTOR=(P_UTHREAD_YIELD/p_uthread_yield=PROCEDURE) +SYMBOL_VECTOR=(p_uthread_current_id=PROCEDURE) +SYMBOL_VECTOR=(P_UTHREAD_CURRENT_ID/p_uthread_current_id=PROCEDURE) +SYMBOL_VECTOR=(p_uthread_current=PROCEDURE) +SYMBOL_VECTOR=(P_UTHREAD_CURRENT/p_uthread_current=PROCEDURE) +SYMBOL_VECTOR=(p_uthread_ideal_count=PROCEDURE) +SYMBOL_VECTOR=(P_UTHREAD_IDEAL_COUNT/p_uthread_ideal_count=PROCEDURE) +SYMBOL_VECTOR=(p_uthread_ref=PROCEDURE) +SYMBOL_VECTOR=(P_UTHREAD_REF/p_uthread_ref=PROCEDURE) +SYMBOL_VECTOR=(p_uthread_unref=PROCEDURE) +SYMBOL_VECTOR=(P_UTHREAD_UNREF/p_uthread_unref=PROCEDURE) +SYMBOL_VECTOR=(p_uthread_local_new=PROCEDURE) +SYMBOL_VECTOR=(P_UTHREAD_LOCAL_NEW/p_uthread_local_new=PROCEDURE) +SYMBOL_VECTOR=(p_uthread_local_free=PROCEDURE) +SYMBOL_VECTOR=(P_UTHREAD_LOCAL_FREE/p_uthread_local_free=PROCEDURE) +SYMBOL_VECTOR=(p_uthread_get_local=PROCEDURE) +SYMBOL_VECTOR=(P_UTHREAD_GET_LOCAL/p_uthread_get_local=PROCEDURE) +SYMBOL_VECTOR=(p_uthread_set_local=PROCEDURE) +SYMBOL_VECTOR=(P_UTHREAD_SET_LOCAL/p_uthread_set_local=PROCEDURE) +SYMBOL_VECTOR=(p_uthread_replace_local=PROCEDURE) +SYMBOL_VECTOR=(P_UTHREAD_REPLACE_LOCAL/p_uthread_replace_local=PROCEDURE) diff --git a/3rdparty/plibsys/platforms/vms-general/vms_shorten_symbol.c b/3rdparty/plibsys/platforms/vms-general/vms_shorten_symbol.c new file mode 100644 index 0000000..fbb6c5a --- /dev/null +++ b/3rdparty/plibsys/platforms/vms-general/vms_shorten_symbol.c @@ -0,0 +1,238 @@ +/* + * Copyright (c) 2010 Craig A. Berry + * Copyright (c) 2016 Alexander Saprykin + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +/* vms_shorten_symbol + * + * This program provides shortening of long symbols (> 31 characters) using the + * same mechanism as the OpenVMS C compiler. The basic procedure is to compute + * an AUTODIN II checksum of the entire symbol, encode the checksum in base32, + * and glue together a shortened symbol from the first 23 characters of the + * original symbol plus the encoded checksum appended. The output format is + * the same as that of the name mangler database, stored by default in + * [.CXX_REPOSITORY]CXX$DEMANGLER_DB. + * + * To obtain the same result as CC/NAMES=SHORTENED, run like so: + * + * $ mcr []vms_shorten_symbol "Please_forgive_this_absurdly_long_symbol_name" + * PLEASE_FORGIVE_THIS_ABS1ARO4QU$Please_forgive_this_absurdly_long_symbol_name + * + * To obtain the same result as CC/NAMES=(SHORTENED,AS_IS), pass a non-zero + * value as the second argument, like so: + * + * $ mcr []vms_shorten_symbol "Please_forgive_this_absurdly_long_symbol_name" 1 + * Please_forgive_this_abs3rv8rnn$Please_forgive_this_absurdly_long_symbol_name + */ + +#include +#include +#include +#include + +#ifdef __VMS +# define UINT32 unsigned int +#else +# include +# define UINT32 uint32_t +#endif + +static UINT32 crc32 (const char *input_string); +static UINT32 u32_to_base32 (UINT32 input, char *output); +static UINT32 vms_shorten_symbol (const char *symbol, char *shortened, char as_is_flag); + +/* + * This routine implements the AUTODIN II polynomial. + */ +UINT32 +crc32 (const char *input_string) +{ + + /* + * CRC code and data based partly on FreeBSD implementation, which + * notes: + * + * The crc32 functions and data was originally written by Spencer + * Garrett >s...@quick.com> and was cleaned from the PostgreSQL source + * tree via the files contrib/ltree/crc32.[ch]. No license was + * included, therefore it is assumed that this code is public + * domain. Attribution still noted. + * + * (I think they mean "gleaned" not "cleaned".) + */ + static const UINT32 autodin_ii_table[256] = { + 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, + 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, + 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, + 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, + 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, + 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, + 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, + 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, + 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, + 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, + 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, + 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, + 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, + 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, + 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, + 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, + 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, + 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, + 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, + 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, + 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, + 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, + 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, + 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, + 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, + 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, + 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, + 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, + 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, + 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, + 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, + 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, + 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, + 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, + 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, + 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, + 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, + 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, + 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, + 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, + 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, + 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, + 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d, + }; + + UINT32 crc = ~0UL; + char * c; + + for (c = (char *) input_string; *c; ++c) + crc = (crc >> 8) ^ autodin_ii_table[(crc ^ *c) & 0xff]; + + return ~crc; +} + +/* + * This is the RFC2938 variant of base32, not RFC3548, Crockford's, or + * other newer variant. It produces an 8-byte encoded character string + * (plus trailing null) from a 32-bit integer input. + */ +static UINT32 +u32_to_base32 (UINT32 input, char *output) +{ + static const char base32hex_table[32] = { + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', + 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', + 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', + 'u', 'v' + }; + + int i; + + /* + * Grab lowest 5 bits and look up conversion in table. Lather, rinse, + * repeat for 6, 5-bit chunks to accommodate 32 bits of input. + */ + for (i = 0; i < 7; i++) { + output[6 - i] = base32hex_table[input & 0x1f]; + + /* Position to look at next 5. */ + input >>= 5; + } + + /* It's DEC, so use '$' not '=' to pad. */ + output[7] = '$'; + output[8] = '\0'; + + return 0; +} + +static UINT32 +vms_shorten_symbol (const char *symbol, char *shortened, char as_is_flag) +{ + char b32str[9]; + UINT32 crc; + char * c; + + crc = crc32 (symbol); + + /* + * The compiler does not use the inverted checksum, so we invert it + * back before encoding. + */ + (void) u32_to_base32 (~crc, (char *) &b32str); + + if (!as_is_flag) { + for (c = (char *) &b32str; *c; c++) + *c = toupper (*c); + } + + sprintf (shortened, "%.23s%.8s\n", symbol, b32str); + shortened[31] = '\0'; + + return 0; +} + +int +main (int argc, char **argv) +{ + char short_symbol[32]; + char as_is_flag = 0; + char * c; + char * input_symbol; + int symlen; + + if (argc < 2) { + fprintf (stderr, "Usage: %s []\n", argv[0]); + return EXIT_FAILURE; + } + + if (argc > 2) + as_is_flag = 1; + + symlen = strlen (argv[1]); + + if (symlen <= 31) { + printf ("No need for shorten symbol\n"); + return EXIT_SUCCESS; + } + + input_symbol = malloc (symlen + 1); + + if (input_symbol == NULL) + return EXIT_FAILURE; + + strncpy (input_symbol, argv[1], symlen); + input_symbol[symlen] = '\0'; + + if (!as_is_flag) { + for (c = input_symbol; *c; c++) + *c = toupper (*c); + } + + vms_shorten_symbol (input_symbol, (char *) &short_symbol, as_is_flag); + printf ("%s%s\n", &short_symbol, argv[1]); + free (input_symbol); + + return EXIT_SUCCESS; +} -- cgit v1.2.1