diff options
| author | Ali Bahrami <Ali.Bahrami@Sun.COM> | 2009-08-20 16:09:41 -0600 |
|---|---|---|
| committer | Ali Bahrami <Ali.Bahrami@Sun.COM> | 2009-08-20 16:09:41 -0600 |
| commit | 75ce41a57ff334bd8fe2cb9ed51eea835892f944 (patch) | |
| tree | b51a5ec778af45592b2d789d302c0bccbeaafed6 /exception_lists | |
| parent | f8cb811f5f2909e15e8d1f21f046ac459d0640e5 (diff) | |
| download | illumos-joyent-75ce41a57ff334bd8fe2cb9ed51eea835892f944.tar.gz | |
6866605 SUNWonbld ELF analysis tools need overhaul
Diffstat (limited to 'exception_lists')
| -rw-r--r-- | exception_lists/check_rtime | 226 | ||||
| -rw-r--r-- | exception_lists/interface_check | 109 | ||||
| -rw-r--r-- | exception_lists/interface_cmp | 146 |
3 files changed, 481 insertions, 0 deletions
diff --git a/exception_lists/check_rtime b/exception_lists/check_rtime new file mode 100644 index 0000000000..0c4d11c355 --- /dev/null +++ b/exception_lists/check_rtime @@ -0,0 +1,226 @@ + +# +# CDDL HEADER START +# +# The contents of this file are subject to the terms of the +# Common Development and Distribution License (the "License"). +# You may not use this file except in compliance with the License. +# +# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE +# or http://www.opensolaris.org/os/licensing. +# See the License for the specific language governing permissions +# and limitations under the License. +# +# When distributing Covered Code, include this CDDL HEADER in each +# file and include the License file at usr/src/OPENSOLARIS.LICENSE. +# If applicable, add the following below this CDDL HEADER, with the +# fields enclosed by brackets "[]" replaced with your own identifying +# information: Portions Copyright [yyyy] [name of copyright owner] +# +# CDDL HEADER END +# + +# +# Copyright 2009 Sun Microsystems, Inc. All rights reserved. +# Use is subject to license terms. +# + +# This file provides exceptions to the usual rules applied to ELF objects by +# check_rtime. All strings are Perl regular expressions that are compared to +# file paths. In addition to the standard Perl syntax, there is one extension: +# +# MACH(dir) +# +# is expanded into a regular expression that matches the given +# directory, or a 64-bit subdirectory of the directory with the +# name of a 64-bit architecture. For example, MACH(lib) will match +# any of the following: +# +# lib +# lib/amd64 +# lib/sparcv9 + + +# Directory hierarchies to skip completely +SKIP ^usr/lib/libc/ # optimized libc +SKIP ^usr/lib/rcm/ # 4426119 +SKIP ^usr/perl5/ # alan's taking care of these :-) +SKIP ^usr/src/ # no objects in source code + +# Individual files that we don't examine +SKIP ^boot/grub/bin/grub$ +SKIP ^usr/apache/libexec/mod_ipp.so$ # Apache loadable module +# USIII specific extns. cause ldd noise on USII bld. m/c +SKIP ^usr/lib/fps/sun4u/UltraSPARC.*/fptest$ +SKIP ^usr/MACH(lib)/lddstub$ # lddstub has no dependencies +SKIP ^usr/MACH(lib)/libssagent\.so\.1$ # 4328854 +SKIP ^usr/lib/MACH(iconv)/geniconvtbl.so$ # 4384329 + +# picl file exclusions (4385799) +SKIP ^usr/platform/.*/libpsvcplugin_psr\.so\.1 +SKIP ^usr/platform/.*/libpsvcpolicy_psr\.so\.1 +SKIP ^usr/platform/.*/libpsvcpolicy\.so\.1 +SKIP ^usr/lib/sysevent/modules/picl_slm.so$ + +# Objects that don't require a non-executable stack definition +EXEC_STACK ^platform/.*/MACH(kernel)/unix$ +EXEC_STACK ^platform/.*/multiboot$ + +# Objects for which we allow relocations to the text segment +TEXTREL ^platform/.*/MACH(kernel)/unix$ + +# Directories and files that are allowed to have no direct bound symbols +NODIRECT ^platform/.*/MACH(kernel)/unix$ +NODIRECT ^usr/ucb +NODIRECT ^usr/4lib/sbcp$ + +# Identify any files that should be skipped when building a crle(1) +# configuration file. As the hwcap libraries can be loop-back mounted onto +# libc, these can confuse crle(1) because of their identical dev/inode. +NOCRLEALT ^usr/lib/libc/libc_hwcap[1-3].so.1$ + +# Files that should contain debugging information. +STAB ^platform/.*/MACH(kernel)/unix$ + +# Files that are allowed undefined references +UNDEF_REF ^usr/lib/libnisdb\.so\.2$ +UNDEF_REF ^usr/snadm/lib/libsvm\.so\.1$ + +# Objects allowed to have unused dependencies +UNUSED_DEPS ^usr/lib/picl/plugins/ # require devtree dependencies +UNUSED_DEPS ^usr/lib/libp # profile libc makes libm an unused dep of libc + +# libm.so.2 dependency +UNUSED_OBJ unused object=.*MACH(libm)/libm_hwcap1\.so\.2 + +# Unused runpaths due to dlopen() use +UNUSED_RPATH /usr/lib/fs/autofs.*\ from\ .automountd +UNUSED_RPATH /etc/ppp/plugins.*\ from\ .*pppd +UNUSED_RPATH /usr/lib/inet/ppp.*\ from\ .*pppd +UNUSED_RPATH /usr/sfw/lib.*\ from\ .*libipsecutil\.so\.1 +UNUSED_RPATH /usr/platform/.*rsmlib.*\ from\ .*librsm\.so\.2 +UNUSED_RPATH \$ORIGIN.*\ from\ .*fcode.so +UNUSED_RPATH /opt/VRTSvxvm/lib.*\ from\ .*libdiskmgt\.so\.1 + +# Unused runpaths in picl code +UNUSED_RPATH /usr/platform/.*\ from\ .*/usr/platform +UNUSED_RPATH /usr/lib/picl/.*\ from\ .*/usr/platform +UNUSED_RPATH /usr/platform/.*\ from\ .*/usr/lib/picl + +# Unused runpaths in non-OSNET objects we can't change +UNUSED_RPATH /usr/lib/mps/secv1.*\ from\ .*libnss3\.so +UNUSED_RPATH /usr/lib/mps.*\ from\ .*libnss3\.so +UNUSED_RPATH /usr/lib/mps.*\ from\ .*libnssutil3.so +UNUSED_RPATH /usr/sfw/lib.*\ from\ .*libdbus-1\.so\.3 +UNUSED_RPATH /usr/sfw/lib.*\ from\ .*libdbus-glib-1\.so\.2 +UNUSED_RPATH /usr/sfw/lib.*\ from\ .*libglib-2\.0\.so\.0 +UNUSED_RPATH /usr/X11/lib.*\ from\ .*libglib-2\.0\.so\.0 +UNUSED_RPATH /usr/sfw/lib.*\ from\ .*libgmodule-2\.0\.so\.0 +UNUSED_RPATH /usr/X11/lib.*\ from\ .*libgmodule-2\.0\.so\.0 +UNUSED_RPATH /usr/sfw/lib.*\ from\ .*libgnomevfs-2\.so\.0 +UNUSED_RPATH /usr/sfw/lib.*\ from\ .*libgobject-2\.0\.so\.0 +UNUSED_RPATH /usr/X11/lib.*\ from\ .*libgobject-2\.0\.so\.0 +UNUSED_RPATH /usr/sfw/lib.*\ from\ .*libgthread-2\.0\.so\.0 +UNUSED_RPATH /usr/X11/lib.*\ from\ .*libgthread-2\.0\.so\.0 +UNUSED_RPATH /usr/sfw/lib.*\ from\ .*libcrypto\.so\.0\.9\.8 +UNUSED_RPATH /usr/sfw/lib.*\ from\ .*libnetsnmp\.so\.15 +UNUSED_RPATH /usr/sfw/lib.*\ from\ .*libgcc_s\.so\.1 +UNUSED_RPATH /usr/postgres/8.3/lib.*\ from\ .*libpq\.so\.5 +UNUSED_RPATH /usr/sfw/lib.*\ from\ .*libpq\.so\.5 + +# Unused runpaths for reasons not captured above +UNUSED_RPATH /usr/lib/smbsrv.*\ from\ .*libsmb\.so\.1 # future needs +UNUSED_RPATH /usr.*\ from\ .*tst\.gcc\.exe # gcc built + + +# Unreferenced objects of non-OSnet objects we can't change +UNREF_OBJ /lib.*\ of\ .*libcimapi\.so +UNREF_OBJ /lib.*\ of\ .*libjvm\.so +UNREF_OBJ /lib.*\ of\ .*libnetsnmp\.so\.15 +UNREF_OBJ /lib.*\ of\ .*libnetsnmpagent\.so\.15 +UNREF_OBJ /lib.*\ of\ .*libnetsnmpmibs\.so\.15 +UNREF_OBJ /lib.*\ of\ .*libnetsnmphelpers\.so\.15 +UNREF_OBJ /lib.*\ of\ .*libnspr4\.so +UNREF_OBJ /lib.*\ of\ .*libpq\.so\.5 +UNREF_OBJ /lib.*\ of\ .*libsoftokn3\.so +UNREF_OBJ /lib.*\ of\ .*libspmicommon\.so\.1 +UNREF_OBJ /lib.*\ of\ .*libspmocommon\.so\.1 +UNREF_OBJ /lib.*\ of\ .*libssl3\.so +UNREF_OBJ /lib.*\ of\ .*libtspi\.so\.1 +UNREF_OBJ /lib.*\ of\ .*libxml2\.so\.2 +UNREF_OBJ /lib.*\ of\ .*libxslt\.so\.1 +UNREF_OBJ /lib.*\ of\ .*libpq\.so\.4 +UNREF_OBJ /lib.*\ of\ .*libpython2\.4\.so\.1\.0 + +# Unreferenced object of objects we can't change for other reasons +UNREF_OBJ /libmapmalloc\.so\.1;\ unused\ dependency\ of # interposer +UNREF_OBJ /libstdc\+\+\.so\.6;\ unused\ dependency\ of # gcc build +UNREF_OBJ /libm\.so\.2.*\ of\ .*libstdc\+\+\.so\.6 # gcc build +UNREF_OBJ /lib.*\ of\ .*/lib/picl/plugins/ # picl +UNREF_OBJ /lib.*\ of\ .*kcfd # interposer +UNREF_OBJ /libpkcs11\.so\.1; .*\ of\ .*libkmf\.so\.1 # interposed + +# Objects that used to contain system functionalty that has since +# migrated to libc. We preserve these libraries as pure filters for +# backward compatability but nothing needs to link to them. +OLDDEP libaio\.so\.1 # onnv build 44 +OLDDEP libdl\.so\.1 # on10 build 49 +OLDDEP libdoor\.so\.1 # onnv build 12 +OLDDEP libintl\.so\.1 # on297 build 7 +OLDDEP libpthread\.so\.1 # on10 build 53 +OLDDEP librt\.so\.1 # onnv build 44 +OLDDEP libsched\.so\.1 # on10 build 36 +OLDDEP libthread\.so\.1 # on10 build 53 +OLDDEP libw\.so\.1 # on297 build 7 + +# Files for which we skip checking of duplicate addresses in the +# symbol sort sections. Such exceptions should be rare --- most code will +# not have duplicate addresses, since it takes assember or a "#pragma weak" +# to do such aliasing in C. C++ is different: The compiler generates aliases +# for implementation reasons, and the mangled names used to encode argument +# and return value types are difficult to handle well in mapfiles. +# Furthermore, the Sun compiler and gcc use different and incompatible +# name mangling conventions. Since ON must be buildable by either, we +# would have to maintain two sets of mapfiles for each such object. +# C++ use is rare in ON, so this is not worth pursuing. +# +NOSYMSORT opt/SUNWdtrt/tst/common/pid/tst.weak2.exe # DTrace test +NOSYMSORT lib/amd64/libnsl\.so\.1 # C++ +NOSYMSORT lib/sparcv9/libnsl\.so\.1 # C++ +NOSYMSORT lib/sparcv9/libfru\.so\.1 # C++ +NOSYMSORT usr/lib/sgml/nsgmls # C++ +NOSYMSORT usr/lib/lms # C++ +NOSYMSORT ld\.so\.1 # libc_pic.a user +NOSYMSORT lib/libsun_fc\.so\.1 # C++ +NOSYMSORT lib/amd64/libsun_fc\.so\.1 # C++ +NOSYMSORT lib/sparcv9/libsun_fc\.so\.1 # C++ + + +# The libprtdiag_psr.so.1 objects built under usr/src/lib/libprtdiag_psr +# are a family, all built using the same makefile, targeted at different +# sparc hardware variants. There are a small number of cases where this +# one size fits all approach causes an object to be linked against an +# unneeded library. +UNREF_OBJ lib/(libdevinfo|libcfgadm)\.so\.1; .*\ of\ .*SUNW,Netra-CP2300/lib/libprtdiag_psr\.so\.1 + + +# Remove this once the following integrates: +# 6858961 check_rtime issues with fwflash plugins (IB transports) +# +SKIP ^usr/lib/fwflash/identify/hermon\.so$ +SKIP ^usr/lib/fwflash/identify/tavor\.so$ +SKIP ^usr/lib/fwflash/verify/hermon-MELLANOX\.so$ +SKIP ^usr/lib/fwflash/verify/tavor-MELLANOX\.so$ + + +# Remove this once the following integrates: +# 6858954 check_rtime issues with fwflash plugins (scsi transports) +# +SKIP ^usr/lib/fwflash/identify/sd\.so$ +SKIP ^usr/lib/fwflash/identify/ses\.so$ +SKIP ^usr/lib/fwflash/identify/sgen\.so$ +SKIP ^usr/lib/fwflash/verify/sd-GENERIC\.so$ +SKIP ^usr/lib/fwflash/verify/ses-LSILOGIC\.so$ +SKIP ^usr/lib/fwflash/verify/ses-SUN\.so$ +SKIP ^usr/lib/fwflash/verify/sgen-LSILOGIC\.so$ +SKIP ^usr/lib/fwflash/verify/sgen-SUN\.so$ diff --git a/exception_lists/interface_check b/exception_lists/interface_check new file mode 100644 index 0000000000..600a34864a --- /dev/null +++ b/exception_lists/interface_check @@ -0,0 +1,109 @@ +# +# CDDL HEADER START +# +# The contents of this file are subject to the terms of the +# Common Development and Distribution License (the "License"). +# You may not use this file except in compliance with the License. +# +# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE +# or http://www.opensolaris.org/os/licensing. +# See the License for the specific language governing permissions +# and limitations under the License. +# +# When distributing Covered Code, include this CDDL HEADER in each +# file and include the License file at usr/src/OPENSOLARIS.LICENSE. +# If applicable, add the following below this CDDL HEADER, with the +# fields enclosed by brackets "[]" replaced with your own identifying +# information: Portions Copyright [yyyy] [name of copyright owner] +# +# CDDL HEADER END +# + +# +# Copyright 2009 Sun Microsystems, Inc. All rights reserved. +# Use is subject to license terms. +# + +# This file provides exceptions to the usual rules applied to sharable +# objects by intf_check. All strings are Perl regular expressions that +# are compared to file names. In addition to the standard Perl syntax, +# there is one extension: +# +# MACH(dir) +# +# is expanded into a regular expression that matches the given +# directory, or a 64-bit subdirectory of the directory with the +# name of a 64-bit architecture. For example, MACH(lib) will match +# any of the following: +# +# lib +# lib/amd64 +# lib/sparcv9 + + +# Sharable objects underneath these parts of the tree are taken to be plugins. +# Plugins are not required to have versioned file names, and are not required +# to be internally versioned. +# +PLUGIN ^usr/apache/libexec +PLUGIN ^usr/lib/devfsadm +PLUGIN ^usr/lib/efcode/.*\.so$ +PLUGIN ^usr/lib/elfedit +PLUGIN ^usr/lib/fm/fmd/plugins +PLUGIN ^usr/lib/fm/fmd/schemes +PLUGIN ^usr/lib/fm/topo/plugins +PLUGIN ^usr/lib/fwflash +PLUGIN ^usr/lib/iconv +PLUGIN ^usr/lib/inet/ppp +PLUGIN ^usr/lib/mdb +PLUGIN ^usr/lib/mms +PLUGIN ^usr/lib/pci +PLUGIN ^usr/lib/picl/plugins +PLUGIN ^usr/lib/python2.4 +PLUGIN ^usr/lib/rcm/modules +PLUGIN ^usr/lib/scsi/plugins +PLUGIN ^usr/lib/sysevent/modules +PLUGIN ^usr/perl5/5\.[^\\]*/lib +PLUGIN ^usr/platform +PLUGIN ^usr/sadm/lib/wbem + + +# sbcp is a special case, and not a plugin. However, it does not have a +# versioned name, and does not contain versioning, so the PLUGIN exemptions fit. +PLUGIN ^usr/4lib/sbcp$ + + +# Objects that are not expected to contain versioning information. +# Note that PLUGIN objects are automatically exempt from this, +# so these directives are generally applied to non-plugin objects +NOVERDEF ^usr/4lib/libc\.so\. +NOVERDEF ^usr/MACH(lib)/0\@0\.so\.1$ +NOVERDEF ^usr/lib/MACH(abi)/apptrace\.so\.1$ +NOVERDEF ^usr/MACH(lib)/libfru.*\.so\.1$ +NOVERDEF ^usr/MACH(lib)/libkrb5\.so\.1$ +NOVERDEF ^usr/MACH(lib)/libzpool\.so\.1$ +NOVERDEF ^usr/MACH(lib)/madv\.so\.1$ +NOVERDEF ^usr/MACH(lib)/mpss\.so\.1$ +NOVERDEF ^usr/MACH(lib)/sn1_brand\.so\.1$ +NOVERDEF ^usr/lib/fs/[^/]*/fstyp\.so\.1$ +NOVERDEF ^usr/lib/libmilter\.so\.1$ +NOVERDEF ^usr/lib/libwrap\.so\.1\.0$ +NOVERDEF ^usr/lib/locale/MACH(iso_8859_1)/iso_8859_1\.so\.3$ +NOVERDEF ^usr/lib/picl/plugins$ +NOVERDEF ^usr/sadm/admin/dhcpmgr/dhcpmgr\.so\.1$ +NOVERDEF ^usr/sadm/admin/printmgr/lib/libpmgr\.so\.1$ + + +# Objects that are allowed to deviate from our standard version +# names. +NONSTD_VERNAME ^usr/MACH(lib)/libtecla\.so\.1$ + + +# These libc variants have an SONAME of libc\.so\.1$ +NONSTD_VERNAME ^usr/MACH(lib)/libc/libc_hwcap[1-3]+\.so\.1$ + + +# The ABI requires the SONAME for libsys.so.1 to be /usr/lib/ld.so.1 +# That means that the base version will also be /usr/lib/ld.so.1, which +# is non-standard. +NONSTD_VERNAME ^usr/lib/libsys\.so\.1$ diff --git a/exception_lists/interface_cmp b/exception_lists/interface_cmp new file mode 100644 index 0000000000..74467305f1 --- /dev/null +++ b/exception_lists/interface_cmp @@ -0,0 +1,146 @@ +# +# CDDL HEADER START +# +# The contents of this file are subject to the terms of the +# Common Development and Distribution License (the "License"). +# You may not use this file except in compliance with the License. +# +# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE +# or http://www.opensolaris.org/os/licensing. +# See the License for the specific language governing permissions +# and limitations under the License. +# +# When distributing Covered Code, include this CDDL HEADER in each +# file and include the License file at usr/src/OPENSOLARIS.LICENSE. +# If applicable, add the following below this CDDL HEADER, with the +# fields enclosed by brackets "[]" replaced with your own identifying +# information: Portions Copyright [yyyy] [name of copyright owner] +# +# CDDL HEADER END +# + +# +# Copyright 2009 Sun Microsystems, Inc. All rights reserved. +# Use is subject to license terms. +# + +# This file provides exceptions to the usual rules applied to sharable +# objects by intf_cmp. All strings are Perl regular expressions that +# are compared to file, version, and symbol names. In addition to the +# standard Perl syntax, there is one extension: +# +# MACH(dir) +# +# is expanded into a regular expression that matches the given +# directory, or a 64-bit subdirectory of the directory with the +# name of a 64-bit architecture. For example, MACH(lib) will match +# any of the following: +# +# lib +# lib/amd64 +# lib/sparcv9 +# + + +## libbsm +# +# - Removed interfaces: setauclassfile, setaueventfile setauuserfile testac +# 4686423 undocumented interfaces are not used +# - Removed interfaces: auditsvc +# 6638707 implement the removal of auditsvc(2) as noted in PSARC/2002/665 +# +DELSYM ^(auditsvc|setauclassfile|setaueventfile|setauuserfile|testac)$ \ + ^SUNW_(0\.[7-8]|1\.[1-2])$ \ + ^MACH(lib)/libbsm\.so\.1$ + + +## libmalloc / libmapmalloc +# +# - Objects that provide malloc implementations had functions intentionally +# removed by: +# 6464344 malloc library cleanup +# PSARC 2006/477 malloc library cleanup +# +DELSYM ^(_cfree|_mallinfo|_mallopt)$ \ + ^SUNW_1\.1$ \ + ^usr/MACH(lib)/libmalloc\.so\.1$ +DELSYM ^(mallinfo|mallopt)$ \ + ^SUNW_(0\.7|1\.1)$ \ + ^usr/MACH(lib)/libmapmalloc\.so\.1$ +DELSYM ^(_cfree|_?mallinfo|_?mallopt|_memalign|_valloc)$ \ + ^SUNW_1\.1$ \ + ^usr/MACH(lib)/watchmalloc\.so\.1$ + + +## libc +# +# - In Solaris 10, libc version SUNW_1.23 was incorrectly defined. In a +# subsequent update, those symbols were properly transfered to SUNW_1.22.4. +# However, SUNW_1.23 had to remain in place as an empty version to satisfy +# executables already in the field that were bound to it. +# 6763000 libc versioning needs a little tlc in Solaris 10 +# The following excludes an empty top version SUNW_1.23 from triggering +# a flood of "added interface" errors. +# +EMPTY_TOPVERSION ^SUNW_1\.23$ ^MACH(lib)/libc\.so\.1$ +EMPTY_TOPVERSION ^SUNW_1\.23$ ^usr/lib/libc/libc_hwcap\d+\.so\.1$ + + +## libnsl +# +# - The function _inet_aton was removed from libnsl.so.1 as part of +# 6700179 expunge synonyms.h +# PSARC 2008/309 expunge synonyms.h +# - Version SUN_1.10 was vacated when inet_aton was backported into SUNW_1.9.1 +# 4944187 getaddrinfo doesn't convert broadcast address if dns +# isn't in nsswitch.conf +# 6747055 Solaris 10 apps using recent version of libnsl.so do +# not run on Nevada +# +DELSYM ^_inet_aton$ ^SUNW_1\.9\.1$ ^MACH(lib)/libnsl\.so\.1$ +EMPTY_TOPVERSION ^SUNW_1\.10$ ^MACH(lib)/libnsl\.so\.1$ + + +## libpapi +# +# - FSG_1.0 is a label for the Free Standards Group, version 1 of this library +# 6346505 print commands should use PAPI for service interaction +# (LSARC/2003/547) +# +EMPTY_TOPVERSION ^FSG_1\.0$ ^usr/lib/libpapi.so.0$ + + +## libresolv2 +# +# - Version SUNW_2.3 is empty +# 6689937 libresolv2's mapfile-vers needs updating to line up +# with S10 changes +# +EMPTY_TOPVERSION ^SUNW_2\.3$ ^MACH(lib)/libresolv\.so\.2$ + + +## librtld_db +# +# - rd_fix_phdrs() was introduced into Solaris 10 to support branded zones, +# and was removed as part of: +# 6599700 librtld_db needs better plugin support +# +DELSYM ^rd_fix_phdrs$ ^SUNW_1\.1$ ^MACH(lib)/librtld_db\.so\.1$ + + +## libtecla +# +# - gl_completion_action() was renamed pca_path_completions() +# - gl_set_term_size was moved from tecla_1.4 to tecla_l.5 +# - The version tecla_l.5 (note the "el" (l) instead of a one (1) is +# intentional. See the libtecla mapfile for details. +# +DELSYM ^gl_completion_action$ \ + ^tecla_1\.[2-4]$ \ + ^usr/MACH(lib)/libtecla\.so\.1$ +DELSYM ^gl_set_term_size$ \ + ^tecla_1\.4$ \ + ^usr/MACH(lib)/libtecla\.so\.1$ +ADDSYM ^pca_path_completions$ \ + ^(tecla_1\.[2346]|tecla_l\.5)$ \ + ^usr/MACH(lib)/libtecla\.so\.1$ |
